summaryrefslogtreecommitdiff
path: root/gcc/testsuite/c-c++-common
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-11-15 09:32:36 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2019-11-15 09:32:36 +0100
commit0227ffa98e122d5716d508c435cb8323cd93bfef (patch)
tree1061bae3610fd33b8be8ea3ae45c260c201f3812 /gcc/testsuite/c-c++-common
parent1c9676e2076b403eb1f6b22351bf0c58cc367ee3 (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.c24
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" } } */
+}