On Mon, Aug 24, 2026 at 6:42 AM Richard Biener <[email protected]> wrote:
>
> The following revises the earlier fix which was avoiding
> build_fold_addr_expr_with_type.  Instead the following applies
> the GENERIC simplification that this function should have done
> to the pattern directly, canonicalizing (T *)(ptr - ptr_cst)
> to (T *)ptr p+ cst.  The pattern was originally added with
> r10-7127-gcb99630f254aae.
>
> Bootstrap and regtest running on x86_64-unknown-linux-gnu.
>
> OK?

Ok; gimple-fold will change &MEM_REF[ssa_name + CST] that into PtrPlus
since r12-5465-g911b633803dcbb so this change should reduce how much
work is done in some cases.

Thanks,
Andrea

>
>         PR tree-optimization/127000
>         * match.pd ((T *)(ptr - ptr_cst)): Canonicalize directly
>         to (T *)ptr p+ cst.
> ---
>  gcc/match.pd | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/gcc/match.pd b/gcc/match.pd
> index 1cd35ef2e2d..b886eedc567 100644
> --- a/gcc/match.pd
> +++ b/gcc/match.pd
> @@ -3561,14 +3561,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
>     (if (ptr_difference_const (@0, @1, &diff))
>      (minus { build_int_cst_type (type, diff); } (convert @2)))))
>
> -/* Canonicalize (T *)(ptr - ptr-cst) to &MEM[ptr + -ptr-cst].  */
> +/* Canonicalize (T *)(ptr - ptr-cst) to (T *)ptr + -ptr-cst.  */
>  (simplify
>   (convert (pointer_diff @0 INTEGER_CST@1))
>   (if (POINTER_TYPE_P (type))
> -  { build1 (ADDR_EXPR, type,
> -           build2 (MEM_REF, char_type_node, @0,
> -                   wide_int_to_tree (ptr_type_node,
> -                                     wi::neg (wi::to_wide (@1))))); }))
> +  (pointer_plus
> +   (convert @0) { wide_int_to_tree (sizetype,
> +                                   wi::neg (wi::to_wide (@1))); })))
>
>  /* If arg0 is derived from the address of an object or function, we may
>     be able to fold this expression using the object or function's
> --
> 2.51.0

Reply via email to