aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-im.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2020-08-25 10:59:24 +0200
committerRichard Biener <rguenther@suse.de>2020-08-25 14:11:49 +0200
commit660b5c10dc04988b02a2c3f6baed013340af3ef8 (patch)
tree87ad77984f83a57eefbe2972c05f3f65932bc719 /gcc/tree-ssa-loop-im.c
parenta5b15fcb954ba63d58f0daa700281aba33b5f24a (diff)
downloadgcc-660b5c10dc04988b02a2c3f6baed013340af3ef8.zip
gcc-660b5c10dc04988b02a2c3f6baed013340af3ef8.tar.gz
gcc-660b5c10dc04988b02a2c3f6baed013340af3ef8.tar.bz2
tree-optimization/96548 - fix failure to recompute RPO after CFG change
This recomputes RPO after store-motion changes the CFG. 2020-08-25 Richard Biener <rguenther@suse.de> PR tree-optimization/96548 PR tree-optimization/96760 * tree-ssa-loop-im.c (tree_ssa_lim): Recompute RPO after store-motion. * gcc.dg/torture/pr96548.c: New testcase. * gcc.dg/torture/pr96760.c: Likewise.
Diffstat (limited to 'gcc/tree-ssa-loop-im.c')
-rw-r--r--gcc/tree-ssa-loop-im.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c
index 35da1fb..f87c287 100644
--- a/gcc/tree-ssa-loop-im.c
+++ b/gcc/tree-ssa-loop-im.c
@@ -3115,6 +3115,10 @@ tree_ssa_lim (function *fun)
out of the loops as well. */
do_store_motion ();
+ free (rpo);
+ rpo = XNEWVEC (int, last_basic_block_for_fn (fun));
+ n = pre_and_rev_post_order_compute_fn (fun, NULL, rpo, false);
+
/* Move the expressions that are expensive enough. */
for (int i = 0; i < n; ++i)
todo |= move_computations_worker (BASIC_BLOCK_FOR_FN (fun, rpo[i]));