1*330d8983SJohannes Doerfert // RUN: %libomptarget-compilexx-run-and-check-generic
2*330d8983SJohannes Doerfert
3*330d8983SJohannes Doerfert #include <omp.h>
4*330d8983SJohannes Doerfert #include <ompx.h>
5*330d8983SJohannes Doerfert #include <stdio.h>
6*330d8983SJohannes Doerfert
foo(int device)7*330d8983SJohannes Doerfert void foo(int device) {
8*330d8983SJohannes Doerfert int tid = 0, bid = 0, bdim = 0;
9*330d8983SJohannes Doerfert #pragma omp target teams distribute parallel for map(from \
10*330d8983SJohannes Doerfert : tid, bid, bdim) \
11*330d8983SJohannes Doerfert device(device) thread_limit(2) num_teams(5)
12*330d8983SJohannes Doerfert for (int i = 0; i < 1000; ++i) {
13*330d8983SJohannes Doerfert if (i == 42) {
14*330d8983SJohannes Doerfert tid = ompx::block_dim_x();
15*330d8983SJohannes Doerfert bid = ompx::block_id_x();
16*330d8983SJohannes Doerfert bdim = ompx::grid_dim_x();
17*330d8983SJohannes Doerfert }
18*330d8983SJohannes Doerfert }
19*330d8983SJohannes Doerfert // CHECK: tid: 2, bid: 1, bdim: 5
20*330d8983SJohannes Doerfert // CHECK: tid: 2, bid: 0, bdim: 1
21*330d8983SJohannes Doerfert printf("tid: %i, bid: %i, bdim: %i\n", tid, bid, bdim);
22*330d8983SJohannes Doerfert }
23*330d8983SJohannes Doerfert
isGPU()24*330d8983SJohannes Doerfert int isGPU() { return 0; }
25*330d8983SJohannes Doerfert #pragma omp declare variant(isGPU) match(device = {kind(gpu)})
isGPUvariant()26*330d8983SJohannes Doerfert int isGPUvariant() { return 1; }
27*330d8983SJohannes Doerfert
defaultIsGPU()28*330d8983SJohannes Doerfert int defaultIsGPU() {
29*330d8983SJohannes Doerfert int r = 0;
30*330d8983SJohannes Doerfert #pragma omp target map(from : r)
31*330d8983SJohannes Doerfert r = isGPU();
32*330d8983SJohannes Doerfert return r;
33*330d8983SJohannes Doerfert }
34*330d8983SJohannes Doerfert
main()35*330d8983SJohannes Doerfert int main() {
36*330d8983SJohannes Doerfert if (defaultIsGPU())
37*330d8983SJohannes Doerfert foo(omp_get_default_device());
38*330d8983SJohannes Doerfert else
39*330d8983SJohannes Doerfert printf("tid: 2, bid: 1, bdim: 5\n");
40*330d8983SJohannes Doerfert foo(omp_get_initial_device());
41*330d8983SJohannes Doerfert }
42