// expected-no-diagnostics // RUN: %clang_cc1 -DCK1 -verify -fopenmp -x c++ %s -emit-llvm -o - | FileCheck %s // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple x86_64-unknown-unknown -emit-llvm %s -o - | FileCheck %s #define NNN 50 int aaa[NNN]; void parallel_loop() { #pragma omp parallel { #pragma omp loop bind(parallel) for (int j = 0 ; j < NNN ; j++) { aaa[j] = j*NNN; } } } void parallel_loop_orphan() { #pragma omp loop bind(parallel) for (int j = 0 ; j < NNN ; j++) { aaa[j] = j*NNN; } } void teams_loop() { #pragma omp teams { #pragma omp loop bind(teams) for (int j = 0 ; j < NNN ; j++) { aaa[j] = j*NNN; } } } void thread_loop() { #pragma omp parallel { #pragma omp loop bind(thread) for (int j = 0 ; j < NNN ; j++) { aaa[j] = j*NNN; } } } void thread_loop_orphan() { #pragma omp loop bind(thread) for (int j = 0 ; j < NNN ; j++) { aaa[j] = j*NNN; } } int main() { parallel_loop(); parallel_loop_orphan(); teams_loop(); thread_loop(); thread_loop_orphan(); return 0; } // CHECK-LABEL: define {{.+}}parallel_loop{{.+}} // CHECK: call {{.+}}__kmpc_fork_call({{.+}}parallel_loop{{.+}}.omp_outlined{{.*}}) // // // CHECK-LABEL: define {{.+}}parallel_loop{{.+}}.omp_outlined{{.+}} // CHECK: call {{.+}}__kmpc_for_static_init_4 // CHECK: omp.inner.for.body: // CHECK: omp.loop.exit: // CHECK-NEXT: call {{.+}}__kmpc_for_static_fini // CHECK-NEXT: call {{.+}}__kmpc_barrier // // // CHECK-LABEL: define {{.+}}parallel_loop_orphan{{.+}} // CHECK: [[TMP0:%.*]] = call {{.+}}__kmpc_global_thread_num // CHECK: call {{.+}}__kmpc_for_static_init_4 // CHECK: omp.inner.for.body: // CHECK: omp.inner.for.end: // CHECK: omp.loop.exit: // CHECK-NEXT: call {{.+}}__kmpc_for_static_fini // CHECK-NEXT: call {{.+}}__kmpc_barrier // // // CHECK-LABEL: define {{.+}}teams_loop{{.+}} // CHECK: call {{.+}}__kmpc_fork_teams({{.+}}teams_loop{{.+}}.omp_outlined{{.*}}) // // // CHECK-LABEL: define {{.+}}teams_loop{{.+}}.omp_outlined{{.+}} // CHECK: call {{.+}}__kmpc_for_static_init_4 // CHECK: omp.inner.for.body: // CHECK: omp.loop.exit: // CHECK-NEXT: call {{.+}}__kmpc_for_static_fini // // // CHECK-LABEL: define {{.+}}thread_loop{{.+}} // CHECK: call {{.+}}__kmpc_fork_call({{.+}}thread_loop{{.+}}.omp_outlined{{.*}}) // // // CHECK-LABEL: define {{.+}}thread_loop{{.+}}.omp_outlined{{.+}} // CHECK: omp.inner.for.body: // CHECK: omp.inner.for.end: // // // CHECK-LABEL: define {{.+}}thread_loop_orphan{{.+}} // CHECK: omp.inner.for.cond: // CHECK: omp.inner.for.body: // CHECK: omp.inner.for.end: // // // CHECK-LABEL: define {{.+}}main{{.+}} // CHECK: call {{.+}}parallel_loop{{.+}}() // CHECK-NEXT: call {{.+}}parallel_loop_orphan{{.+}}() // CHECK-NEXT: call {{.+}}teams_loop{{.+}}() // CHECK-NEXT: call {{.+}}thread_loop{{.+}}() // CHECK-NEXT: call {{.+}}thread_loop_orphan{{.+}}() //