diff options
author | Richard Biener <rguenther@suse.de> | 2013-11-05 15:08:43 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2013-11-05 15:08:43 +0000 |
commit | d8f4f4db4b6ff7e9ee02ca396093af282318ec9c (patch) | |
tree | 7ee6a6073d73836d3498a34009dbca85bc6964cd /gcc | |
parent | 186bc2870333e62468be357ddabd8a4f17f96cdf (diff) | |
download | gcc-d8f4f4db4b6ff7e9ee02ca396093af282318ec9c.zip gcc-d8f4f4db4b6ff7e9ee02ca396093af282318ec9c.tar.gz gcc-d8f4f4db4b6ff7e9ee02ca396093af282318ec9c.tar.bz2 |
re PR tree-optimization/58955 (wrong code at -O3 on x86_64-linux-gnu)
2013-11-05 Richard Biener <rguenther@suse.de>
PR tree-optimization/58955
* tree-loop-distribution.c (pg_add_dependence_edges): Fix
edge direction.
* gcc.dg/torture/pr58955-1.c: New testcase.
* gcc.dg/torture/pr58955-2.c: Likewise.
From-SVN: r204398
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr58955-1.c | 20 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr58955-2.c | 18 | ||||
-rw-r--r-- | gcc/tree-loop-distribution.c | 2 |
5 files changed, 51 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 938d62b..ce16f50 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-11-05 Richard Biener <rguenther@suse.de> + + PR tree-optimization/58955 + * tree-loop-distribution.c (pg_add_dependence_edges): Fix + edge direction. + 2013-11-05 Bill Schmidt <wschmidt@linux.vnet.ibm.com> * config/rs6000/vector.md (vec_pack_sfix_trunc_v2df): Adjust for diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 21864c6..07e418d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2013-11-05 Richard Biener <rguenther@suse.de> + + PR tree-optimization/58955 + * gcc.dg/torture/pr58955-1.c: New testcase. + * gcc.dg/torture/pr58955-2.c: Likewise. + 2013-11-05 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/58981 diff --git a/gcc/testsuite/gcc.dg/torture/pr58955-1.c b/gcc/testsuite/gcc.dg/torture/pr58955-1.c new file mode 100644 index 0000000..a79f42f --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr58955-1.c @@ -0,0 +1,20 @@ +/* { dg-do run } */ + +extern void abort (void); + +int a, b, c, d[4] = { 0, 0, 0, 1 }; + +int +main () +{ + for (; a < 4; a++) + { + int e = d[a]; + for (c = 1; c < 1; c++); + b = e; + d[a] = 0; + } + if (b != 1) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr58955-2.c b/gcc/testsuite/gcc.dg/torture/pr58955-2.c new file mode 100644 index 0000000..a43860e --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr58955-2.c @@ -0,0 +1,18 @@ +/* { dg-do run } */ + +extern void abort (void); + +int a, b[10]; + +int +main () +{ + for (; a < 2; a++) + { + b[a] = 1; + b[a + 1] = 0; + } + if (b[1] != 1) + abort (); + return 0; +} diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c index 79884bf..4f9b848 100644 --- a/gcc/tree-loop-distribution.c +++ b/gcc/tree-loop-distribution.c @@ -1324,7 +1324,7 @@ pg_add_dependence_edges (struct graph *rdg, vec<loop_p> loops, int dir, for (int ii = 0; drs1.iterate (ii, &dr1); ++ii) for (int jj = 0; drs2.iterate (jj, &dr2); ++jj) { - int this_dir = 1; + int this_dir = -1; ddr_p ddr; /* Re-shuffle data-refs to be in dominator order. */ if (rdg_vertex_for_stmt (rdg, DR_STMT (dr1)) |