diff options
author | Richard Biener <rguenther@suse.de> | 2022-01-21 13:29:06 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-01-21 14:23:07 +0100 |
commit | 199cd0e0f8744ca1e61a95987b2d020a592a46d9 (patch) | |
tree | b06960797e39b8d674a77c2e6dc6fe616cd14d26 /gcc | |
parent | 7d47aae7cd4bb4dbf1e59a52c2a3f127151c8fab (diff) | |
download | gcc-199cd0e0f8744ca1e61a95987b2d020a592a46d9.zip gcc-199cd0e0f8744ca1e61a95987b2d020a592a46d9.tar.gz gcc-199cd0e0f8744ca1e61a95987b2d020a592a46d9.tar.bz2 |
tree-optimization/100089 - BB vectorization of if-converted loop bodies
The PR complains that when we only partially BB vectorize an
if-converted loop body that this can leave unvectorized code
unconditionally executed and thus effectively slow down code.
For -O2 we already mitigated the issue by not doing BB vectorization
when not all if-converted stmts were covered but the issue is
present with -O3 as well. Thus the following simply extends the
fix to cover all but the unlimited cost models. It is after all
very likely that we vectorize some stmts, if only a single
paired store.
2022-01-21 Richard Biener <rguenther@suse.de>
PR tree-optimization/100089
* tree-vect-slp.cc (vect_slp_region): Reject BB vectorization
of if-converted loops with unvectorized COND_EXPRs for
all but the unlimited cost models.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/tree-vect-slp.cc | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 5ffb636..926106c 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -5906,9 +5906,8 @@ vect_slp_region (vec<basic_block> bbs, vec<data_reference_p> datarefs, profitable_subgraphs.safe_push (instance); } - /* When we're vectorizing an if-converted loop body with the - very-cheap cost model make sure we vectorized all if-converted - code. */ + /* When we're vectorizing an if-converted loop body make sure + we vectorized all if-converted code. */ if (!profitable_subgraphs.is_empty () && orig_loop) { @@ -5924,7 +5923,7 @@ vect_slp_region (vec<basic_block> bbs, vec<data_reference_p> datarefs, gimple_set_visited (gsi_stmt (gsi), false); continue; } - if (flag_vect_cost_model != VECT_COST_MODEL_VERY_CHEAP) + if (flag_vect_cost_model == VECT_COST_MODEL_UNLIMITED) continue; if (gassign *ass = dyn_cast <gassign *> (gsi_stmt (gsi))) |