@@ -45,11 +45,12 @@ enum omp_allocator_handle_t {
45
45
46
46
struct SS {
47
47
int a;
48
+ char e[4 ];
48
49
int b : 4 ;
49
50
int &c;
50
51
SS (int &d) : a(0 ), b(0 ), c(d) {
51
52
#pragma omp parallel
52
- #pragma omp for lastprivate(a, b, c)
53
+ #pragma omp for firstprivate(e) lastprivate(a, b, c, e )
53
54
for (int i = 0 ; i < 2 ; ++i)
54
55
#ifdef LAMBDA
55
56
[&]() {
@@ -167,9 +168,9 @@ volatile int &g1 = g;
167
168
float f;
168
169
char cnt;
169
170
170
- // CHECK: [[SS_TY:%.+]] = type { i{{[0-9]+}}, i8
171
- // LAMBDA: [[SS_TY:%.+]] = type { i{{[0-9]+}}, i8
172
- // BLOCKS: [[SS_TY:%.+]] = type { i{{[0-9]+}}, i8
171
+ // CHECK: [[SS_TY:%.+]] = type { i{{[0-9]+}}, [4 x i8], i8
172
+ // LAMBDA: [[SS_TY:%.+]] = type { i{{[0-9]+}}, [4 x i8], i8
173
+ // BLOCKS: [[SS_TY:%.+]] = type { i{{[0-9]+}}, [4 x i8], i8
173
174
// CHECK: [[S_FLOAT_TY:%.+]] = type { float }
174
175
// CHECK: [[S_INT_TY:%.+]] = type { i32 }
175
176
// CHECK-DAG: [[IMPLICIT_BARRIER_LOC:@.+]] = private unnamed_addr constant %{{.+}} { i32 0, i32 66, i32 0, i32 0, i8*
@@ -225,9 +226,9 @@ int main() {
225
226
// LAMBDA: define {{.+}} @{{.+}}([[SS_TY]]*
226
227
// LAMBDA: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 0
227
228
// LAMBDA: store i{{[0-9]+}} 0, i{{[0-9]+}}* %
228
- // LAMBDA: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 1
229
- // LAMBDA: store i8
230
229
// LAMBDA: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 2
230
+ // LAMBDA: store i8
231
+ // LAMBDA: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 3
231
232
// LAMBDA: call void (%{{.+}}*, i{{[0-9]+}}, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)*, ...) @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{[0-9]+}} 1, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)* bitcast (void (i{{[0-9]+}}*, i{{[0-9]+}}*, [[SS_TY]]*)* [[SS_MICROTASK:@.+]] to void
232
233
// LAMBDA: call void @__kmpc_for_static_init_4(
233
234
// LAMBDA-NOT: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 0
@@ -237,14 +238,14 @@ int main() {
237
238
238
239
// LAMBDA: define internal void [[SS_MICROTASK]](i{{[0-9]+}}* noalias [[GTID_ADDR:%.+]], i{{[0-9]+}}* noalias %{{.+}}, [[SS_TY]]* %{{.+}})
239
240
// LAMBDA: getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 0
240
- // LAMBDA-NOT: getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 1
241
- // LAMBDA: getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 2
241
+ // LAMBDA-NOT: getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 2
242
+ // LAMBDA: getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 3
242
243
// LAMBDA: call void @__kmpc_for_static_init_4(
243
244
// LAMBDA-NOT: getelementptr {{.*}}[[SS_TY]], [[SS_TY]]*
244
245
// LAMBDA: call{{.*}} void [[SS_LAMBDA:@[^ ]+]]
245
246
// LAMBDA: call void @__kmpc_for_static_fini(
246
247
// LAMBDA: br i1
247
- // LAMBDA: [[B_REF:%.+]] = getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 1
248
+ // LAMBDA: [[B_REF:%.+]] = getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 2
248
249
// LAMBDA: store i8 %{{.+}}, i8* [[B_REF]],
249
250
// LAMBDA: br label
250
251
// LAMBDA: ret void
@@ -420,9 +421,9 @@ int main() {
420
421
// BLOCKS: define {{.+}} @{{.+}}([[SS_TY]]*
421
422
// BLOCKS: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 0
422
423
// BLOCKS: store i{{[0-9]+}} 0, i{{[0-9]+}}* %
423
- // BLOCKS: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 1
424
- // BLOCKS: store i8
425
424
// BLOCKS: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 2
425
+ // BLOCKS: store i8
426
+ // BLOCKS: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 3
426
427
// BLOCKS: call void (%{{.+}}*, i{{[0-9]+}}, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)*, ...) @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{[0-9]+}} 1, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)* bitcast (void (i{{[0-9]+}}*, i{{[0-9]+}}*, [[SS_TY]]*)* [[SS_MICROTASK:@.+]] to void
427
428
// BLOCKS: call void @__kmpc_for_static_init_4(
428
429
// BLOCKS-NOT: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 0
@@ -432,14 +433,14 @@ int main() {
432
433
433
434
// BLOCKS: define internal void [[SS_MICROTASK]](i{{[0-9]+}}* noalias [[GTID_ADDR:%.+]], i{{[0-9]+}}* noalias %{{.+}}, [[SS_TY]]* %{{.+}})
434
435
// BLOCKS: getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 0
435
- // BLOCKS-NOT: getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 1
436
- // BLOCKS: getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 2
436
+ // BLOCKS-NOT: getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 2
437
+ // BLOCKS: getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 3
437
438
// BLOCKS: call void @__kmpc_for_static_init_4(
438
439
// BLOCKS-NOT: getelementptr {{.*}}[[SS_TY]], [[SS_TY]]*
439
440
// BLOCKS: call{{.*}} void
440
441
// BLOCKS: call void @__kmpc_for_static_fini(
441
442
// BLOCKS: br i1
442
- // BLOCKS: [[B_REF:%.+]] = getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 1
443
+ // BLOCKS: [[B_REF:%.+]] = getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 2
443
444
// BLOCKS: store i8 %{{.+}}, i8* [[B_REF]],
444
445
// BLOCKS: br label
445
446
// BLOCKS: ret void
@@ -724,14 +725,14 @@ int main() {
724
725
// CHECK: define {{.+}} @{{.+}}([[SS_TY]]*
725
726
// CHECK: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 0
726
727
// CHECK: store i{{[0-9]+}} 0, i{{[0-9]+}}* %
727
- // CHECK: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 1
728
- // CHECK: store i8
729
728
// CHECK: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 2
729
+ // CHECK: store i8
730
+ // CHECK: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 3
730
731
// CHECK: call void (%{{.+}}*, i{{[0-9]+}}, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)*, ...) @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{[0-9]+}} 1, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)* bitcast (void (i{{[0-9]+}}*, i{{[0-9]+}}*, [[SS_TY]]*)* [[SS_MICROTASK:@.+]] to void
731
732
// CHECK: call void @__kmpc_for_static_init_4(
732
733
// CHECK-NOT: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 0
733
- // CHECK: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 1
734
734
// CHECK: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 2
735
+ // CHECK: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 3
735
736
// CHECK: call void @__kmpc_for_static_fini(%
736
737
// CHECK: ret
737
738
@@ -762,7 +763,7 @@ int main() {
762
763
// CHECK-NEXT: store i{{[0-9]+}} [[DIV]], i{{[0-9]+}}* [[C_PRIV]],
763
764
// CHECK: call void @__kmpc_for_static_fini(
764
765
// CHECK: br i1
765
- // CHECK: [[B_REF:%.+]] = getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 1
766
+ // CHECK: [[B_REF:%.+]] = getelementptr {{.*}}[[SS_TY]], [[SS_TY]]* %{{.*}}, i32 0, i32 2
766
767
// CHECK: store i8 %{{.+}}, i8* [[B_REF]],
767
768
// CHECK: br label
768
769
// CHECK: ret void
0 commit comments