https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91003
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rsandifo at gcc dot gnu.org --- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> --- So this is another "boolean" case. In vect_get_constant_vectors we run into /* ??? SLP analysis should compute the vector type for the constant / invariant and store it in the SLP node. */ tree op = op_node->ops[0]; /* Check if vector type is a boolean vector. */ tree stmt_vectype = STMT_VINFO_VECTYPE (stmt_vinfo); if (VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (op)) && vect_mask_constant_operand_p (stmt_vinfo)) vector_type = truth_type_for (stmt_vectype); else vector_type = get_vectype_for_scalar_type (vinfo, TREE_TYPE (op), op_node); for h_18 = _129 ? 1 : 0; with unsigned boolean (kind==4) typed result/then/else values (SImode). IIRC I couldn't simply remove this and rely on get_vectype_for_scalar_type to do the right thing (TM) in general. Plus we don't have a stmt-info for the constant operands (but we do now have an SLP node for them). I hope Richards patches improve things here but I don't remember them touching this particular place.