mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
c-c++-common/gomp/{attrs-,}metadirective-3.c: Fix expected result [PR118694]
With compilation for nvptx enabled, two issues showed up:
(a) "error: 'target' construct with nested 'teams' construct contains
directives outside of the 'teams' construct"
See PR comment 9 why this is difficult to fix.
Solution: Add dg-bogus and accept/expect the error for 'target offload_nvptx'.
(b) The assumptions about the dump for 'target offload_nvptx' were wrong
as the metadirective was already expanded to a OMP_NEXT_VARIANT
construct such that no 'omp metadirective' was left in either case.
Solution: Check that no 'omp metadirective' is left; additionally, expect
either OMP_NEXT_VARIANT (when offload_nvptx is available) or no 'teams'
directive at all (if not).
gcc/testsuite/ChangeLog:
PR middle-end/118694
* c-c++-common/gomp/attrs-metadirective-3.c: Change to never
expect 'omp metadirective' in the dump. If !offload_nvptx, check
that no 'teams' shows up in the dump; for offload_nvptx, expect
OMP_NEXT_VARIANT and an error about directive between 'target'
and 'teams'.
* c-c++-common/gomp/metadirective-3.c: Likewise.
This commit is contained in:
@@ -9,7 +9,7 @@ f (int x[], int y[], int z[])
|
||||
{
|
||||
int i;
|
||||
|
||||
[[omp::sequence (directive (target map(to: x, y) map(from: z)),
|
||||
[[omp::sequence (directive (target map(to: x, y) map(from: z)), /* { dg-bogus "'target' construct with nested 'teams' construct contains directives outside of the 'teams' construct" "PR118694" { xfail offload_nvptx } } */
|
||||
directive (metadirective
|
||||
when (device={arch("nvptx")}: teams loop)
|
||||
default (parallel loop)))]]
|
||||
@@ -20,5 +20,6 @@ f (int x[], int y[], int z[])
|
||||
/* If offload device "nvptx" isn't supported, the front end can eliminate
|
||||
that alternative and not produce a metadirective at all. Otherwise this
|
||||
won't be resolved until late. */
|
||||
/* { dg-final { scan-tree-dump-not "#pragma omp metadirective" "gimple" { target { ! offload_nvptx } } } } */
|
||||
/* { dg-final { scan-tree-dump "#pragma omp metadirective" "gimple" { target { offload_nvptx } } } } */
|
||||
/* { dg-final { scan-tree-dump-not "#pragma omp metadirective" "gimple" } } */
|
||||
/* { dg-final { scan-tree-dump-not " teams" "gimple" { target { ! offload_nvptx } } } } */
|
||||
/* { dg-final { scan-tree-dump "variant.\[0-9\]+ = \\\[omp_next_variant\\\] OMP_NEXT_VARIANT <0,\[\r\n \]+construct context = 14\[\r\n \]+1: device = \\{arch \\(.nvptx.\\)\\}\[\r\n \]+2: >;" "gimple" { target { offload_nvptx } } } } */
|
||||
|
||||
@@ -8,7 +8,7 @@ f (int x[], int y[], int z[])
|
||||
{
|
||||
int i;
|
||||
|
||||
#pragma omp target map(to: x, y) map(from: z)
|
||||
#pragma omp target map(to: x, y) map(from: z) /* { dg-bogus "'target' construct with nested 'teams' construct contains directives outside of the 'teams' construct" "PR118694" { xfail offload_nvptx } } */
|
||||
#pragma omp metadirective \
|
||||
when (device={arch("nvptx")}: teams loop) \
|
||||
default (parallel loop)
|
||||
@@ -19,5 +19,6 @@ f (int x[], int y[], int z[])
|
||||
/* If offload device "nvptx" isn't supported, the front end can eliminate
|
||||
that alternative and not produce a metadirective at all. Otherwise this
|
||||
won't be resolved until late. */
|
||||
/* { dg-final { scan-tree-dump-not "#pragma omp metadirective" "gimple" { target { ! offload_nvptx } } } } */
|
||||
/* { dg-final { scan-tree-dump "#pragma omp metadirective" "gimple" { target { offload_nvptx } } } } */
|
||||
/* { dg-final { scan-tree-dump-not "#pragma omp metadirective" "gimple" } } */
|
||||
/* { dg-final { scan-tree-dump-not " teams" "gimple" { target { ! offload_nvptx } } } } */
|
||||
/* { dg-final { scan-tree-dump "variant.\[0-9\]+ = \\\[omp_next_variant\\\] OMP_NEXT_VARIANT <0,\[\r\n \]+construct context = 14\[\r\n \]+1: device = \\{arch \\(.nvptx.\\)\\}\[\r\n \]+2: >;" "gimple" { target { offload_nvptx } } } } */
|
||||
|
||||
Reference in New Issue
Block a user