blob: 10e3d2cef718b8583ab930227de885bb5a6bbc9b [file] [log] [blame]
// clang-format off
//
// RUN: %libomptarget-compileopt-generic -fopenmp-target-jit
// RUN: env LIBOMPTARGET_JIT_PRE_OPT_IR_MODULE=%t.pre.ll \
// RUN: LIBOMPTARGET_JIT_SKIP_OPT=true \
// RUN: %libomptarget-run-generic
// RUN: %fcheck-plain-generic --input-file %t.pre.ll %s
//
// clang-format on
// UNSUPPORTED: aarch64-unknown-linux-gnu
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
// UNSUPPORTED: x86_64-pc-linux-gnu
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
// UNSUPPORTED: s390x-ibm-linux-gnu
// UNSUPPORTED: s390x-ibm-linux-gnu-LTO
// Ensure that there is only the kernel function left, not any outlined
// parallel regions.
//
// CHECK: define
// CHECK-NOT: define
#include <omp.h>
#include <stdio.h>
void f(long *A, int N) {
long i = 0;
#pragma omp target map(A[ : N])
{
#pragma omp parallel firstprivate(i)
A[omp_get_thread_num()] = i;
#pragma omp parallel firstprivate(i, N)
A[omp_get_thread_num()] += i + N;
}
}
int main() {
long A[1];
f(&A[0], 1);
printf("%li\n", A[0]);
return 0;
}