|
| 1 | +// RUN: %clang_cc1 -verify -x c -triple x86_64-unknown-linux-gnu -fopenmp -fopenmp-version=52 -emit-llvm -o - %s | FileCheck %s |
| 2 | +// expected-no-diagnostics |
| 3 | + |
| 4 | +#define N 100 |
| 5 | +int A[N]; |
| 6 | + |
| 7 | +void condlastprivate() { |
| 8 | + int x, y, z, k; |
| 9 | + x = y = z = k = 0; |
| 10 | + |
| 11 | + #pragma omp parallel for lastprivate(conditional: x,y,z) lastprivate(k) |
| 12 | + for (k = 0; k < N; k++) { |
| 13 | + if ((k > 2) && (k < 6)) { |
| 14 | + x = A[k]; |
| 15 | + z = A[k] + 111; |
| 16 | + } else { |
| 17 | + y = A[k] + 222; |
| 18 | + } |
| 19 | + } |
| 20 | +} |
| 21 | + |
| 22 | +int main() { |
| 23 | + for (int i = 0; i < N; i++) |
| 24 | + A[i] = i; |
| 25 | + condlastprivate(); |
| 26 | + return 0; |
| 27 | +} |
| 28 | + |
| 29 | +// CHECK: @.pl_cond.x_[[ID:[0-9]+]].iv = common global i32 0, align 4 |
| 30 | +// CHECK: @pl_cond.x_[[ID]] = common global i32 0, align 4 |
| 31 | +// CHECK: @.gomp_critical_user_pl_cond.x_[[ID]].var = common global [8 x i32] zeroinitializer, align 8 |
| 32 | + |
| 33 | +// CHECK: @.pl_cond.z_[[ID]].iv = common global i32 0, align 4 |
| 34 | +// CHECK: @pl_cond.z_[[ID]] = common global i32 0, align 4 |
| 35 | +// CHECK: @.gomp_critical_user_pl_cond.z_[[ID]].var = common global [8 x i32] zeroinitializer, align 8 |
| 36 | + |
| 37 | +// CHECK: @.pl_cond.y_[[ID]].iv = common global i32 0, align 4 |
| 38 | +// CHECK: @pl_cond.y_[[ID]] = common global i32 0, align 4 |
| 39 | +// CHECK: @.gomp_critical_user_pl_cond.y_[[ID]].var = common global [8 x i32] zeroinitializer, align 8 |
| 40 | + |
| 41 | +// CHECK-LABEL: define internal void @condlastprivate.omp_outlined( |
| 42 | +// CHECK: call void @__kmpc_critical(ptr @2, {{.*}}, ptr @.gomp_critical_user_pl_cond.x_[[ID]].var) |
| 43 | +// CHECK: store i32 %{{[0-9]+}}, ptr @pl_cond.x_[[ID]], align 4 |
| 44 | +// CHECK: call void @__kmpc_end_critical(ptr @2, {{.*}}, ptr @.gomp_critical_user_pl_cond.x_[[ID]].var) |
| 45 | + |
| 46 | +// CHECK: call void @__kmpc_critical(ptr @2, {{.*}}, ptr @.gomp_critical_user_pl_cond.z_[[ID]].var) |
| 47 | +// CHECK: store i32 %{{[0-9]+}}, ptr @pl_cond.z_[[ID]], align 4 |
| 48 | +// CHECK: call void @__kmpc_end_critical(ptr @2, {{.*}}, ptr @.gomp_critical_user_pl_cond.z_[[ID]].var) |
| 49 | + |
| 50 | +// CHECK: call void @__kmpc_critical(ptr @2, {{.*}}, ptr @.gomp_critical_user_pl_cond.y_[[ID]].var) |
| 51 | +// CHECK: store i32 %{{[0-9]+}}, ptr @pl_cond.y_[[ID]], align 4 |
| 52 | +// CHECK: call void @__kmpc_end_critical(ptr @2, {{.*}}, ptr @.gomp_critical_user_pl_cond.y_[[ID]].var) |
| 53 | + |
0 commit comments