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.

PR tree-optimization/119196

gcc/ChangeLog:

        * 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>
---
 gcc/match.pd | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/gcc/match.pd b/gcc/match.pd
index 27f662f9714b..611f05ef9f9c 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -6524,6 +6524,15 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
                { build_int_cst (integer_type_node, prec - 1);}))))))
 #endif
 
+
+(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 (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

Reply via email to