https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79315

            Bug ID: 79315
           Summary: ICE while building SPEC CPU 2006 FP with -Ofast
                    -ftree-parallelize-loops
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: pinskia at gcc dot gnu.org
  Target Milestone: ---
            Target: aarch64-linux-gnu

I don't know if this is a GCC 7 regression or not.
Compiling wrf in SPEC CPU 2006 FP  with -Ofast -ftree-parallelize-loops
produces an ICE about location references block not in block tree.

Reduced example:
SUBROUTINE wsm32D(t, &
   w, &
   den, &
   p, &
   delz, &
                     its,&
   ite, &
   kts, &
   kte  &
                      )
  REAL, DIMENSION( its:ite , kts:kte ),                           &
        INTENT(INOUT) ::                                          &
                                                               t
  REAL, DIMENSION( ims:ime , kms:kme ),                           &
        INTENT(IN   ) ::                                       w, &
                                                             den, &
                                                               p, &
                                                            delz
  REAL, DIMENSION( its:ite , kts:kte ) ::                         &
        qs, &
        xl, &
        work1, &
        work2, &
        qs0, &
        n0sfac
      diffus(x,y) = 8.794e-5*x**1.81/y
      diffac(a,b,c,d,e) = d*a*a/(xka(c,d)*rv*c*c)+1./(e*diffus(c,b))
      venfac(a,b,c) = (viscos(b,c)/diffus(b,a))**(.3333333)       &
             /viscos(b,c)**(.5)*(den0/c)**0.25
      do loop = 1,loops
      xa=-dldt/rv
      do k = kts, kte
        do i = its, ite
          tr=ttp/t(i,k)
          if(t(i,k).lt.ttp) then
            qs(i,k) =psat*(tr**xa)*exp(xb*(1.-tr))
          endif
          qs0(i,k)  =psat*(tr**xa)*exp(xb*(1.-tr))
        enddo
        do i = its, ite
          if(t(i,k).ge.t0c) then
            work1(i,k) = diffac(xl(i,k),p(i,k),t(i,k),den(i,k),qs(i,k))
          endif
          work2(i,k) = venfac(p(i,k),t(i,k),den(i,k))
        enddo
      enddo
      enddo                  ! big loops
END SUBROUTINE wsm32D

This produces:

t.f90:1:0:

 SUBROUTINE wsm32D(t, &

Error: location references block not in block tree
__builtin_powf
_224 = __builtin_powf (_38, 1.809999942779541015625e+0);
t.f90:1:0: Error: location references block not in block tree
__builtin_powf
_229 = __builtin_powf (pretmp_227, 1.809999942779541015625e+0);
t.f90:1:0: internal compiler error: verify_gimple failed
0xc37737 verify_gimple_in_cfg(function*, bool)
        ../../gcc/gcc/tree-cfg.c:5266
0xb14063 execute_function_todo
        ../../gcc/gcc/passes.c:1966
0xb151d3 execute_todo
        ../../gcc/gcc/passes.c:2016
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.

Reply via email to