On Tue, Sep 2, 2025 at 6:29 AM Andrew Pinski
<andrew.pin...@oss.qualcomm.com> wrote:
>
> I noticed that when looking into g++.dg/tree-ssa/vector-compare-1.C
> failure on arm, the wrong alignment was being used for the load.
> There needs to be an unaligned type here to get the correct alignment.
>
> NOTE this means the code in strlen is also wrong but that is on its way
> out so I am not sure if we should update it or not to backport to the
> release branches; there could be wrong code happening too.

Please.

> Bootstrapped and tested on x86_64-linux-gnu.

OK.

Thanks,
Richard.

> gcc/ChangeLog:
>
>         * tree-ssa-forwprop.cc (simplify_builtin_memcmp): Create
>         unaligned types if the alignment of the pointers is less
>         than the alignment of the new type.
>
> Signed-off-by: Andrew Pinski <andrew.pin...@oss.qualcomm.com>
> ---
>  gcc/tree-ssa-forwprop.cc | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc
> index 9ce04d24122..d356770261a 100644
> --- a/gcc/tree-ssa-forwprop.cc
> +++ b/gcc/tree-ssa-forwprop.cc
> @@ -1642,8 +1642,16 @@ simplify_builtin_memcmp (gimple_stmt_iterator *gsi_p, 
> gcall *stmt)
>           tree ptrtype = build_pointer_type_for_mode (char_type_node,
>                                                       ptr_mode, true);
>           off = build_int_cst (ptrtype, 0);
> -         arg1 = build2_loc (loc, MEM_REF, type, arg1, off);
> -         arg2 = build2_loc (loc, MEM_REF, type, arg2, off);
> +
> +         /* Create unaligned types if needed. */
> +         tree type1 = type, type2 = type;
> +         if (TYPE_ALIGN (type1) > align1)
> +           type1 = build_aligned_type (type1, align1);
> +         if (TYPE_ALIGN (type2) > align2)
> +           type2 = build_aligned_type (type2, align2);
> +
> +         arg1 = build2_loc (loc, MEM_REF, type1, arg1, off);
> +         arg2 = build2_loc (loc, MEM_REF, type2, arg2, off);
>           tree tem1 = fold_const_aggregate_ref (arg1);
>           if (tem1)
>             arg1 = tem1;
> --
> 2.43.0
>

Reply via email to