[Bug tree-optimization/104595] unvectorized loop due to bool condition loaded from memory

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Feb 21 13:45:02 GMT 2022


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104595

--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
bool patterns are to distinguish flag uses from data uses since a vectorized
flag true will be -1 while the unvectorized flag is 1 but of course any
data uses have to be retained.  What we are missing here is the reverse,
convert unvectorized flag 1 to vectorized flag -1 for data.  Since there
may be data and non-data uses we have to insert fixups (patterns) at use
sites.  For the bool vs. char case that's the

  iftmp.0_3 = _1 ? iftmp.0_7 : iftmp.0_6;

case.  Since we generally assume a bool LHS will be vectorized to a mask
we don't do our job here since obviously bool loads do not.  Conversions
do not either and the code to handle those is a bit awkward as well,
handling bool source and bool destination differently for some reason
(but not both at the same time?).

This all needs a bit of dis-entangling and probably re-ordering of
vect_recog_bool_pattern and vect_recog_mask_conversion_pattern.


More information about the Gcc-bugs mailing list