On Mon, 2020-04-27 at 15:57 -0400, Michael Meissner via Gcc-patches wrote: > This test validates that the compiler does not generate a prefixed > load/store > instruction with an update form. The prefixed load/store > instructions do not > have an update form. > > This is patch #4 of 7. This patch was run on a little endian power8 > system > running Linux, and the tests passed. Can I check this into the > trunk?
Hi, > 2020-04-27 Michael Meissner <meiss...@linux.ibm.com> > > * gcc.target/powerpc/prefix-no-premodify.c: Make sure we do not > generate the non-existent PLWZU instruction if -mcpu=future. Should "premodify" instead be "no-update" or "no-update-forms" ? I don't immediately see why "modify" is referenced. > > --- /tmp/zijQUT_prefix-no-premodify.c 2020-04-27 14:01:44.465121833 > -0400 > +++ gcc/testsuite/gcc.target/powerpc/prefix-no-premodify.c 2020- > 04-27 14:01:44.288124213 -0400 > @@ -0,0 +1,50 @@ > +/* { dg-do compile } */ > +/* { dg-require-effective-target powerpc_prefixed_addr } */ > +/* { dg-options "-O2 -mdejagnu-cpu=future" } */ > + > +/* Make sure that we don't generate a prefixed form of the load and > store with > + update instructions (i.e. instead of generating LWZU we have to > generate > + PLWZ plus a PADDI). */ > + > +#ifndef SIZE > +#define SIZE 50000 > +#endif > + > +struct foo { > + unsigned int field; > + char pad[SIZE]; > +}; > + > +struct foo *inc_load (struct foo *p, unsigned int *q) > +{ > + *q = (++p)->field; /* PLWZ, PADDI, STW. */ > + return p; > +} > + > +struct foo *dec_load (struct foo *p, unsigned int *q) > +{ > + *q = (--p)->field; /* PLWZ, PADDI, STW. */ > + return p; > +} > + > +struct foo *inc_store (struct foo *p, unsigned int *q) > +{ > + (++p)->field = *q; /* LWZ, PADDI, PSTW. */ > + return p; > +} > + > +struct foo *dec_store (struct foo *p, unsigned int *q) > +{ > + (--p)->field = *q; /* LWZ, PADDI, PSTW. */ > + return p; > +} > + > +/* { dg-final { scan-assembler-times {\mlwz\M} 2 } } */ > +/* { dg-final { scan-assembler-times {\mstw\M} 2 } } */ > +/* { dg-final { scan-assembler-times {\mpaddi\M} 4 } } */ > +/* { dg-final { scan-assembler-times {\mplwz\M} 2 } } */ > +/* { dg-final { scan-assembler-times {\mpstw\M} 2 } } */ Numbers line up with comments above. > +/* { dg-final { scan-assembler-not {\mplwzu\M} } } */ > +/* { dg-final { scan-assembler-not {\mpstwu\M} } } */ > +/* { dg-final { scan-assembler-not {\maddis\M} } } */ > +/* { dg-final { scan-assembler-not {\maddi\M} } } */ Ok. lgtm. thanks, -Will >