Joseph Huber ae23be84cb [OpenMP] Make the new offloading driver the default
Previously an opt-in flag `-fopenmp-new-driver` was used to enable the
new offloading driver. After passing tests for a few months it should be
sufficiently mature to flip the switch and make it the default. The new
offloading driver is now enabled if there is OpenMP and OpenMP
offloading present and the new `-fno-openmp-new-driver` is not present.

The new offloading driver has three main benefits over the old method:
- Static library support
- Device-side LTO
- Unified clang driver stages

Depends on D122683

Differential Revision: https://reviews.llvm.org/D122831
2022-04-18 15:05:09 -04:00

54 lines
1.1 KiB
C++

// RUN: %libomptarget-compilexx-run-and-check-generic
// Error on the gpu that crashes the host
// UNSUPPORTED: amdgcn-amd-amdhsa
// UNSUPPORTED: amdgcn-amd-amdhsa-oldDriver
#include <iostream>
template <typename LOOP_BODY>
inline void forall(int Begin, int End, LOOP_BODY LoopBody) {
#pragma omp target parallel for schedule(static)
for (int I = Begin; I < End; ++I) {
LoopBody(I);
}
}
#define N (1000)
//
// Demonstration of the RAJA abstraction using lambdas
// Requires data mapping onto the target section
//
int main() {
double A[N], B[N], C[N];
for (int I = 0; I < N; I++) {
A[I] = I + 1;
B[I] = -I;
C[I] = -9;
}
#pragma omp target data map(tofrom : C [0:N]) map(to : A [0:N], B [0:N])
{
forall(0, N, [&](int I) { C[I] += A[I] + B[I]; });
}
int Fail = 0;
for (int I = 0; I < N; I++) {
if (C[I] != -8) {
std::cout << "Failed at " << I << " with val " << C[I] << std::endl;
Fail = 1;
}
}
// CHECK: Succeeded
if (Fail) {
std::cout << "Failed" << std::endl;
} else {
std::cout << "Succeeded" << std::endl;
}
return 0;
}