On Wed, 30 Sep 2020 at 16:03, Alex Coplan <alex.cop...@arm.com> wrote:
>
> Ping. Are these testsuite fixes for ILP32 OK?
>
LGTM, by looking at the patch (I didn't run it in ilp32 mode)

Thanks
Christophe


> On 18/09/2020 17:15, Alex Coplan wrote:
> > Hi Christophe,
> >
> > On 08/09/2020 10:14, Christophe Lyon wrote:
> > > On Mon, 17 Aug 2020 at 11:00, Alex Coplan <alex.cop...@arm.com> wrote:
> > > >
> > > > gcc/ChangeLog:
> > > >
> > > >         * config/aarch64/aarch64.md
> > > >         (*adds_<optab><ALLX:mode>_<GPI:mode>): Ensure extended operand
> > > >         agrees with width of extension specifier.
> > > >         (*subs_<optab><ALLX:mode>_<GPI:mode>): Likewise.
> > > >         (*adds_<optab><ALLX:mode>_shift_<GPI:mode>): Likewise.
> > > >         (*subs_<optab><ALLX:mode>_shift_<GPI:mode>): Likewise.
> > > >         (*add_<optab><ALLX:mode>_<GPI:mode>): Likewise.
> > > >         (*add_<optab><ALLX:mode>_shft_<GPI:mode>): Likewise.
> > > >         (*add_uxt<mode>_shift2): Likewise.
> > > >         (*sub_<optab><ALLX:mode>_<GPI:mode>): Likewise.
> > > >         (*sub_<optab><ALLX:mode>_shft_<GPI:mode>): Likewise.
> > > >         (*sub_uxt<mode>_shift2): Likewise.
> > > >         (*cmp_swp_<optab><ALLX:mode>_reg<GPI:mode>): Likewise.
> > > >         (*cmp_swp_<optab><ALLX:mode>_shft_<GPI:mode>): Likewise.
> > > >
> > > >
> > > > gcc/testsuite/ChangeLog:
> > > >
> > > >         * gcc.target/aarch64/adds3.c: Fix test w.r.t. new syntax.
> > > >         * gcc.target/aarch64/cmp.c: Likewise.
> > > >         * gcc.target/aarch64/subs3.c: Likewise.
> > > >         * gcc.target/aarch64/subsp.c: Likewise.
> > > >         * gcc.target/aarch64/extend-syntax.c: New test.
> > > >
> > >
> > > Hi,
> > >
> > > I've noticed some of the new tests fail with -mabi=ilp32:
> > >     gcc.target/aarch64/extend-syntax.c check-function-bodies add1
> > >     gcc.target/aarch64/extend-syntax.c check-function-bodies add3
> > >     gcc.target/aarch64/extend-syntax.c check-function-bodies sub2
> > >     gcc.target/aarch64/extend-syntax.c check-function-bodies sub3
> > >     gcc.target/aarch64/extend-syntax.c scan-assembler-times
> > > subs\tx[0-9]+, x[0-9]+, w[0-9]+, sxtw 3 1
> > >     gcc.target/aarch64/subsp.c scan-assembler sub\tsp, sp, w[0-9]*, sxtw 
> > > 4\n
> > >
> > > Christophe
> >
> > AFAICT the second scan-assembler in that subsp test failed on ILP32
> > before my commit. This is because we generate slightly suboptimal code
> > here. On LP64 with -O, we get:
> >
> > f2:
> >         stp     x29, x30, [sp, -16]!
> >         mov     x29, sp
> >         add     w1, w1, 1
> >         sub     sp, sp, x1, sxtw 4
> >         mov     x0, sp
> >         bl      foo
> >         mov     sp, x29
> >         ldp     x29, x30, [sp], 16
> >         ret
> >
> > On ILP32, we get:
> >
> > f2:
> >         stp     x29, x30, [sp, -16]!
> >         mov     x29, sp
> >         add     w1, w1, 1
> >         lsl     w1, w1, 4
> >         sub     sp, sp, x1
> >         mov     w0, wsp
> >         bl      foo
> >         mov     sp, x29
> >         ldp     x29, x30, [sp], 16
> >         ret
> >
> > And we see similar results all the way back to GCC 6. So AFAICT this
> > scan-assembler has never worked. The attached patch disables it on ILP32
> > since this isn't a code quality regression.
> >
> > This patch also fixes up the DejaGnu directives in extend-syntax.c to
> > work on ILP32: we change the check-function-bodies directive to only run
> > on LP64, adding scan-assembler directives for ILP32 where required.
> >
> > OK for trunk?
> >
> > Thanks,
> > Alex
>
> > diff --git a/gcc/testsuite/gcc.target/aarch64/extend-syntax.c 
> > b/gcc/testsuite/gcc.target/aarch64/extend-syntax.c
> > index 23fa9f4ffc5..1bfcdb59dde 100644
> > --- a/gcc/testsuite/gcc.target/aarch64/extend-syntax.c
> > +++ b/gcc/testsuite/gcc.target/aarch64/extend-syntax.c
> > @@ -20,6 +20,7 @@ unsigned long long *add1(unsigned long long *p, unsigned 
> > x)
> >  */
> >  unsigned long long add2(unsigned long long x, unsigned y)
> >  {
> > +  /* { dg-final { scan-assembler-times "add\tx0, x0, w1, uxtw" 1 { target 
> > ilp32 } } } */
> >    return x + y;
> >  }
> >
> > @@ -34,6 +35,9 @@ double *add3(double *p, int x)
> >    return p + x;
> >  }
> >
> > +// add1 and add3 should both generate this on ILP32:
> > +/* { dg-final { scan-assembler-times "add\tw0, w0, w1, lsl 3" 2 { target 
> > ilp32 } } } */
> > +
> >  // Hits *sub_zero_extendsi_di (*sub_<optab><ALLX:mode>_<GPI:mode>).
> >  /*
> >  ** sub1:
> > @@ -42,6 +46,7 @@ double *add3(double *p, int x)
> >  */
> >  unsigned long long sub1(unsigned long long x, unsigned n)
> >  {
> > +    /* { dg-final { scan-assembler-times "sub\tx0, x0, w1, uxtw" 1 { 
> > target ilp32 } } } */
> >      return x - n;
> >  }
> >
> > @@ -67,6 +72,9 @@ double *sub3(double *p, int n)
> >    return p - n;
> >  }
> >
> > +// sub2 and sub3 should both generate this on ILP32:
> > +/* { dg-final { scan-assembler-times "sub\tw0, w0, w1, lsl 3" 2 { target 
> > ilp32 } } } */
> > +
> >  // Hits *adds_zero_extendsi_di (*adds_<optab><ALLX:mode>_<GPI:mode>).
> >  int adds1(unsigned long long x, unsigned y)
> >  {
> > @@ -97,7 +105,8 @@ int subs1(unsigned long long x, unsigned y)
> >  unsigned long long *w;
> >  int subs2(unsigned long long *x, int y)
> >  {
> > -  /* { dg-final { scan-assembler-times "subs\tx\[0-9\]+, x\[0-9\]+, 
> > w\[0-9\]+, sxtw 3" 1 } } */
> > +  /* { dg-final { scan-assembler-times "subs\tx\[0-9\]+, x\[0-9\]+, 
> > w\[0-9\]+, sxtw 3" 1 { target lp64 } } } */
> > +  /* { dg-final { scan-assembler-times "subs\tw\[0-9\]+, w\[0-9\]+, 
> > w\[0-9\]+, lsl 3" 1 { target ilp32 } } } */
> >    unsigned long long *t = x - y;
> >    w = t;
> >    return !!t;
> > @@ -117,4 +126,4 @@ int cmp2(unsigned long long x, int y)
> >    return x == ((unsigned long long)y << 3);
> >  }
> >
> > -/* { dg-final { check-function-bodies "**" "" "" } } */
> > +/* { dg-final { check-function-bodies "**" "" "" { target lp64 } } } */
> > diff --git a/gcc/testsuite/gcc.target/aarch64/subsp.c 
> > b/gcc/testsuite/gcc.target/aarch64/subsp.c
> > index 341b83dca86..e7f61e0799b 100644
> > --- a/gcc/testsuite/gcc.target/aarch64/subsp.c
> > +++ b/gcc/testsuite/gcc.target/aarch64/subsp.c
> > @@ -16,4 +16,4 @@ f2 (int *x, int y)
> >  }
> >
> >  /* { dg-final { scan-assembler "sub\tsp, sp, x\[0-9\]*\n" } } */
> > -/* { dg-final { scan-assembler "sub\tsp, sp, w\[0-9\]*, sxtw 4\n" } } */
> > +/* { dg-final { scan-assembler "sub\tsp, sp, w\[0-9\]*, sxtw 4\n" { target 
> > lp64 } } } */

Reply via email to