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



> 

Reply via email to