https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111794
--- Comment #9 from Robin Dapp <rdapp at gcc dot gnu.org> ---
Yes, that's from pattern recog:
slp.c:11:20: note: === vect_pattern_recog ===
slp.c:11:20: note: vect_recog_mask_conversion_pattern: detected: _5 = _2 &
_4;
slp.c:11:20: note: mask_conversion pattern recognized: patt_157 = patt_156 &
_4;
slp.c:11:20: note: extra pattern stmt: patt_156 = (<signed-boolean:1>) _2;
slp.c:11:20: note: vect_recog_bool_pattern: detected: _6 = (int) _5;
slp.c:11:20: note: bool pattern recognized: patt_159 = (int) patt_158;
slp.c:11:20: note: extra pattern stmt: patt_158 = _5 ? 1 : 0;
slp.c:11:20: note: vect_recog_mask_conversion_pattern: detected: _11 = _8 &
_10;
slp.c:11:20: note: mask_conversion pattern recognized: patt_161 = patt_160 &
_10;
slp.c:11:20: note: extra pattern stmt: patt_160 = (<signed-boolean:1>) _8;
...
In vect_recog_mask_conversion_pattern we arrive at
if (TYPE_PRECISION (rhs1_type) < TYPE_PRECISION (rhs2_type))
{
vectype1 = get_mask_type_for_scalar_type (vinfo, rhs1_type);
if (!vectype1)
return NULL;
rhs2 = build_mask_conversion (vinfo, rhs2, vectype1, stmt_vinfo);
}
else
{
vectype1 = get_mask_type_for_scalar_type (vinfo, rhs2_type);
if (!vectype1)
return NULL;
rhs1 = build_mask_conversion (vinfo, rhs1, vectype1, stmt_vinfo);
}
lhs = vect_recog_temp_ssa_var (TREE_TYPE (lhs), NULL);
pattern_stmt = gimple_build_assign (lhs, rhs_code, rhs1, rhs2);
vectype1 is then e.g. vector([8,8]) <signed-boolean:1>. Then
vect_recog_bool_pattern creates the COND_EXPR.
Testsuites are running with your proposed change.