Bug 49969

Summary: not vectorized: data ref analysis failed
Product: gcc Reporter: Tobias Burnus <burnus>
Component: tree-optimizationAssignee: Not yet assigned to anyone <unassigned>
Status: NEW ---    
Severity: normal CC: irar, rguenther, spop
Priority: P3 Keywords: missed-optimization
Version: 4.7.0   
Target Milestone: ---   
Host: Target:
Build: Known to work:
Known to fail: Last reconfirmed: 2011-08-04 09:44:45
Bug Depends on:    
Bug Blocks: 53947    

Description Tobias Burnus 2011-08-03 17:23:03 UTC
The following program does not vectorize. With Intel's ifort one gets the
message:

  PERMUTED LOOP WAS VECTORIZED

while GCC just prints:

test.f90:6: note: not vectorized: data ref analysis failed D.1566_33 = *iz_32(D)[D.1565_31];

test.f90:7: note: not vectorized: data ref analysis failed D.1566_33 = *iz_32(D)[D.1565_31];

test.f90:2: note: vectorized 0 loops in function.


In case of GCC, it does not depend on the loop order - permuting does not change anything. Also it is independent of the patch to PR 49957.


! From Polyhedron's ac.f90, line 746
      SUBROUTINE SUSCEP(L,Iz,Dsus)
      INTEGER L , Iz(L,L) , iznum
      DOUBLE PRECISION Dsus
      iznum = 0
      DO iy = 1 , L
        DO ix = 1 , L
          iznum = iznum + Iz(iy,ix)
        ENDDO
      ENDDO
      Dsus = DBLE(iznum)
      Dsus = Dsus*Dsus
      Dsus = Dsus/(L*L)
      END
Comment 1 Richard Biener 2011-08-04 09:44:45 UTC
Well, that's because the evolution of D.1565_31 is

{{(stride.2_11 + offset.3_21) + 1, +, 1}_1, +, stride.2_11}_2

the loop needs interchange to be vectorized, but that doesn't work either
(no idea for the reason - the .graphite dump isn't very informative here,
well, maybe it runs into the exactly same issue and already gives up?)

Sebastian?

Confirmed anyway.  Supposed to be vectorized with -floop-interchange.
Comment 2 Richard Biener 2012-07-13 08:34:49 UTC
Link to vectorizer missed-optimization meta-bug.