summaryrefslogtreecommitdiff
path: root/gcc/cfgloopmanip.c
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/cfgloopmanip.c
parent849107c128378779f133c435d3f76d45b599361b (diff)
downloadgcc-467a3558efb2d9ac55f643ad41d82c70477ea1de.tar.gz
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/cfgloopmanip.c')
-rw-r--r--gcc/cfgloopmanip.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c
index f35e5aedc79..cce5d467f57 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)