The following avoids splitting an edge before redirecting it. This
allows the loop father of the new block to be correct in the first
place.
Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed.
PR tree-optimization/113385
* tree-vect-loop-manip.cc (slpeel_tree_duplicate_loop_to_edge_cfg):
First redirect, then split the exit edge.
---
gcc/tree-vect-loop-manip.cc | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc
index 1d6e5e045c3..c7e73f65155 100644
--- a/gcc/tree-vect-loop-manip.cc
+++ b/gcc/tree-vect-loop-manip.cc
@@ -1613,11 +1613,11 @@ slpeel_tree_duplicate_loop_to_edge_cfg (class loop
*loop, edge loop_exit,
{
if (!alt_loop_exit_block)
{
- alt_loop_exit_block = split_edge (exit);
edge res = redirect_edge_and_branch (
- single_succ_edge (alt_loop_exit_block),
+ exit,
new_preheader);
flush_pending_stmts (res);
+ alt_loop_exit_block = split_edge (res);
continue;
}
dest = alt_loop_exit_block;
--
2.35.3