| // 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{{.+}}() |
| // |