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

Reply via email to