On Thu, 3 Jul 2025, Icen Zeyada wrote:

> 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 | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/gcc/match.pd b/gcc/match.pd
> index f4416d9172c..36317b9128f 100644
> --- a/gcc/match.pd
> +++ b/gcc/match.pd
> @@ -5939,6 +5939,14 @@ 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)

Why are you restricting this to integer_minus_onep/zerop?  Is
the assumption that such vec_cond is "cheap", thus we also
do not need to add :s to them?

> +      (vec_cond @1 @2 @3))
> +   (vec_cond (lop @0 @1) @2 @3)))

So this turns a logical operation on the data type to a logical
operation on the predicate type.  You need to check this
operation is supported by the target with

   target_supports_op_p (TREE_TYPE (@0), lop, optab_vector)

I think the transform is sensible for arbitrary @2/@3 though
in that case with :s on the vec_conds.

Richard.

> +
>  /* (c ? a : b) op d  -->  c ? (a op d) : (b op d) */
>   (simplify
>    (op (vec_cond:s @0 @1 @2) @3)
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to