From: Richard Biener Date: Fri, 21 Jan 2022 12:29:06 +0000 (+0100) Subject: tree-optimization/100089 - BB vectorization of if-converted loop bodies X-Git-Tag: basepoints/gcc-13~1518 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=199cd0e0f8744ca1e61a95987b2d020a592a46d9;p=thirdparty%2Fgcc.git 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 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. --- diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 5ffb63689f26..926106c4ecd8 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -5906,9 +5906,8 @@ vect_slp_region (vec bbs, vec 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 bbs, vec 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 (gsi_stmt (gsi)))