Here is a reduced testcase for Polyhedron:fatigue.f90:928. The non vectorized loops that compute stress_tensor show up on the top user times in the profile of that benchmark:
module perdida_m integer, parameter, private :: LONGreal = selected_real_kind(15,90) contains subroutine perdida (lambda, mu, stress_tensor, strain_tensor, plastic_strain_tensor) real (kind = LONGreal), intent(in) :: lambda, mu real (kind = LONGreal), dimension(:,:), intent(in) :: strain_tensor real (kind = LONGreal), dimension(:,:), intent(inout) :: plastic_strain_tensor real (kind = LONGreal), dimension(:,:), intent(out) :: stress_tensor stress_tensor(:,:) = (1.0_LONGreal - damage) * & generalized_hookes_law (strain_tensor(:,:) - & plastic_strain_tensor(:,:), lambda, mu) end subroutine perdida function generalized_hookes_law (strain_tensor, lambda, mu) result (stress_tensor) real (kind = LONGreal), dimension(:,:), intent(in) :: strain_tensor real (kind = LONGreal), intent(in) :: lambda, mu real (kind = LONGreal), dimension(3,3) :: stress_tensor end function generalized_hookes_law end module perdida_m This is due to data ref analysis problems: ./fatigue.f90:14: note: not vectorized: data ref analysis failed (*stress_tensor.0_16)[D.1508_168] = D.1513_173 ./fatigue.f90:14: note: bad data references. and ./fatigue.f90:14: note: not vectorized: data ref analysis failed D.1489_133 = (*strain_tensor.0_41)[D.1488_132] ./fatigue.f90:14: note: bad data references. -- Summary: Missed opportunities for vectorization due to data ref analysis Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: spop at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33246