aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2024-05-27 14:40:27 +0200
committerRichard Biener <rguenther@suse.de>2024-06-04 10:13:30 +0200
commit0592000aeed84d47040946a125154b3c46d7c84f (patch)
tree085a53072ecf14acafb3ee1d221ed97a81114247 /gcc
parent09ae36461ed34f343f2d8299bad7e394cccf996e (diff)
downloadgcc-0592000aeed84d47040946a125154b3c46d7c84f.zip
gcc-0592000aeed84d47040946a125154b3c46d7c84f.tar.gz
gcc-0592000aeed84d47040946a125154b3c46d7c84f.tar.bz2
Avoid inserting after a GIMPLE_COND with SLP and early break
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/tree-vect-slp.cc7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
index bf1f467..11ec820 100644
--- a/gcc/tree-vect-slp.cc
+++ b/gcc/tree-vect-slp.cc
@@ -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);
}
}