We have to clear the visited flag on stmts. Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed.
* tree-vect-slp.cc (vect_slp_region): Also clear visited flag when we skipped an instance due to -fdbg-cnt. --- gcc/tree-vect-slp.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 80e279d8f50..33c4d1308f6 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -7652,6 +7652,7 @@ vect_slp_region (vec<basic_block> bbs, vec<data_reference_p> datarefs, bb_vinfo->shared->check_datarefs (); + bool force_clear = false; auto_vec<slp_instance> profitable_subgraphs; for (slp_instance instance : BB_VINFO_SLP_INSTANCES (bb_vinfo)) { @@ -7674,15 +7675,17 @@ vect_slp_region (vec<basic_block> bbs, vec<data_reference_p> datarefs, vect_location = saved_vect_location; if (!dbg_cnt (vect_slp)) - continue; + { + force_clear = true; + continue; + } profitable_subgraphs.safe_push (instance); } /* When we're vectorizing an if-converted loop body make sure we vectorized all if-converted code. */ - if (!profitable_subgraphs.is_empty () - && orig_loop) + if ((!profitable_subgraphs.is_empty () || force_clear) && orig_loop) { gcc_assert (bb_vinfo->bbs.length () == 1); for (gimple_stmt_iterator gsi = gsi_start_bb (bb_vinfo->bbs[0]); -- 2.35.3