This patch adds a test to make sure the GCC compiler does not try to issue a pre-modify prefixed address load/store since the prefixed instructions do not support an update form. This patch was in V5 patch #12 but it was split out.
Along with the other patches, I have done bootstraps on a little endian power8 system, and there were no regressions in the test suite. I have built both Spec 2006 and Spec 2017 with all of these patches installed using -mcpu=future, and there were no failures. Can I check this into the trunk? Note, I may have limited email access on October 17th and 18th, 2019. 2019-10-15 Michael Meissner <meiss...@linux.ibm.com> * gcc.target/powerpc/prefix-premodify.c: New test to make sure we do not generate PRE_INC, PRE_DEC, or PRE_MODIFY on prefixed loads or stores. Index: gcc/testsuite/gcc.target/powerpc/prefix-premodify.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/prefix-premodify.c (revision 277039) +++ gcc/testsuite/gcc.target/powerpc/prefix-premodify.c (working copy) @@ -0,0 +1,47 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_prefixed_addr_ok } */ +/* { dg-options "-O2 -mdejagnu-cpu=future" } */ + +/* Make sure that we don't try to generate a prefixed form of the load and + store with update instructions. */ + +#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; + return p; +} + +struct foo *dec_load (struct foo *p, unsigned int *q) +{ + *q = (--p)->field; + return p; +} + +struct foo *inc_store (struct foo *p, unsigned int *q) +{ + (++p)->field = *q; + return p; +} + +struct foo *dec_store (struct foo *p, unsigned int *q) +{ + (--p)->field = *q; + return p; +} + +/* { dg-final { scan-assembler-times {\mpli\M|\mpla\M|\mpaddi\M} 4 } } */ +/* { dg-final { scan-assembler-times {\mplwz\M} 2 } } */ +/* { dg-final { scan-assembler-times {\mpstw\M} 2 } } */ +/* { dg-final { scan-assembler-not {\mp?lwzu\M} } } */ +/* { dg-final { scan-assembler-not {\mp?stwzu\M} } } */ +/* { dg-final { scan-assembler-not {\maddis\M} } } */ +/* { dg-final { scan-assembler-not {\maddi\M} } } */ -- Michael Meissner, IBM IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA email: meiss...@linux.ibm.com, phone: +1 (978) 899-4797