Commit a0883b08 by Michael Meissner Committed by Michael Meissner

re PR target/72853 (gcc/testsuite/gcc.c-torture/execute/20021120-1.c generates…

re PR target/72853 (gcc/testsuite/gcc.c-torture/execute/20021120-1.c generates incorrect stxssp op with -mcpu=power9)

[gcc]
2016-08-10  Michael Meissner  <meissner@linux.vnet.ibm.com>

	PR target/72853
	* config/rs6000/rs6000.c (mem_operand_ds_form): Add check for op
	being an offsettable address.

[gcc/testsuite]
2016-08-10  Michael Meissner  <meissner@linux.vnet.ibm.com>

	PR target/72853
	* gcc.target/powerpc/pr72853.c: New test.

From-SVN: r239325
parent a266236e
2016-08-10 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/72853
* config/rs6000/rs6000.c (mem_operand_ds_form): Add check for op
being an offsettable address.
2016-08-10 Martin Liska <mliska@suse.cz> 2016-08-10 Martin Liska <mliska@suse.cz>
PR gcov-profile/58306 PR gcov-profile/58306
......
...@@ -7739,6 +7739,9 @@ mem_operand_ds_form (rtx op, machine_mode mode) ...@@ -7739,6 +7739,9 @@ mem_operand_ds_form (rtx op, machine_mode mode)
int extra; int extra;
rtx addr = XEXP (op, 0); rtx addr = XEXP (op, 0);
if (!offsettable_address_p (false, mode, addr))
return false;
op = address_offset (addr); op = address_offset (addr);
if (op == NULL_RTX) if (op == NULL_RTX)
return true; return true;
2016-08-10 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/72853
* gcc.target/powerpc/pr72853.c: New test.
2016-08-10 Martin Liska <mliska@suse.cz> 2016-08-10 Martin Liska <mliska@suse.cz>
PR gcov-profile/58306 PR gcov-profile/58306
......
/* { dg-do compile { target { powerpc*-*-* } } } */
/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-options "-mcpu=power9 -O3 -mupper-regs-df -mupper-regs-sf -funroll-loops" } */
/* derived from 20021120-1.c, compiled for -mcpu=power9. */
extern void abort (void);
extern void exit (int);
volatile double gd[32];
volatile float gf[32];
void
foo (int n)
{
double d00, d10, d20, d30, d01, d11, d21, d31, d02, d12, d22, d32, d03, d13,
d23, d33, d04, d14, d24, d34, d05, d15, d25, d35, d06, d16, d26, d36, d07,
d17, d27, d37;
float f00, f10, f20, f30, f01, f11, f21, f31, f02, f12, f22, f32, f03, f13,
f23, f33, f04, f14, f24, f34, f05, f15, f25, f35, f06, f16, f26, f36, f07,
f17, f27, f37;
volatile double *pd;
volatile float *pf;
int i;
pd = gd;
d00 = *(pd++), d10 = *(pd++), d20 = *(pd++), d30 = *(pd++), d01 =
*(pd++), d11 = *(pd++), d21 = *(pd++), d31 = *(pd++), d02 = *(pd++), d12 =
*(pd++), d22 = *(pd++), d32 = *(pd++), d03 = *(pd++), d13 = *(pd++), d23 =
*(pd++), d33 = *(pd++), d04 = *(pd++), d14 = *(pd++), d24 = *(pd++), d34 =
*(pd++), d05 = *(pd++), d15 = *(pd++), d25 = *(pd++), d35 = *(pd++), d06 =
*(pd++), d16 = *(pd++), d26 = *(pd++), d36 = *(pd++), d07 = *(pd++), d17 =
*(pd++), d27 = *(pd++), d37 = *(pd++);
for (i = 0; i < n; i++)
{
pf = gf;
f00 = *(pf++), f10 = *(pf++), f20 = *(pf++), f30 = *(pf++), f01 =
*(pf++), f11 = *(pf++), f21 = *(pf++), f31 = *(pf++), f02 =
*(pf++), f12 = *(pf++), f22 = *(pf++), f32 = *(pf++), f03 =
*(pf++), f13 = *(pf++), f23 = *(pf++), f33 = *(pf++), f04 =
*(pf++), f14 = *(pf++), f24 = *(pf++), f34 = *(pf++), f05 =
*(pf++), f15 = *(pf++), f25 = *(pf++), f35 = *(pf++), f06 =
*(pf++), f16 = *(pf++), f26 = *(pf++), f36 = *(pf++), f07 =
*(pf++), f17 = *(pf++), f27 = *(pf++), f37 = *(pf++);
pd = gd;
d00 += *(pd++), d10 += *(pd++), d20 += *(pd++), d30 += *(pd++), d01 +=
*(pd++), d11 += *(pd++), d21 += *(pd++), d31 += *(pd++), d02 +=
*(pd++), d12 += *(pd++), d22 += *(pd++), d32 += *(pd++), d03 +=
*(pd++), d13 += *(pd++), d23 += *(pd++), d33 += *(pd++), d04 +=
*(pd++), d14 += *(pd++), d24 += *(pd++), d34 += *(pd++), d05 +=
*(pd++), d15 += *(pd++), d25 += *(pd++), d35 += *(pd++), d06 +=
*(pd++), d16 += *(pd++), d26 += *(pd++), d36 += *(pd++), d07 +=
*(pd++), d17 += *(pd++), d27 += *(pd++), d37 += *(pd++);
pd = gd;
d00 += *(pd++), d10 += *(pd++), d20 += *(pd++), d30 += *(pd++), d01 +=
*(pd++), d11 += *(pd++), d21 += *(pd++), d31 += *(pd++), d02 +=
*(pd++), d12 += *(pd++), d22 += *(pd++), d32 += *(pd++), d03 +=
*(pd++), d13 += *(pd++), d23 += *(pd++), d33 += *(pd++), d04 +=
*(pd++), d14 += *(pd++), d24 += *(pd++), d34 += *(pd++), d05 +=
*(pd++), d15 += *(pd++), d25 += *(pd++), d35 += *(pd++), d06 +=
*(pd++), d16 += *(pd++), d26 += *(pd++), d36 += *(pd++), d07 +=
*(pd++), d17 += *(pd++), d27 += *(pd++), d37 += *(pd++);
pd = gd;
d00 += *(pd++), d10 += *(pd++), d20 += *(pd++), d30 += *(pd++), d01 +=
*(pd++), d11 += *(pd++), d21 += *(pd++), d31 += *(pd++), d02 +=
*(pd++), d12 += *(pd++), d22 += *(pd++), d32 += *(pd++), d03 +=
*(pd++), d13 += *(pd++), d23 += *(pd++), d33 += *(pd++), d04 +=
*(pd++), d14 += *(pd++), d24 += *(pd++), d34 += *(pd++), d05 +=
*(pd++), d15 += *(pd++), d25 += *(pd++), d35 += *(pd++), d06 +=
*(pd++), d16 += *(pd++), d26 += *(pd++), d36 += *(pd++), d07 +=
*(pd++), d17 += *(pd++), d27 += *(pd++), d37 += *(pd++);
pf = gf;
*(pf++) = f00, *(pf++) = f10, *(pf++) = f20, *(pf++) = f30, *(pf++) =
f01, *(pf++) = f11, *(pf++) = f21, *(pf++) = f31, *(pf++) =
f02, *(pf++) = f12, *(pf++) = f22, *(pf++) = f32, *(pf++) =
f03, *(pf++) = f13, *(pf++) = f23, *(pf++) = f33, *(pf++) =
f04, *(pf++) = f14, *(pf++) = f24, *(pf++) = f34, *(pf++) =
f05, *(pf++) = f15, *(pf++) = f25, *(pf++) = f35, *(pf++) =
f06, *(pf++) = f16, *(pf++) = f26, *(pf++) = f36, *(pf++) =
f07, *(pf++) = f17, *(pf++) = f27, *(pf++) = f37;
}
pd = gd;
*(pd++) = d00, *(pd++) = d10, *(pd++) = d20, *(pd++) = d30, *(pd++) =
d01, *(pd++) = d11, *(pd++) = d21, *(pd++) = d31, *(pd++) = d02, *(pd++) =
d12, *(pd++) = d22, *(pd++) = d32, *(pd++) = d03, *(pd++) = d13, *(pd++) =
d23, *(pd++) = d33, *(pd++) = d04, *(pd++) = d14, *(pd++) = d24, *(pd++) =
d34, *(pd++) = d05, *(pd++) = d15, *(pd++) = d25, *(pd++) = d35, *(pd++) =
d06, *(pd++) = d16, *(pd++) = d26, *(pd++) = d36, *(pd++) = d07, *(pd++) =
d17, *(pd++) = d27, *(pd++) = d37;
}
int
main ()
{
int i;
for (i = 0; i < 32; i++)
gd[i] = i, gf[i] = i;
foo (1);
for (i = 0; i < 32; i++)
if (gd[i] != i * 4 || gf[i] != i)
abort ();
exit (0);
}
/* { dg-final { scan-assembler-not "stxsd \[0-9\]+,\[0-9\]+,\[0-9\]" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment