* [PATCH] Avoid update_ssa quadraticness in loop splitting
@ 2021-05-06 11:53 Richard Biener
0 siblings, 0 replies; only message in thread
From: Richard Biener @ 2021-05-06 11:53 UTC (permalink / raw)
To: gcc-patches
We already take care to not apply loop splitting to IL produced
by splitting so we should be able to delay updating SSA and
loop-closed SSA that was left broken after loop versioning
until after we processed all opportunities.
Bootstrapped and tested on x86_64-unknown-linux-gnu, I've also
built SPEC CPU 2017 with and without LTO for extra verification
and added a -fopt-info-loop message to one path where it was missing
to verify we are actually splitting loops in SPEC (we do).
Pushed.
2021-05-06 Richard Biener <rguenther@suse.de>
* tree-ssa-loop-split.c (split_loop): Delay updating SSA form.
Output an opt-info message.
(do_split_loop_on_cond): Likewise.
(tree_ssa_split_loops): Update SSA form here.
---
gcc/tree-ssa-loop-split.c | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/gcc/tree-ssa-loop-split.c b/gcc/tree-ssa-loop-split.c
index b80b6a75e62..3a09bbc39e5 100644
--- a/gcc/tree-ssa-loop-split.c
+++ b/gcc/tree-ssa-loop-split.c
@@ -589,7 +589,6 @@ split_loop (class loop *loop1)
profile_probability::always (),
true);
gcc_assert (loop2);
- update_ssa (TODO_update_ssa);
edge new_e = connect_loops (loop1, loop2);
connect_loop_phis (loop1, loop2, new_e);
@@ -621,14 +620,13 @@ split_loop (class loop *loop1)
free_original_copy_tables ();
- /* We destroyed LCSSA form above. Eventually we might be able
- to fix it on the fly, for now simply punt and use the helper. */
- rewrite_into_loop_closed_ssa_1 (NULL, 0, SSA_OP_USE, loop1);
-
changed = true;
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, ";; Loop split.\n");
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, guard_stmt, "loop split\n");
+
/* Only deal with the first opportunity. */
break;
}
@@ -1532,8 +1530,6 @@ do_split_loop_on_cond (struct loop *loop1, edge invar_branch)
to_loop1->flags |= true_invar ? EDGE_FALSE_VALUE : EDGE_TRUE_VALUE;
to_loop2->flags |= true_invar ? EDGE_TRUE_VALUE : EDGE_FALSE_VALUE;
- update_ssa (TODO_update_ssa);
-
/* Due to introduction of a control flow edge from loop1 latch to loop2
pre-header, we should update PHIs in loop2 to reflect this connection
between loop1 and loop2. */
@@ -1541,8 +1537,6 @@ do_split_loop_on_cond (struct loop *loop1, edge invar_branch)
free_original_copy_tables ();
- rewrite_into_loop_closed_ssa_1 (NULL, 0, SSA_OP_USE, loop1);
-
return true;
}
@@ -1644,7 +1638,10 @@ tree_ssa_split_loops (void)
free_dominance_info (CDI_POST_DOMINATORS);
if (changed)
- return TODO_cleanup_cfg;
+ {
+ rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa);
+ return TODO_cleanup_cfg;
+ }
return 0;
}
--
2.26.2
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-05-06 11:53 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-06 11:53 [PATCH] Avoid update_ssa quadraticness in loop splitting Richard Biener
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).