https://gcc.gnu.org/g:f6eb8291e1c538f946efcb79b1f597c251be63c4
commit r16-2133-gf6eb8291e1c538f946efcb79b1f597c251be63c4 Author: Icen Zeyada <icen.zeya...@arm.com> Date: Wed Jul 9 12:57:11 2025 +0100 tree-simplify: unify simple_comparison ops in vec_cond for bit and/or/xor [PR119196] Merge simple_comparison patterns under a single vec_cond_expr for bit_and, bit_ior, and bit_xor in the simplify pass. Ensure that when both operands of a bit_and, bit_or, or bit_xor 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. gcc/ChangeLog: PR tree-optimization/119196 * match.pd: Merge multiple vec_cond_expr in a single one for bit_and, bit_ior and bit_xor. Signed-off-by: Icen Zeyada <icen.zeya...@arm.com> Diff: --- gcc/match.pd | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gcc/match.pd b/gcc/match.pd index ec2f5603d9c0..99d218ea048a 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -5981,6 +5981,15 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) && !expand_vec_cond_expr_p (TREE_TYPE (@1), TREE_TYPE (@0))))) (vec_cond @0 (op! @1 @3) (op! @2 @4)))) +/* (@0 ? @2 : @3) lop (@1 ? @2 : @3) --> (@0 lop @1) ? @2 : @3. */ +(for lop (bit_and bit_ior bit_xor) + (simplify + (lop + (vec_cond @0 integer_minus_onep@2 integer_zerop@3) + (vec_cond @1 @2 @3)) + (if (target_supports_op_p (TREE_TYPE (@0), lop, optab_vector)) + (vec_cond (lop @0 @1) @2 @3)))) + /* (c ? a : b) op d --> c ? (a op d) : (b op d) */ (simplify (op (vec_cond:s @0 @1 @2) @3)