llvm-project/clang/test/OpenMP/split_offload_codegen.cpp
Amit Tiwari 1972cf64fd
[Clang][OpenMP] Implement Loop splitting #pragma omp split directive (#183261)
OpenMP 6.0 Loop-splitting directive `#pragma omp split` construct with `counts`
clause
2026-04-03 10:42:31 +05:30

28 lines
1.1 KiB
C++

// Split inside `#pragma omp target` — host and device IR show `.split.iv`.
//
// RUN: %clang_cc1 -DCK_SPLIT -verify -fopenmp -fopenmp-version=60 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -o - 2>&1 | FileCheck -check-prefix=HOST %s
// RUN: %clang_cc1 -DCK_SPLIT -verify -fopenmp -fopenmp-version=60 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o %t-split-host.bc
// RUN: %clang_cc1 -DCK_SPLIT -verify -fopenmp -fopenmp-version=60 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-split-host.bc -o - 2>&1 | FileCheck -check-prefix=DEVICE %s
// expected-no-diagnostics
#ifdef CK_SPLIT
extern "C" void body(int);
void host_split_in_target(int n) {
#pragma omp target map(to : n)
{
#pragma omp split counts(2, omp_fill)
for (int i = 0; i < n; ++i)
body(i);
}
}
// HOST: define {{.*}}void {{.*}}host_split_in_target
// HOST: .split.iv
// HOST: __tgt_target_kernel
// DEVICE: define {{.*}}void @__omp_offloading_
// DEVICE: .split.iv
#endif