re PR target/78451 (FAIL: gcc.target/i386/sse-22a.c: error: inlining failed in call...
authorJakub Jelinek <jakub@redhat.com>
Wed, 23 Nov 2016 08:08:47 +0000 (09:08 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 23 Nov 2016 08:08:47 +0000 (09:08 +0100)
PR target/78451
* c-pragma.c (handle_pragma_target): Don't replace
current_target_pragma, but chainon the new args to the current one.

* gcc.target/i386/pr78451.c: New test.
* gcc.target/i386/pr69255-1.c: Use #pragma GCC push_options
and #pragma GCC pop_options around the first #pragma GCC target.
* gcc.target/i386/pr69255-2.c: Likewise.
* gcc.target/i386/pr69255-3.c: Likewise.

From-SVN: r242740

gcc/c-family/ChangeLog
gcc/c-family/c-pragma.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr69255-1.c
gcc/testsuite/gcc.target/i386/pr69255-2.c
gcc/testsuite/gcc.target/i386/pr69255-3.c
gcc/testsuite/gcc.target/i386/pr78451.c [new file with mode: 0644]

index d0d4417225ad7fb6b2b997bad6964788db887206..3b412825c36262cc5f800ed3ebd3fb1f282ac0a9 100644 (file)
@@ -1,3 +1,9 @@
+2016-11-23  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/78451
+       * c-pragma.c (handle_pragma_target): Don't replace
+       current_target_pragma, but chainon the new args to the current one.
+
 2016-11-22  Nathan Sidwell  <nathan@acm.org>
 
        * array-notation-common.c (cilkplus_extract_an_trplets): Fix
index 58ef5c9c80b65ab2cc75a4e2016927f5d8a39848..2ecacb8d57bfd679625a4f72f6ca3ca90dccde42 100644 (file)
@@ -893,7 +893,7 @@ handle_pragma_target(cpp_reader *ARG_UNUSED(dummy))
       args = nreverse (args);
 
       if (targetm.target_option.pragma_parse (args, NULL_TREE))
-       current_target_pragma = args;
+       current_target_pragma = chainon (current_target_pragma, args);
     }
 }
 
index 8f3c78294517bf05e2f80768a28ec77d5c336b95..92acce208b6270ce5d6635ba906878a2c6ae526d 100644 (file)
@@ -1,3 +1,12 @@
+2016-11-23  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/78451
+       * gcc.target/i386/pr78451.c: New test.
+       * gcc.target/i386/pr69255-1.c: Use #pragma GCC push_options
+       and #pragma GCC pop_options around the first #pragma GCC target.
+       * gcc.target/i386/pr69255-2.c: Likewise.
+       * gcc.target/i386/pr69255-3.c: Likewise.
+
 2016-11-23  Michael Collison  <michael.collison@arm.com>
 
        * testsuite/gcc.target/aarch64/and_const.c: New test to verify
index 7a666d342981a0d2d15a1cd073a97edeb8f05f58..f2c101089db669e549f75d7ede8cdcc070a7f101 100644 (file)
@@ -2,7 +2,9 @@
 /* { dg-do compile } */
 /* { dg-options "-msse4 -mno-avx" } */
 
+#pragma GCC push_options
 #pragma GCC target "avx512vl"
+#pragma GCC pop_options
 #pragma GCC target "no-avx512vl"
 __attribute__ ((__vector_size__ (32))) long long a;
 __attribute__ ((__vector_size__ (16))) int b;
@@ -13,5 +15,5 @@ foo (const long long *p)
   a = __builtin_ia32_gather3siv4di (a, p, b, 1, 1);    /* { dg-error "needs isa option -m32 -mavx512vl" } */
 }
 
-/* { dg-warning "AVX vector return without AVX enabled changes the ABI" "" { target *-*-* } 13 } */
-/* { dg-warning "AVX vector argument without AVX enabled changes the ABI" "" { target *-*-* } 13 } */
+/* { dg-warning "AVX vector return without AVX enabled changes the ABI" "" { target *-*-* } 15 } */
+/* { dg-warning "AVX vector argument without AVX enabled changes the ABI" "" { target *-*-* } 15 } */
index 28eb57bbfcc5de69aee125e169f4e770de150df0..9ef6c2f4d9e8f870919bf5f1bc71bb01feac037f 100644 (file)
@@ -2,7 +2,9 @@
 /* { dg-do compile } */
 /* { dg-options "-msse4 -mno-avx" } */
 
+#pragma GCC push_options
 #pragma GCC target "avx512vl"
+#pragma GCC pop_options
 #pragma GCC target ""
 __attribute__ ((__vector_size__ (32))) long long a;
 __attribute__ ((__vector_size__ (16))) int b;
@@ -13,5 +15,5 @@ foo (const long long *p)
   __builtin_ia32_gather3siv4di (a, p, b, 1, 1);                /* { dg-error "needs isa option -m32 -mavx512vl" } */
 }
 
-/* { dg-warning "AVX vector return without AVX enabled changes the ABI" "" { target *-*-* } 13 } */
-/* { dg-warning "AVX vector argument without AVX enabled changes the ABI" "" { target *-*-* } 13 } */
+/* { dg-warning "AVX vector return without AVX enabled changes the ABI" "" { target *-*-* } 15 } */
+/* { dg-warning "AVX vector argument without AVX enabled changes the ABI" "" { target *-*-* } 15 } */
index 41fb4a2cf509cfcb1952588591d91431cdb6722a..713725d80fac396acb0e17618967e6d45b9e9134 100644 (file)
@@ -2,7 +2,9 @@
 /* { dg-do compile } */
 /* { dg-options "-msse4 -mno-avx" } */
 
+#pragma GCC push_options
 #pragma GCC target "avx512vl"
+#pragma GCC pop_options
 #pragma GCC target ""
 __attribute__ ((__vector_size__ (32))) long long a;
 __attribute__ ((__vector_size__ (16))) int b;
@@ -13,5 +15,5 @@ foo (const long long *p, __attribute__ ((__vector_size__ (32))) long long *q)
   *q = __builtin_ia32_gather3siv4di (a, p, b, 1, 1);   /* { dg-error "needs isa option -m32 -mavx512vl" } */
 }
 
-/* { dg-warning "AVX vector return without AVX enabled changes the ABI" "" { target *-*-* } 13 } */
-/* { dg-warning "AVX vector argument without AVX enabled changes the ABI" "" { target *-*-* } 13 } */
+/* { dg-warning "AVX vector return without AVX enabled changes the ABI" "" { target *-*-* } 15 } */
+/* { dg-warning "AVX vector argument without AVX enabled changes the ABI" "" { target *-*-* } 15 } */
diff --git a/gcc/testsuite/gcc.target/i386/pr78451.c b/gcc/testsuite/gcc.target/i386/pr78451.c
new file mode 100644 (file)
index 0000000..8bf60a4
--- /dev/null
@@ -0,0 +1,35 @@
+/* PR target/78451 */
+/* { dg-options "-O2 -mno-avx512f" } */
+
+#pragma GCC push_options
+#pragma GCC target ("avx512bw")
+
+static inline int __attribute__ ((__always_inline__))
+bar (void)
+{
+  return 0;
+}
+
+#pragma GCC push_options
+#pragma GCC target ("avx512vl")
+
+int
+foo (void)
+{
+  return bar ();
+}
+
+#pragma GCC pop_options
+#pragma GCC pop_options
+
+#pragma GCC push_options
+#pragma GCC target ("avx512vl")
+#pragma GCC target ("avx512bw")
+
+int
+baz (void)
+{
+  return bar ();
+}
+
+#pragma GCC pop_options