diff mbox series

tree-optimization/113385 - wrong loop father with early exit vectorization

Message ID 20240115113218.607E63857BA3@sourceware.org
State New
Headers show
Series tree-optimization/113385 - wrong loop father with early exit vectorization | expand

Commit Message

Richard Biener Jan. 15, 2024, 11:26 a.m. UTC
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 mbox series

Patch

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;