This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/46194] [4.5 Regression] gcc.dg/graphite/block-0.c FAILs with -ftree-parallelize-loops
- From: "spop at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 19 Apr 2011 16:25:52 +0000
- Subject: [Bug tree-optimization/46194] [4.5 Regression] gcc.dg/graphite/block-0.c FAILs with -ftree-parallelize-loops
- Auto-submitted: auto-generated
- References: <bug-46194-4@http.gcc.gnu.org/bugzilla/>
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. */