118 lines · cpp
1// expected-no-diagnostics2// RUN: %clang_cc1 -DCK1 -verify -fopenmp -x c++ %s -emit-llvm -o - | FileCheck %s3// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple x86_64-unknown-unknown -emit-llvm %s -o - | FileCheck %s4 5 6#define NNN 507int aaa[NNN];8 9void parallel_loop() {10 #pragma omp parallel11 {12 #pragma omp loop bind(parallel)13 for (int j = 0 ; j < NNN ; j++) {14 aaa[j] = j*NNN;15 }16 }17}18 19void parallel_loop_orphan() {20 #pragma omp loop bind(parallel)21 for (int j = 0 ; j < NNN ; j++) {22 aaa[j] = j*NNN;23 }24}25 26 27void teams_loop() {28 #pragma omp teams29 {30 #pragma omp loop bind(teams)31 for (int j = 0 ; j < NNN ; j++) {32 aaa[j] = j*NNN;33 }34 }35}36 37void thread_loop() {38 #pragma omp parallel39 {40 #pragma omp loop bind(thread)41 for (int j = 0 ; j < NNN ; j++) {42 aaa[j] = j*NNN;43 }44 }45}46 47void thread_loop_orphan() {48 #pragma omp loop bind(thread)49 for (int j = 0 ; j < NNN ; j++) {50 aaa[j] = j*NNN;51 }52}53 54int main() {55 parallel_loop();56 parallel_loop_orphan();57 teams_loop();58 thread_loop();59 thread_loop_orphan();60 61 return 0;62}63// CHECK-LABEL: define {{.+}}parallel_loop{{.+}}64// CHECK: call {{.+}}__kmpc_fork_call({{.+}}parallel_loop{{.+}}.omp_outlined{{.*}})65//66//67// CHECK-LABEL: define {{.+}}parallel_loop{{.+}}.omp_outlined{{.+}}68// CHECK: call {{.+}}__kmpc_for_static_init_469// CHECK: omp.inner.for.body:70// CHECK: omp.loop.exit:71// CHECK-NEXT: call {{.+}}__kmpc_for_static_fini72// CHECK-NEXT: call {{.+}}__kmpc_barrier73//74//75// CHECK-LABEL: define {{.+}}parallel_loop_orphan{{.+}}76// CHECK: [[TMP0:%.*]] = call {{.+}}__kmpc_global_thread_num77// CHECK: call {{.+}}__kmpc_for_static_init_478// CHECK: omp.inner.for.body:79// CHECK: omp.inner.for.end:80// CHECK: omp.loop.exit:81// CHECK-NEXT: call {{.+}}__kmpc_for_static_fini82// CHECK-NEXT: call {{.+}}__kmpc_barrier83//84//85// CHECK-LABEL: define {{.+}}teams_loop{{.+}}86// CHECK: call {{.+}}__kmpc_fork_teams({{.+}}teams_loop{{.+}}.omp_outlined{{.*}})87//88//89// CHECK-LABEL: define {{.+}}teams_loop{{.+}}.omp_outlined{{.+}}90// CHECK: call {{.+}}__kmpc_for_static_init_491// CHECK: omp.inner.for.body:92// CHECK: omp.loop.exit:93// CHECK-NEXT: call {{.+}}__kmpc_for_static_fini94//95//96// CHECK-LABEL: define {{.+}}thread_loop{{.+}}97// CHECK: call {{.+}}__kmpc_fork_call({{.+}}thread_loop{{.+}}.omp_outlined{{.*}})98//99//100// CHECK-LABEL: define {{.+}}thread_loop{{.+}}.omp_outlined{{.+}}101// CHECK: omp.inner.for.body:102// CHECK: omp.inner.for.end:103//104//105// CHECK-LABEL: define {{.+}}thread_loop_orphan{{.+}}106// CHECK: omp.inner.for.cond:107// CHECK: omp.inner.for.body:108// CHECK: omp.inner.for.end:109//110//111// CHECK-LABEL: define {{.+}}main{{.+}}112// CHECK: call {{.+}}parallel_loop{{.+}}()113// CHECK-NEXT: call {{.+}}parallel_loop_orphan{{.+}}()114// CHECK-NEXT: call {{.+}}teams_loop{{.+}}()115// CHECK-NEXT: call {{.+}}thread_loop{{.+}}()116// CHECK-NEXT: call {{.+}}thread_loop_orphan{{.+}}()117//118