162 lines · c
1// RUN: %libomptarget-compile-generic -fopenmp-extensions2// RUN: %libomptarget-run-generic | %fcheck-generic -strict-whitespace3 4#include <omp.h>5#include <stdio.h>6 7#define CHECK_PRESENCE(Var1, Var2, Var3) \8 printf(" presence of %s, %s, %s: %d, %d, %d\n", #Var1, #Var2, #Var3, \9 omp_target_is_present(&Var1, omp_get_default_device()), \10 omp_target_is_present(&Var2, omp_get_default_device()), \11 omp_target_is_present(&Var3, omp_get_default_device()))12 13int main() {14 int m, r, d;15 // CHECK: presence of m, r, d: 0, 0, 016 CHECK_PRESENCE(m, r, d);17 18 // -----------------------------------------------------------------------19 // CHECK-NEXT: check:{{.*}}20 printf("check: dyn>0, hold=0, dec dyn=0\n");21 22 // CHECK-NEXT: once23 printf(" once\n");24#pragma omp target map(tofrom : m) map(alloc : r, d)25 ;26 // CHECK-NEXT: presence of m, r, d: 0, 0, 027 CHECK_PRESENCE(m, r, d);28 29 // CHECK-NEXT: twice30 printf(" twice\n");31#pragma omp target data map(tofrom : m) map(alloc : r, d)32 {33 // CHECK-NEXT: presence of m, r, d: 1, 1, 134 CHECK_PRESENCE(m, r, d);35#pragma omp target map(tofrom : m) map(alloc : r, d)36 ;37 // CHECK-NEXT: presence of m, r, d: 1, 1, 138 CHECK_PRESENCE(m, r, d);39 }40 // CHECK-NEXT: presence of m, r, d: 0, 0, 041 CHECK_PRESENCE(m, r, d);42 43 // -----------------------------------------------------------------------44 // CHECK: check:{{.*}}45 printf("check: dyn=0, hold>0, dec hold=0\n");46 47 // CHECK-NEXT: once48 printf(" once\n");49#pragma omp target map(ompx_hold, tofrom : m) map(ompx_hold, alloc : r, d)50 ;51 // CHECK-NEXT: presence of m, r, d: 0, 0, 052 CHECK_PRESENCE(m, r, d);53 54 // CHECK-NEXT: twice55 printf(" twice\n");56#pragma omp target data map(ompx_hold, tofrom : m) map(ompx_hold, alloc : r, d)57 {58 // CHECK-NEXT: presence of m, r, d: 1, 1, 159 CHECK_PRESENCE(m, r, d);60#pragma omp target map(ompx_hold, tofrom : m) map(ompx_hold, alloc : r, d)61 ;62 // CHECK-NEXT: presence of m, r, d: 1, 1, 163 CHECK_PRESENCE(m, r, d);64 }65 // CHECK-NEXT: presence of m, r, d: 0, 0, 066 CHECK_PRESENCE(m, r, d);67 68 // -----------------------------------------------------------------------69 // CHECK: check:{{.*}}70 printf("check: dyn>0, hold>0, dec dyn=0, dec hold=0\n");71 72 // CHECK-NEXT: once each73 printf(" once each\n");74#pragma omp target data map(ompx_hold, tofrom : m) map(ompx_hold, alloc : r, d)75 {76 // CHECK-NEXT: presence of m, r, d: 1, 1, 177 CHECK_PRESENCE(m, r, d);78#pragma omp target map(tofrom : m) map(alloc : r, d)79 ;80 // CHECK-NEXT: presence of m, r, d: 1, 1, 181 CHECK_PRESENCE(m, r, d);82 }83 // CHECK-NEXT: presence of m, r, d: 0, 0, 084 CHECK_PRESENCE(m, r, d);85 86 // CHECK-NEXT: twice each87 printf(" twice each\n");88#pragma omp target data map(ompx_hold, tofrom : m) map(ompx_hold, alloc : r, d)89 {90 // CHECK-NEXT: presence of m, r, d: 1, 1, 191 CHECK_PRESENCE(m, r, d);92#pragma omp target data map(ompx_hold, tofrom : m) map(ompx_hold, alloc : r, d)93 {94 // CHECK-NEXT: presence of m, r, d: 1, 1, 195 CHECK_PRESENCE(m, r, d);96#pragma omp target data map(tofrom : m) map(alloc : r, d)97 {98 // CHECK-NEXT: presence of m, r, d: 1, 1, 199 CHECK_PRESENCE(m, r, d);100#pragma omp target map(tofrom : m) map(alloc : r, d)101 ;102 // CHECK-NEXT: presence of m, r, d: 1, 1, 1103 CHECK_PRESENCE(m, r, d);104 }105 // CHECK-NEXT: presence of m, r, d: 1, 1, 1106 CHECK_PRESENCE(m, r, d);107 }108 // CHECK-NEXT: presence of m, r, d: 1, 1, 1109 CHECK_PRESENCE(m, r, d);110 }111 // CHECK-NEXT: presence of m, r, d: 0, 0, 0112 CHECK_PRESENCE(m, r, d);113 114 // -----------------------------------------------------------------------115 // CHECK: check:{{.*}}116 printf("check: dyn>0, hold>0, dec hold=0, dec dyn=0\n");117 118 // CHECK-NEXT: once each119 printf(" once each\n");120#pragma omp target data map(tofrom : m) map(alloc : r, d)121 {122 // CHECK-NEXT: presence of m, r, d: 1, 1, 1123 CHECK_PRESENCE(m, r, d);124#pragma omp target map(ompx_hold, tofrom : m) map(ompx_hold, alloc : r, d)125 ;126 // CHECK-NEXT: presence of m, r, d: 1, 1, 1127 CHECK_PRESENCE(m, r, d);128 }129 // CHECK-NEXT: presence of m, r, d: 0, 0, 0130 CHECK_PRESENCE(m, r, d);131 132 // CHECK-NEXT: twice each133 printf(" twice each\n");134#pragma omp target data map(tofrom : m) map(alloc : r, d)135 {136 // CHECK-NEXT: presence of m, r, d: 1, 1, 1137 CHECK_PRESENCE(m, r, d);138#pragma omp target data map(tofrom : m) map(alloc : r, d)139 {140 // CHECK-NEXT: presence of m, r, d: 1, 1, 1141 CHECK_PRESENCE(m, r, d);142#pragma omp target data map(ompx_hold, tofrom : m) map(ompx_hold, alloc : r, d)143 {144 // CHECK-NEXT: presence of m, r, d: 1, 1, 1145 CHECK_PRESENCE(m, r, d);146#pragma omp target map(ompx_hold, tofrom : m) map(ompx_hold, alloc : r, d)147 ;148 // CHECK-NEXT: presence of m, r, d: 1, 1, 1149 CHECK_PRESENCE(m, r, d);150 }151 // CHECK-NEXT: presence of m, r, d: 1, 1, 1152 CHECK_PRESENCE(m, r, d);153 }154 // CHECK-NEXT: presence of m, r, d: 1, 1, 1155 CHECK_PRESENCE(m, r, d);156 }157 // CHECK-NEXT: presence of m, r, d: 0, 0, 0158 CHECK_PRESENCE(m, r, d);159 160 return 0;161}162