Merge simple_comparison patterns under a single vec_cond_expr for bit_and and bit_ior in the simplify pass.
Ensure that when both operands of a bit-and or bit-or are simple_comparison results, they reside within the same vec_cond_expr rather than separate ones. This prepares the AST so that subsequent transformations (e.g., folding the comparisons if possible) can take effect. PR tree-optimization/119196 gcc/ChangeLog: * match.pd: Merge multiple vec_cond_expr in a single one for bit_and and bit_ior. Signed-off-by: Icen Zeyada <icen.zeya...@arm.com> --- gcc/match.pd | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gcc/match.pd b/gcc/match.pd index 79485f9678a0..da60d6a22290 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -6524,6 +6524,16 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) { build_int_cst (integer_type_node, prec - 1);})))))) #endif +(for op1 (simple_comparison) + (for op2 (simple_comparison) + (for lop (bit_and bit_ior) + (simplify + (lop + (vec_cond @0 integer_minus_onep@2 integer_zerop@3) + (vec_cond @1 @2 @3)) + (if (expand_vec_cond_expr_p (type, TREE_TYPE (@0))) + (vec_cond (lop @0 @1) @2 @3)))))) + (for cnd (cond vec_cond) /* (a != b) ? (a - b) : 0 -> (a - b) */ (simplify -- 2.43.0