aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-11-05 15:08:43 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-11-05 15:08:43 +0000
commitd8f4f4db4b6ff7e9ee02ca396093af282318ec9c (patch)
tree7ee6a6073d73836d3498a34009dbca85bc6964cd /gcc
parent186bc2870333e62468be357ddabd8a4f17f96cdf (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr58955-1.c20
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr58955-2.c18
-rw-r--r--gcc/tree-loop-distribution.c2
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))