1 #include <omp.h>
2 #include <gomp-constants.h>
3
4 /* static */ int
5 device_arch_nvptx (void)
6 {
7 return GOMP_DEVICE_NVIDIA_PTX;
8 }
9
10 /* static */ int
11 device_arch_gcn (void)
12 {
13 return GOMP_DEVICE_GCN;
14 }
15
16 #pragma omp declare variant (device_arch_nvptx) match(construct={target},device={arch(nvptx)})
17 #pragma omp declare variant (device_arch_gcn) match(construct={target},device={arch(gcn)})
18 /* static */ int
19 device_arch (void)
20 {
21 return GOMP_DEVICE_DEFAULT;
22 }
23
24 static int
25 on_device_arch (int d)
26 {
27 int d_cur;
28 #pragma omp target map(from:d_cur)
29 d_cur = device_arch ();
30
31 return d_cur == d;
32 }
33
34 int
35 on_device_arch_nvptx ()
36 {
37 return on_device_arch (GOMP_DEVICE_NVIDIA_PTX);
38 }
39
40 int
41 on_device_arch_gcn ()
42 {
43 return on_device_arch (GOMP_DEVICE_GCN);
44 }