When compiled using IPA optimization (-fastsse -Mipa=fast,pure -O2), the following code:
if (iter2 /= 0) then ! Do some initializations [... Omitted ...] main_iteration: do iter=iter1,iter2 ! [... Omitted ...] if (iter <= 1) then ! Do some initializations [... Omitted ...] else ! (iter > 1) select case (imass) case (2) ! Axially distributed ! Evaluate the rate of density change: forall (i = 1:ncie, j = 1:neta) ! Line 427 rhodot(i,j) = dxm_dz_new(i)*dz_dvol(i) end forall end select end if ! Body of main loop [... Omitted ...] end do main_iteration end if
causes an internal compiler error (edited here for length):
IPA: Recompiling intgrt.obj: new IPA information
PGF90-F-0000-Internal compiler error. rewrite_subroutine:
unknown stmt found 0 (intgrt.f90: 427)
PGF90/any Linux/x86-64 6.1-3: compilation aborted
If the forall construct in the above code fragment is replaced by the following:
! Evaluate the rate of density change: do j = 1,neta rhodot(1:ncie,j) = & dxm_dz_new(1:ncie)*dz_dvol(1:ncie) end do
then the program compiles with no errors.
There are many forall constructs in the program, scattered over a number of routines, but the one indicated above is the only one that caused any difficulty in the IPA optimization stage.