Hi all,
This patch fixes issues reported in
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81535
I removed call to g in pr79439.c because gcc was duplicating the basic
block with call depending on compiler flags (so scan-assembler-times
pattern wasn't reliable anymore). I also added alias to prevent
inlining introduced by recent PR56727 patch.
I added Power-specific pattern in pr56727-2.c testcase and disabled
testing on Power in pr56727-1.c.
Tested on powerpc64-unknown-linux-gnu. Ok for trunk?
-Y
2017-07-28 Yury Gribov <tetra2...@gmail.com>
PR target/81535
* gcc.dg/pr56727-1.c: Do not check output on Power.
* gcc.dg/pr56727-2.c: Fix pattern for Power.
* gcc.target/powerpc/pr79439.c: Prevent inlining.
diff -rupN gcc/gcc/testsuite/gcc.dg/pr56727-1.c
gcc-81535/gcc/testsuite/gcc.dg/pr56727-1.c
--- gcc/gcc/testsuite/gcc.dg/pr56727-1.c 2017-07-28 02:39:54.770046466
+0000
+++ gcc-81535/gcc/testsuite/gcc.dg/pr56727-1.c 2017-07-28 04:25:04.805648587
+0000
@@ -1,6 +1,6 @@
/* { dg-do compile { target fpic } } */
/* { dg-options "-O2 -fPIC" } */
-/* { dg-final { scan-assembler-not "@(PLT|plt)" { target i?86-*-* x86_64-*-*
powerpc*-*-* } } } */
+/* { dg-final { scan-assembler-not "@(PLT|plt)" { target i?86-*-* x86_64-*-* }
} } */
#define define_func(type) \
void f_ ## type (type b) { f_ ## type (0); } \
diff -rupN gcc/gcc/testsuite/gcc.dg/pr56727-2.c
gcc-81535/gcc/testsuite/gcc.dg/pr56727-2.c
--- gcc/gcc/testsuite/gcc.dg/pr56727-2.c 2017-07-28 02:39:54.770046466
+0000
+++ gcc-81535/gcc/testsuite/gcc.dg/pr56727-2.c 2017-07-28 04:21:19.195215187
+0000
@@ -1,10 +1,10 @@
/* { dg-do compile { target fpic } } */
/* { dg-options "-O2 -fPIC" } */
-/* { 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);
}
@@ -14,3 +14,5 @@ void h ()
{
g (0);
}
+/* { dg-final { scan-assembler "@(PLT|plt)" { target i?86-*-* x86_64-*-* } } }
*/
+/* { dg-final { scan-assembler "bl f\n\[ \t\]*nop" { target powerpc*-*-linux*
} } } */
diff -rupN gcc/gcc/testsuite/gcc.target/powerpc/pr79439.c
gcc-81535/gcc/testsuite/gcc.target/powerpc/pr79439.c
--- gcc/gcc/testsuite/gcc.target/powerpc/pr79439.c 2017-07-28
02:39:55.750048426 +0000
+++ gcc-81535/gcc/testsuite/gcc.target/powerpc/pr79439.c 2017-07-28
04:13:47.834177237 +0000
@@ -8,22 +8,17 @@
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;
}
+void rec_alias (short) __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 } } */
+/* { dg-final { scan-assembler-times {\mnop\M} 2 } } */