http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46194
--- Comment #16 from Sebastian Pop <spop at gcc dot gnu.org> 2011-04-19 16:24:44 UTC --- The patch produces these fails on the 4.5 branch: FAIL: gcc.dg/tree-ssa/ltrans-1.c scan-tree-dump-times ltrans "converted loop nest to perfect loop nest" 1 FAIL: gcc.dg/tree-ssa/ltrans-1.c scan-tree-dump-times ltrans "transformed loop" 1 FAIL: gfortran.dg/ltrans-7.f90 -O scan-tree-dump-times ltrans "transformed loop" 1 It looks like the change was needed to make the loop interchange possible on these examples. In 4.6, Graphite is taking care of the interchange cases and so we don't exercise the corner cases of the multivariate data dependence test. The patch removes this case: - /* The dependence is carried by the outermost loop. Example: - | loop_1 - | A[{4, +, 1}_1] - | loop_2 - | A[{5, +, 1}_2] - | endloop_2 - | endloop_1 - In this case, the dependence is carried by loop_1. */ because we use the information that the dependence is carried by the outermost loop to wrongly infer that the innermost loop does not carry dependences, leading to the parallelization of the innermost loop: + for (i = 0; i < N; i++) + for (j = 0; j < N; j++) + a[j] = a[i] + 1; +/* This loop cannot be parallelized due to a dependence. */