From: Jakub Jelinek Date: Wed, 23 Nov 2016 08:08:47 +0000 (+0100) Subject: re PR target/78451 (FAIL: gcc.target/i386/sse-22a.c: error: inlining failed in call... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ec1c569473de7c478653b6f518d8d8bba18e3f1b;p=gcc.git re PR target/78451 (FAIL: gcc.target/i386/sse-22a.c: error: inlining failed in call to always_inline '_mm512_setzero_ps') 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 --- diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index d0d4417225a..3b412825c36 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2016-11-23 Jakub Jelinek + + 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 * array-notation-common.c (cilkplus_extract_an_trplets): Fix diff --git a/gcc/c-family/c-pragma.c b/gcc/c-family/c-pragma.c index 58ef5c9c80b..2ecacb8d57b 100644 --- a/gcc/c-family/c-pragma.c +++ b/gcc/c-family/c-pragma.c @@ -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); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8f3c7829451..92acce208b6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2016-11-23 Jakub Jelinek + + 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 * testsuite/gcc.target/aarch64/and_const.c: New test to verify diff --git a/gcc/testsuite/gcc.target/i386/pr69255-1.c b/gcc/testsuite/gcc.target/i386/pr69255-1.c index 7a666d34298..f2c101089db 100644 --- a/gcc/testsuite/gcc.target/i386/pr69255-1.c +++ b/gcc/testsuite/gcc.target/i386/pr69255-1.c @@ -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 } */ diff --git a/gcc/testsuite/gcc.target/i386/pr69255-2.c b/gcc/testsuite/gcc.target/i386/pr69255-2.c index 28eb57bbfcc..9ef6c2f4d9e 100644 --- a/gcc/testsuite/gcc.target/i386/pr69255-2.c +++ b/gcc/testsuite/gcc.target/i386/pr69255-2.c @@ -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 } */ diff --git a/gcc/testsuite/gcc.target/i386/pr69255-3.c b/gcc/testsuite/gcc.target/i386/pr69255-3.c index 41fb4a2cf50..713725d80fa 100644 --- a/gcc/testsuite/gcc.target/i386/pr69255-3.c +++ b/gcc/testsuite/gcc.target/i386/pr69255-3.c @@ -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 index 00000000000..8bf60a424be --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr78451.c @@ -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