aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-09-09 13:18:38 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-09-09 13:18:38 +0000
commit467a3558efb2d9ac55f643ad41d82c70477ea1de (patch)
treef64252be9ef1b4500b3be2868803c331e4506af8 /gcc
parent849107c128378779f133c435d3f76d45b599361b (diff)
downloadgcc-467a3558efb2d9ac55f643ad41d82c70477ea1de.zip
gcc-467a3558efb2d9ac55f643ad41d82c70477ea1de.tar.gz
gcc-467a3558efb2d9ac55f643ad41d82c70477ea1de.tar.bz2
re PR tree-optimization/58326 (ICE in check_loop_closed_ssa_use, at tree-ssa-loop-manip.c:551)
2013-09-09 Richard Biener <rguenther@suse.de> PR middle-end/58326 * cfgloopmanip.c (fix_bb_placements): When fixing the placement of a subloop record all its block as affecting loop-closed SSA form. * gcc.dg/torture/pr58326-1.c: New testcase. * gcc.dg/torture/pr58326-2.c: Likewise. From-SVN: r202399
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cfgloopmanip.c9
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr58326-1.c23
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr58326-2.c20
5 files changed, 63 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0eb112f..228fd1ba 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2013-09-09 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/58326
+ * cfgloopmanip.c (fix_bb_placements): When fixing the placement
+ of a subloop record all its block as affecting loop-closed SSA form.
+
2013-09-09 Richard Sandiford <rdsandiford@googlemail.com>
* expmed.c (lshift_value): Take an unsigned HOST_WIDE_INT instead
diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c
index f35e5ae..cce5d46 100644
--- a/gcc/cfgloopmanip.c
+++ b/gcc/cfgloopmanip.c
@@ -223,15 +223,22 @@ fix_bb_placements (basic_block from,
if (!fix_loop_placement (from->loop_father, irred_invalidated))
continue;
target_loop = loop_outer (from->loop_father);
+ if (loop_closed_ssa_invalidated)
+ {
+ basic_block *bbs = get_loop_body (from->loop_father);
+ for (unsigned i = 0; i < from->loop_father->num_nodes; ++i)
+ bitmap_set_bit (loop_closed_ssa_invalidated, bbs[i]->index);
+ free (bbs);
+ }
}
else
{
/* Ordinary basic block. */
if (!fix_bb_placement (from))
continue;
+ target_loop = from->loop_father;
if (loop_closed_ssa_invalidated)
bitmap_set_bit (loop_closed_ssa_invalidated, from->index);
- target_loop = from->loop_father;
}
FOR_EACH_EDGE (e, ei, from->succs)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9726eb6..3bb49d9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2013-09-09 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/58326
+ * gcc.dg/torture/pr58326-1.c: New testcase.
+ * gcc.dg/torture/pr58326-2.c: Likewise.
+
2013-09-09 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/57735
diff --git a/gcc/testsuite/gcc.dg/torture/pr58326-1.c b/gcc/testsuite/gcc.dg/torture/pr58326-1.c
new file mode 100644
index 0000000..3b46eed
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr58326-1.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+
+int a, *d;
+long b;
+short c;
+
+void foo ()
+{
+ int e;
+lbl:
+ for (c = 0; c < 2; c++)
+ {
+ if (1 >> b)
+ break;
+ e = *d;
+ for (; a; a++)
+ {
+ *d = e;
+ if (b)
+ goto lbl;
+ }
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr58326-2.c b/gcc/testsuite/gcc.dg/torture/pr58326-2.c
new file mode 100644
index 0000000..ddddbbe
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr58326-2.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+
+int a, b, c, d;
+
+void foo ()
+{
+ int e;
+
+lbl:
+ for (c = 0; c < 2; c++)
+ {
+ e = d;
+ for (; a; a++)
+ {
+ d = e;
+ if (b)
+ goto lbl;
+ }
+ }
+}