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)

Reply via email to