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
> > >

Reply via email to