// 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 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 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); // LLVM: .split.iv // LLVM: call void @body #endif