diff options
author | Richard Biener <rguenther@suse.de> | 2020-08-25 10:59:24 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2020-08-25 14:11:49 +0200 |
commit | 660b5c10dc04988b02a2c3f6baed013340af3ef8 (patch) | |
tree | 87ad77984f83a57eefbe2972c05f3f65932bc719 /gcc/tree-ssa-loop-im.c | |
parent | a5b15fcb954ba63d58f0daa700281aba33b5f24a (diff) | |
download | gcc-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.c | 4 |
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])); |