]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Avoid inserting after a GIMPLE_COND with SLP and early break
authorRichard Biener <rguenther@suse.de>
Mon, 27 May 2024 12:40:27 +0000 (14:40 +0200)
committerRichard Biener <rguenther@suse.de>
Tue, 4 Jun 2024 08:13:30 +0000 (10:13 +0200)
When vectorizing an early break loop with LENs (do we miss some
check here to disallow this?) we can end up deciding to insert
stmts after a GIMPLE_COND when doing SLP scheduling and trying
to be conservative with placing of stmts only dependent on
the implicit loop mask/len.  The following avoids this, I guess
it's not perfect but it does the job fixing some observed
RISC-V regression.

* tree-vect-slp.cc (vect_schedule_slp_node): For mask/len
loops make sure to not advance the insertion iterator
beyond a GIMPLE_COND.

gcc/tree-vect-slp.cc

index bf1f467f53fe18f938d1b84ac537d418671f8a6f..11ec82086fca5cbb697de2b20b1c83060c86285e 100644 (file)
@@ -9650,7 +9650,12 @@ vect_schedule_slp_node (vec_info *vinfo,
       else
        {
          si = gsi_for_stmt (last_stmt);
-         gsi_next (&si);
+         /* When we're getting gsi_after_labels from the starting
+            condition of a fully masked/len loop avoid insertion
+            after a GIMPLE_COND that can appear as the only header
+            stmt with early break vectorization.  */
+         if (gimple_code (last_stmt) != GIMPLE_COND)
+           gsi_next (&si);
        }
     }