[Bug fortran/50564] [4.7 Regression] Front-end optimization - ICE with FORALL

burnus at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Sun Oct 9 16:01:00 GMT 2011


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50564

--- Comment #5 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-10-09 16:00:41 UTC ---
(In reply to comment #4)
> So, the best method is to disable front-end optimization within
> a forall loop.
> 
> I assume the same holds for DO CONCURRENT.

I think do concurrent is OK - here, the same as with a DO loop applies -- only
the user has to guarantee that the loop will yield the same result independent
of the execution order of the bounds.

However, I think the current FE optimization might have problems with
threadsafety. Assume:

!$OMP parallel do default(share)
do i = 1, 5
  A(i) = 5*cos(B(i))+8*cos(B(i))
end do

If one now transforms this into:

!$OMP parallel do default(share)
do i = 1, 5
  tmp = cos(B(i))
  A(i) = 5*tmp+8*tmp
end do

one has a problem as "tmp" is shared. Thus, one needs to make sure that all
inserted temporary variables are thread private (DECL_THREAD_LOCAL_P).



More information about the Gcc-bugs mailing list