On Tue, 3 Sep 2024, Tamar Christina wrote: > Hi All, > > When vectorizing a conditional operation we rely on the bool_recog pattern to > hit and convert the bool of the operand to a valid mask. > > However we are currently not using the converted operand as this is in a > pattern > statement. This change updates it to look at the actual statement to be > vectorized so we pick up the pattern. > > Note that there are no tests here since vectorization will fail until we > correctly lower all boolean conditionals early. > > Tests for these are in the next patch, namely vect-conditional_store_5.c and > vect-conditional_store_6.c. And the existing vect-conditional_store_[1-4].c > checks that the other cases are still handled correctly. > > Bootstrapped Regtested on aarch64-none-linux-gnu, arm-none-linux-gnueabihf, > x86_64-pc-linux-gnu -m32, -m64 and no issues. > > Ok for master?
OK. > Thanks, > Tamar > > gcc/ChangeLog: > > * tree-vect-patterns.cc (vect_recog_cond_store_pattern): Use pattern > statement. > > --- > diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc > index > f52de2b6972dc0b8f63f812b64c60e9414962743..4b112910df357e9f2783f7173b71812085126389 > 100644 > --- a/gcc/tree-vect-patterns.cc > +++ b/gcc/tree-vect-patterns.cc > @@ -6601,7 +6601,15 @@ vect_recog_cond_store_pattern (vec_info *vinfo, > if (TREE_CODE (st_rhs) != SSA_NAME) > return NULL; > > - gassign *cond_stmt = dyn_cast<gassign *> (SSA_NAME_DEF_STMT (st_rhs)); > + auto cond_vinfo = vinfo->lookup_def (st_rhs); > + > + /* If the condition isn't part of the loop then bool recog wouldn't have > seen > + it and so this transformation may not be valid. */ > + if (!cond_vinfo) > + return NULL; > + > + cond_vinfo = vect_stmt_to_vectorize (cond_vinfo); > + gassign *cond_stmt = dyn_cast<gassign *> (STMT_VINFO_STMT (cond_vinfo)); > if (!cond_stmt || gimple_assign_rhs_code (cond_stmt) != COND_EXPR) > return NULL; > > > > > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)