[Bug tree-optimization/39300] New: vectorizer confused by predictive commoning
matz at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Wed Feb 25 12:16:00 GMT 2009
The loop in this test is not vectorized if either PRE or predictive
commoning is active:
% cat vecttest2.f
subroutine Bench_StaggeredLeapfrog2( cctk_dim,XADM_curv_stag0,
&ADM_kzz_stag,lgxx,nx)
implicit none
INTEGER cctk_dim
INTEGER XADM_curv_stag0
REAL*8 ADM_kzz_stag(XADM_curv_stag0)
integer :: i
integer :: nx
REAL*8,DIMENSION(cctk_dim):: lgxx
do i=2,nx-1
ADM_kzz_stag(i) = ADM_kzz_stag(i)+lgxx(i)+lgxx(i-1)+lgxx(i+1)
end do
end subroutine Bench_StaggeredLeapfrog2
% gfortran -c -O3 -g -ffast-math -ftree-vectorizer-verbose=2 vecttest2.f
vecttest2.f:11: note: not vectorized: unsupported use in stmt.
vecttest2.f:12: note: not vectorized: unsupported use in stmt.
% add -fno-tree-pre -fno-predictive-commoning to above command:
vecttest2.f:11: note: LOOP VECTORIZED.
% add only -fno-tree-pre (so predictive commoning is active):
vecttest2.f:11: note: LOOP VECTORIZED.
vecttest2.f:12: note: not vectorized: unsupported use in stmt.
The one vectorized loop in case it mentions two of them is the tail loop
for the one produced by predictive commoning. That one doesn't contain
any loop carried values. Somehow the vectorizer doesn't like the
PHI nodes in the loop created by predictive commoning.
This testcase comes from 436.cactusADM, where it's very important to
vectorize a certain inner loop, and this (PRE and predcom) is one reason this
doesn't happen already.
--
Summary: vectorizer confused by predictive commoning
Product: gcc
Version: 4.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: matz at gcc dot gnu dot org
GCC host triplet: x86_64-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39300
More information about the Gcc-bugs
mailing list