From afac1bd33657a5054f5e6ea6746c25bbb70b82f2 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Mon, 15 Jan 2024 10:03:59 +0100 Subject: [PATCH] tree-optimization/113385 - wrong loop father with early exit vectorization 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. 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 1d6e5e045c38..c7e73f651559 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; -- GitLab