On Tue, Sep 2, 2025 at 2:33 PM Andrew Pinski <[email protected]> wrote: > > On Tue, Sep 2, 2025 at 5:32 AM Richard Biener > <[email protected]> wrote: > > > > On Tue, Sep 2, 2025 at 6:29 AM Andrew Pinski > > <[email protected]> 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. > > Attached is the patch which adds the fix to strlen which I committed > and will be backporting in the next couple of days to GCC 15, 14 and > 13.
Pushed to the GCC 15 branch after a build/test. Thanks, Andrew > > Thanks, > Andrew > > > > > > 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 <[email protected]> > > > --- > > > 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 > > >
