diff options
author | Richard Biener <rguenther@suse.de> | 2024-05-27 14:40:27 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2024-06-04 10:13:30 +0200 |
commit | 0592000aeed84d47040946a125154b3c46d7c84f (patch) | |
tree | 085a53072ecf14acafb3ee1d221ed97a81114247 /gcc | |
parent | 09ae36461ed34f343f2d8299bad7e394cccf996e (diff) | |
download | gcc-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.cc | 7 |
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); } } |