On Mon, 13 Oct 2025, Avinash Jayakar wrote:

> Hi, 
> 
> As stated in patch for PR104116, 2 issues were found for unsigned division by
> power of 2. The {ROUND,CEIL}_DIV_EXPR should not use the canonicalization
> pattern, since their semantics are different. 
> The tests in patch for PR104116 already cover this scenario which currently
> fail, therefore I have not added any tests in this patch. 
> 
> Bootstrapped and regtested on ppc64le and x86_64. Ok for master?

OK for trunk and affected branches.

Thanks,
Richard.

> Thanks and regards,
> Avinash Jayakar
> 
> Canonicalization of unsigned division by power of 2 only applies to
> {TRUNC,FLOOR,EXACT}_DIV, therefore remove the same pattern for
> {CEIL,ROUND}_DIV, which was added in a previous commit. 
> 
> 2025-10-13  Avinash Jayakar  <[email protected]>
> 
> gcc/ChangeLog:
>       PR tree-optimization/122213
>       * match.pd: Canonicalize unsigned pow2 div only for trunk, floor and
>       exact div.
> 
> ---
>  gcc/match.pd | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/gcc/match.pd b/gcc/match.pd
> index 4d0a803eaef..41ec9da8aaa 100644
> --- a/gcc/match.pd
> +++ b/gcc/match.pd
> @@ -981,16 +981,18 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
>   (if (INTEGRAL_TYPE_P (TREE_TYPE (@0)) && TYPE_UNSIGNED (TREE_TYPE (@0)))
>    (bit_and @0 (negate @1))))
>  
> -(for div (trunc_div ceil_div floor_div round_div exact_div)
> +/* Canonicalize unsigned t / 4 to t >> 2.  */
>  #if GIMPLE
> - /* Canonicalize unsigned t / 4 to t >> 2.  */
> +(for div (trunc_div floor_div exact_div)
>   (simplify
>    (div @0 integer_pow2p@1)
>    (if (INTEGRAL_TYPE_P (type)
>         && (TYPE_UNSIGNED (type) || tree_expr_nonnegative_p (@0)))
>     (rshift @0 { build_int_cst (integer_type_node,
> -                            wi::exact_log2 (wi::to_wide (@1))); })))
> +                            wi::exact_log2 (wi::to_wide (@1))); }))))
>  #endif
> +
> +(for div (trunc_div ceil_div floor_div round_div exact_div)
>   /* Simplify (t * u) / u -> t.  */
>   (simplify
>    (div (mult:c @0 @1) @1)
> 

-- 
Richard Biener <[email protected]>
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