Skip to content

Commit

Permalink
[Libomptarget] Correctly default to Generic if exec_mode is not present
Browse files Browse the repository at this point in the history
Currently, the runtime returns an error when the `exec_mode` global is
not present. The expected behvaiour is that the region will default to
Generic. This prevents global constructors from being called because
they do not contain execution mode globals.

Reviewed By: jdoerfert

Differential Revision: https://reviews.llvm.org/D108255
  • Loading branch information
jhuber6 committed Aug 18, 2021
1 parent 1ffbe8c commit edb8acd
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 4 deletions.
7 changes: 3 additions & 4 deletions openmp/libomptarget/plugins/cuda/src/rtl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -829,10 +829,9 @@ class DeviceRTLTy {
return nullptr;
}
} else {
REPORT("Loading global exec_mode '%s' - symbol missing, using default "
"value GENERIC (1)\n",
ExecModeName);
CUDA_ERR_STRING(Err);
DP("Loading global exec_mode '%s' - symbol missing, using default "
"value GENERIC (1)\n",
ExecModeName);
}

KernelsList.emplace_back(Func, ExecModeVal);
Expand Down
19 changes: 19 additions & 0 deletions openmp/libomptarget/test/offloading/global_constructor.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// RUN: %libomptarget-compilexx-generic && %libomptarget-run-generic | %fcheck-generic

#include <cmath>
#include <cstdio>

const double Host = log(2.0) / log(2.0);
#pragma omp declare target
const double Device = log(2.0) / log(2.0);
#pragma omp end declare target

int main() {
double X;
#pragma omp target map(from : X)
{ X = Device; }

// CHECK: PASS
if (X == Host)
printf("PASS\n");
}

0 comments on commit edb8acd

Please sign in to comment.