summaryrefslogtreecommitdiff
path: root/gcc/tree-loop-distribution.c
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2016-07-15 13:05:56 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2016-07-15 13:05:56 +0000
commit2084e279433746f813e40968d5e3139645899c53 (patch)
tree63f8b69a265fbe07bef4e9bf4304157f191a30df /gcc/tree-loop-distribution.c
parent2177bb9aee2875646f5f9abbb099811ecd357431 (diff)
downloadgcc-2084e279433746f813e40968d5e3139645899c53.tar.gz
2016-07-15 Richard Biener <rguenther@suse.de>
PR tree-optimization/71881 * tree-loop-distribution.c (destroy_loop): Remove blocks in reverse DOM order to make debug temp generation happy. * gcc.dg/torture/pr71881.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@238374 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-loop-distribution.c')
-rw-r--r--gcc/tree-loop-distribution.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c
index 9bca56a9b6f..181e4e9ed7d 100644
--- a/gcc/tree-loop-distribution.c
+++ b/gcc/tree-loop-distribution.c
@@ -888,13 +888,15 @@ destroy_loop (struct loop *loop)
cancel_loop_tree (loop);
rescan_loop_exit (exit, false, true);
- for (i = 0; i < nbbs; i++)
+ i = nbbs;
+ do
{
/* We have made sure to not leave any dangling uses of SSA
names defined in the loop. With the exception of virtuals.
Make sure we replace all uses of virtual defs that will remain
outside of the loop with the bare symbol as delete_basic_block
will release them. */
+ --i;
for (gphi_iterator gsi = gsi_start_phis (bbs[i]); !gsi_end_p (gsi);
gsi_next (&gsi))
{
@@ -912,6 +914,8 @@ destroy_loop (struct loop *loop)
}
delete_basic_block (bbs[i]);
}
+ while (i != 0);
+
free (bbs);
set_immediate_dominator (CDI_DOMINATORS, dest,