diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-11-15 09:32:36 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-11-15 09:32:36 +0100 |
commit | 0227ffa98e122d5716d508c435cb8323cd93bfef (patch) | |
tree | 1061bae3610fd33b8be8ea3ae45c260c201f3812 /gcc/testsuite/c-c++-common | |
parent | 1c9676e2076b403eb1f6b22351bf0c58cc367ee3 (diff) |
gimplify.c (gimplify_call_expr): Don't call omp_resolve_declare_variant after gimplification.
* gimplify.c (gimplify_call_expr): Don't call
omp_resolve_declare_variant after gimplification.
* omp-general.c (omp_context_selector_matches): For isa that might
match in some other function, defer if in declare simd function.
(omp_context_compute_score): Don't look for " score" in construct
trait set. Set *score to -1 if it can't ever match.
(omp_resolve_declare_variant): If any variants need to be deferred,
don't punt immediately, but compute scores of all variants and if
ther eis a score winner that doesn't need to be deferred, return that.
* c-c++-common/gomp/declare-variant-13.c: New test.
From-SVN: r278280
Diffstat (limited to 'gcc/testsuite/c-c++-common')
-rw-r--r-- | gcc/testsuite/c-c++-common/gomp/declare-variant-13.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/gcc/testsuite/c-c++-common/gomp/declare-variant-13.c b/gcc/testsuite/c-c++-common/gomp/declare-variant-13.c new file mode 100644 index 00000000000..68e6a897950 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/declare-variant-13.c @@ -0,0 +1,24 @@ +/* { dg-do compile { target vect_simd_clones } } */ +/* { dg-additional-options "-fdump-tree-gimple" } */ +/* { dg-additional-options "-mno-sse3" { target { i?86-*-* x86_64-*-* } } } */ + +int f01 (int); +int f02 (int); +int f03 (int); +int f04 (int); +#pragma omp declare variant (f01) match (device={isa("avx512f")}) /* 4 or 8 */ +#pragma omp declare variant (f02) match (implementation={vendor(score(3):gnu)},device={kind(cpu)}) /* (1 or 2) + 3 */ +#pragma omp declare variant (f03) match (user={condition(score(9):1)}) +#pragma omp declare variant (f04) match (implementation={vendor(score(6):gnu)},device={kind(host)}) /* (1 or 2) + 6 */ +int f05 (int); + +#pragma omp declare simd +int +test1 (int x) +{ + /* 0 or 1 (the latter if in a declare simd clone) constructs in OpenMP context, + isa has score 2^2 or 2^3. We can't decide on whether avx512f will match or + not, that also depends on whether it is a declare simd clone or not and which + one, but the f03 variant has a higher score anyway. */ + return f05 (x); /* { dg-final { scan-tree-dump-times "f03 \\\(x" 1 "gimple" } } */ +} |