From: Yury Gribov Date: Fri, 16 Feb 2018 20:38:14 +0000 (+0000) Subject: Fix PowerPC tests in PR 81535. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e1617c1d3837a5d914a6bfd6b01f46c941d0caca;p=gcc.git Fix PowerPC tests in PR 81535. gcc/testsuite/ 2018-02-16 Yury Gribov PR target/81535 * gcc.dg/pr56727-1.c: Prevent tailcalls and update for powerpc*-*-*. * gcc.dg/pr56727-2.c: Ditto. * gcc.target/powerpc/pr79439.c: Renamed to... * gcc.target/powerpc/pr79439-1.c: ...this. * gcc.target/powerpc/pr79439-2.c: New test. * gcc.target/powerpc/pr79439-3.c: New test. From-SVN: r257760 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9cd3b397235..1604854d886 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2018-02-16 Yury Gribov + + PR target/81535 + * gcc.dg/pr56727-1.c: Prevent tailcalls and update for powerpc*-*-*. + * gcc.dg/pr56727-2.c: Ditto. + * gcc.target/powerpc/pr79439.c: Renamed to... + * gcc.target/powerpc/pr79439-1.c: ...this. + * gcc.target/powerpc/pr79439-2.c: New test. + * gcc.target/powerpc/pr79439-3.c: New test. + 2018-02-16 Will Schmidt target/pr84371 diff --git a/gcc/testsuite/gcc.dg/pr56727-1.c b/gcc/testsuite/gcc.dg/pr56727-1.c index ffc133545e7..a26edb2bf9b 100644 --- a/gcc/testsuite/gcc.dg/pr56727-1.c +++ b/gcc/testsuite/gcc.dg/pr56727-1.c @@ -1,6 +1,5 @@ /* { dg-do compile { target fpic } } */ /* { dg-options "-O2 -fPIC" } */ -/* { dg-final { scan-assembler-not "@(PLT|plt)" { target i?86-*-* x86_64-*-* powerpc*-*-* } } } */ #define define_func(type) \ void f_ ## type (type b) { f_ ## type (0); } \ @@ -21,3 +20,7 @@ int __attribute__((noinline, noclone)) foo_noinline(int n) { return (n == 1 || n == 2) ? 1 : foo_noinline(n-1) * foo_noinline(n-2); } + +/* { dg-final { scan-assembler-not "@(PLT|plt)" { target i?86-*-* x86_64-*-* } } } */ +/* { dg-final { scan-assembler-not "@(PLT|plt)" { target { powerpc*-*-* && ilp32 } } } } */ +/* { dg-final { scan-assembler-not "bl \[a-z_\]*\n\\s*nop" { target { powerpc*-*-* && lp64 } } } } */ diff --git a/gcc/testsuite/gcc.dg/pr56727-2.c b/gcc/testsuite/gcc.dg/pr56727-2.c index 62a74d1ea31..c54369ed25e 100644 --- a/gcc/testsuite/gcc.dg/pr56727-2.c +++ b/gcc/testsuite/gcc.dg/pr56727-2.c @@ -1,11 +1,11 @@ /* { dg-do compile { target fpic } } */ /* { dg-options "-O2 -fPIC" } */ /* { dg-require-alias "" } */ -/* { dg-final { scan-assembler "@(PLT|plt)" { target i?86-*-* x86_64-*-* powerpc*-*-linux* } } } */ __attribute__((noinline, noclone)) void f (short b) { + __builtin_setjmp (0); /* Prevent tailcall */ f (0); } @@ -15,3 +15,7 @@ void h () { g (0); } + +/* { dg-final { scan-assembler "@(PLT|plt)" { target i?86-*-* x86_64-*-* } } } */ +/* { dg-final { scan-assembler "@(PLT|plt)" { target { powerpc*-*-linux* && ilp32 } } } } */ +/* { dg-final { scan-assembler "bl f\n\\s*nop" { target { powerpc*-*-linux* && lp64 } } } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/pr79439-1.c b/gcc/testsuite/gcc.target/powerpc/pr79439-1.c new file mode 100644 index 00000000000..5732a236c8e --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr79439-1.c @@ -0,0 +1,28 @@ +/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */ +/* { dg-options "-O2 -fpic -fno-reorder-blocks" } */ + +/* On the Linux 64-bit ABIs, we eliminate NOP in the 'rec' call even if + -fpic is used. The recursive call should call the local alias. The + Linux 32-bit ABIs do not require NOPs after the BL instruction. */ + +int f (void); + +void +g (void) +{ +} + +int +rec (int a) +{ + int ret = 0; + if (a > 10 && f ()) + ret += rec (a - 1); + g (); + return a + ret; +} + +/* { dg-final { scan-assembler-times {\mbl f\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mbl g\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mbl rec\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mnop\M} 2 } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/pr79439-2.c b/gcc/testsuite/gcc.target/powerpc/pr79439-2.c new file mode 100644 index 00000000000..b53af445265 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr79439-2.c @@ -0,0 +1,31 @@ +/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */ +/* { dg-options "-O2 -fpic -fno-reorder-blocks" } */ + +/* On the Linux 64-bit ABIs, we should not eliminate NOP in the 'rec' call if + -fpic is used because rec can be interposed at link time (since it has an + alias), and the recursive call should call the interposed function. The + Linux 32-bit ABIs do not require NOPs after the BL instruction. */ + +int f (void); + +void +g (void) +{ +} + +int +rec (int a) +{ + int ret = 0; + if (a > 10 && f ()) + ret += rec (a - 1); + g (); + return a + ret; +} + +int rec_alias (int) __attribute__ ((alias ("rec"))); + +/* { dg-final { scan-assembler-times {\mbl f\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mbl g\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mbl rec\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mnop\M} 3 } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/pr79439-3.c b/gcc/testsuite/gcc.target/powerpc/pr79439-3.c new file mode 100644 index 00000000000..762ca44b177 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr79439-3.c @@ -0,0 +1,25 @@ +/* { dg-do compile { target { powerpc-*-linux* && ilp32 } } } */ +/* { dg-options "-O2 -fpic -fno-reorder-blocks" } */ + +/* Analog of pr79439-1.c for 32-bit Linux. */ + +int f (void); + +void +g (void) +{ +} + +int +rec (int a) +{ + int ret = 0; + if (a > 10 && f ()) + ret += rec (a - 1); + g (); + return a + ret; +} + +/* { dg-final { scan-assembler-times {\mbl f@plt\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mbl g@plt\M} 1 } } */ +/* { dg-final { scan-assembler-times {\mbl rec@plt\M} 0 } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/pr79439.c b/gcc/testsuite/gcc.target/powerpc/pr79439.c deleted file mode 100644 index 23c9a24fdc3..00000000000 --- a/gcc/testsuite/gcc.target/powerpc/pr79439.c +++ /dev/null @@ -1,29 +0,0 @@ -/* { dg-do compile { target { powerpc64*-*-linux* && lp64 } } } */ -/* { dg-options "-O2 -fpic" } */ - -/* On the Linux 64-bit ABIs, we should not eliminate NOP in the 'rec' call if - -fpic is used because rec can be interposed at link time (since it is - external), and the recursive call should call the interposed function. The - Linux 32-bit ABIs do not require NOPs after the BL instruction. */ - -int f (void); - -void -g (void) -{ -} - -int -rec (int a) -{ - int ret = 0; - if (a > 10 && f ()) - ret += rec (a - 1); - g (); - return a + ret; -} - -/* { dg-final { scan-assembler-times {\mbl f\M} 1 } } */ -/* { dg-final { scan-assembler-times {\mbl g\M} 1 } } */ -/* { dg-final { scan-assembler-times {\mbl rec\M} 1 } } */ -/* { dg-final { scan-assembler-times {\mnop\M} 3 } } */