brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 40fd14c Raw
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