| /* { dg-additional-options "-fdump-tree-gimple" } */ |
| |
| /* Check that append_args is not applied if there the outermost function |
| in '#pragma omp dispatch' is not variant substituted. */ |
| |
| #if __cplusplus >= 201103L |
| # define __GOMP_UINTPTR_T_ENUM : __UINTPTR_TYPE__ |
| #else |
| # define __GOMP_UINTPTR_T_ENUM |
| #endif |
| |
| typedef enum omp_interop_t __GOMP_UINTPTR_T_ENUM |
| { |
| omp_interop_none = 0, |
| __omp_interop_t_max__ = __UINTPTR_MAX__ |
| } omp_interop_t; |
| |
| int v1(int, omp_interop_t); |
| #pragma omp declare variant(v1) match(construct={dispatch}) append_args(interop(target)) |
| int b1(int); |
| |
| int v2(int); |
| int v2a(int); |
| #pragma omp declare variant(v2) match(construct={dispatch},user={condition(1)}) |
| #pragma omp declare variant(v2a) match(user={condition(1)}) |
| int b2(int); |
| |
| |
| int test (int x1, int x2, int y1, int y2, int z1, int z2, int num1, int num2, int num3) |
| { |
| |
| /* { dg-final { scan-tree-dump-times "D\.\[0-9\]+ = __builtin_omp_get_default_device \\(\\);" 3 "gimple" } } */ |
| /* { dg-final { scan-tree-dump-times "__builtin_omp_set_default_device \\(D\.\[0-9\]+\\);" 3 "gimple" } } */ |
| |
| #pragma omp dispatch |
| x1 = v1 (b2 (x1), omp_interop_none); |
| /* { dg-final { scan-tree-dump-times "D\.\[0-9\]+ = v2 \\(x1\\);" 1 "gimple" } } */ |
| /* { dg-final { scan-tree-dump-times "x1 = v1 \\(D\.\[0-9\]+, 0\\);" 1 "gimple" } } */ |
| |
| #pragma omp dispatch device(num1) |
| x2 = v1 (b2 (x2), omp_interop_none); |
| /* { dg-final { scan-tree-dump-times "__builtin_omp_set_default_device \\(num1\\);" 1 "gimple" } } */ |
| /* { dg-final { scan-tree-dump-times "D\.\[0-9\]+ = v2 \\(x2\\);" 1 "gimple" } } */ |
| /* { dg-final { scan-tree-dump-times "x2 = v1 \\(D\.\[0-9\]+, 0\\);" 1 "gimple" } } */ |
| |
| |
| #pragma omp dispatch nocontext(1) |
| y1 = v1 (b2 (y1), omp_interop_none); |
| /* { dg-final { scan-tree-dump-times "D\.\[0-9\]+ = v2a \\(y1\\);" 1 "gimple" } } */ |
| /* { dg-final { scan-tree-dump-times "y1 = v1 \\(D\.\[0-9\]+, 0\\);" 1 "gimple" } } */ |
| |
| #pragma omp dispatch nocontext(1) device(num2) |
| y2 = v1 (b2 (y2), omp_interop_none); |
| /* { dg-final { scan-tree-dump-times "__builtin_omp_set_default_device \\(num2\\);" 1 "gimple" } } */ |
| /* { dg-final { scan-tree-dump-times "D\.\[0-9\]+ = v2a \\(y2\\);" 1 "gimple" } } */ |
| /* { dg-final { scan-tree-dump-times "y2 = v1 \\(D\.\[0-9\]+, 0\\);" 1 "gimple" } } */ |
| |
| |
| #pragma omp dispatch novariants(1) |
| z1 = v1 (b2 (z1), omp_interop_none); |
| /* { dg-final { scan-tree-dump-times "D\.\[0-9\]+ = v2 \\(z1\\);" 1 "gimple" } } */ |
| /* { dg-final { scan-tree-dump-times "z1 = v1 \\(D\.\[0-9\]+, 0\\);" 1 "gimple" } } */ |
| |
| #pragma omp dispatch novariants(1) device(num3) |
| z2 = v1 (b2 (z2), omp_interop_none); |
| /* { dg-final { scan-tree-dump-times "__builtin_omp_set_default_device \\(num3\\);" 1 "gimple" } } */ |
| /* { dg-final { scan-tree-dump-times "D\.\[0-9\]+ = v2 \\(z2\\);" 1 "gimple" } } */ |
| /* { dg-final { scan-tree-dump-times "z2 = v1 \\(D\.\[0-9\]+, 0\\);" 1 "gimple" } } */ |
| |
| return x1 + x2 + y1 + y2 + z1 + z2; |
| } |