+2020-04-28 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR tree-optimization/94727
+ * tree-vect-stmts.c (vect_is_simple_cond): If both comparison
+ operands are invariant booleans, use the mask type associated with the
+ STMT_VINFO_VECTYPE. Use !slp_node instead of !vectype to exclude SLP.
+ (vectorizable_condition): Pass vectype unconditionally to
+ vect_is_simple_cond.
+
2020-04-27 Jakub Jelinek <jakub@redhat.com>
PR target/94780
if (! *comp_vectype)
{
tree scalar_type = TREE_TYPE (lhs);
- /* If we can widen the comparison to match vectype do so. */
- if (INTEGRAL_TYPE_P (scalar_type)
- && vectype
- && tree_int_cst_lt (TYPE_SIZE (scalar_type),
- TYPE_SIZE (TREE_TYPE (vectype))))
- scalar_type = build_nonstandard_integer_type
- (tree_to_uhwi (TYPE_SIZE (TREE_TYPE (vectype))),
- TYPE_UNSIGNED (scalar_type));
- *comp_vectype = get_vectype_for_scalar_type (vinfo, scalar_type,
- slp_node);
+ if (VECT_SCALAR_BOOLEAN_TYPE_P (scalar_type))
+ *comp_vectype = truth_type_for (vectype);
+ else
+ {
+ /* If we can widen the comparison to match vectype do so. */
+ if (INTEGRAL_TYPE_P (scalar_type)
+ && !slp_node
+ && tree_int_cst_lt (TYPE_SIZE (scalar_type),
+ TYPE_SIZE (TREE_TYPE (vectype))))
+ scalar_type = build_nonstandard_integer_type
+ (tree_to_uhwi (TYPE_SIZE (TREE_TYPE (vectype))),
+ TYPE_UNSIGNED (scalar_type));
+ *comp_vectype = get_vectype_for_scalar_type (vinfo, scalar_type,
+ slp_node);
+ }
}
return true;
else_clause = gimple_assign_rhs3 (stmt);
if (!vect_is_simple_cond (cond_expr, stmt_info->vinfo, slp_node,
- &comp_vectype, &dts[0], slp_node ? NULL : vectype)
+ &comp_vectype, &dts[0], vectype)
|| !comp_vectype)
return false;