| // Dependent template defers transformation; explicit instantiation emits IR. |
| // |
| // RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -x c++ -std=c++17 -fopenmp -fopenmp-version=60 -ast-dump -DTEST_DEP %s | FileCheck %s --check-prefix=DEP |
| // RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -x c++ -std=c++17 -fopenmp -fopenmp-version=60 -O0 -emit-llvm -DTEST_INST %s -o - | FileCheck %s --check-prefix=LLVM |
| |
| extern "C" void body(int); |
| |
| #if defined(TEST_DEP) |
| template <typename T> |
| void dep_split(T n) { |
| #pragma omp split counts(2, omp_fill) |
| for (T i = 0; i < n; ++i) |
| body((int)i); |
| } |
| // DEP-LABEL: dep_split |
| // DEP: OMPSplitDirective |
| // DEP: ForStmt |
| #endif |
| |
| #if defined(TEST_INST) |
| template <typename T> |
| void dep_split(T n) { |
| #pragma omp split counts(2, omp_fill) |
| for (T i = 0; i < n; ++i) |
| body((int)i); |
| } |
| template void dep_split<int>(int); |
| // LLVM: .split.iv |
| // LLVM: call void @body |
| #endif |