aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-ivcanon.cc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2023-12-05 08:50:57 +0100
committerRichard Biener <rguenther@suse.de>2023-12-05 14:12:12 +0100
commit8ff02df62935429d8956361cfdb897122492523d (patch)
tree62975ad33b29b7eb69e157a79d07642c9eea12b2 /gcc/tree-ssa-loop-ivcanon.cc
parente0786ca9a18c50ad08c40936b228e325193664b8 (diff)
downloadgcc-8ff02df62935429d8956361cfdb897122492523d.zip
gcc-8ff02df62935429d8956361cfdb897122492523d.tar.gz
gcc-8ff02df62935429d8956361cfdb897122492523d.tar.bz2
tree-optimization/112856 - fix LC SSA after loop header copying
When loop header copying unloops loops we have to possibly fixup LC SSA. I've take the opportunity to streamline the unloop_loops API, removing the use of a ivcanon local global variable. PR tree-optimization/109689 PR tree-optimization/112856 * cfgloopmanip.h (unloop_loops): Adjust API. * tree-ssa-loop-ivcanon.cc (unloop_loops): Take edges_to_remove as parameter. (canonicalize_induction_variables): Adjust. (tree_unroll_loops_completely): Likewise. * tree-ssa-loop-ch.cc (ch_base::copy_headers): Rewrite into LC SSA if we unlooped some loops and we are in LC SSA. * gcc.dg/torture/pr109689.c: New testcase. * gcc.dg/torture/pr112856.c: Likewise.
Diffstat (limited to 'gcc/tree-ssa-loop-ivcanon.cc')
-rw-r--r--gcc/tree-ssa-loop-ivcanon.cc8
1 files changed, 4 insertions, 4 deletions
diff --git a/gcc/tree-ssa-loop-ivcanon.cc b/gcc/tree-ssa-loop-ivcanon.cc
index 5856f76..67f2318 100644
--- a/gcc/tree-ssa-loop-ivcanon.cc
+++ b/gcc/tree-ssa-loop-ivcanon.cc
@@ -667,6 +667,7 @@ static bitmap peeled_loops;
void
unloop_loops (vec<class loop *> &loops_to_unloop,
vec<int> &loops_to_unloop_nunroll,
+ vec<edge> &edges_to_remove,
bitmap loop_closed_ssa_invalidated,
bool *irred_invalidated)
{
@@ -1361,7 +1362,7 @@ canonicalize_induction_variables (void)
}
gcc_assert (!need_ssa_update_p (cfun));
- unloop_loops (loops_to_unloop, loops_to_unloop_nunroll,
+ unloop_loops (loops_to_unloop, loops_to_unloop_nunroll, edges_to_remove,
loop_closed_ssa_invalidated, &irred_invalidated);
loops_to_unloop.release ();
loops_to_unloop_nunroll.release ();
@@ -1511,9 +1512,8 @@ tree_unroll_loops_completely (bool may_increase_size, bool unroll_outer)
{
unsigned i;
- unloop_loops (loops_to_unloop,
- loops_to_unloop_nunroll,
- loop_closed_ssa_invalidated,
+ unloop_loops (loops_to_unloop, loops_to_unloop_nunroll,
+ edges_to_remove, loop_closed_ssa_invalidated,
&irred_invalidated);
loops_to_unloop.release ();
loops_to_unloop_nunroll.release ();