@@ -95,6 +95,7 @@ int main() {
95
95
// LAMBDA: [[G_PRIV_VAL:%.+]] = load double, double* [[G_PRIVATE_ADDR]]
96
96
// LAMBDA: fadd double
97
97
// LAMBDA: cmpxchg i64*
98
+ // LAMBDA: call void @__kmpc_end_reduce(
98
99
// LAMBDA: br label %[[REDUCTION_DONE]]
99
100
// LAMBDA: [[REDUCTION_DONE]]
100
101
// LAMBDA: ret void
@@ -154,6 +155,7 @@ int main() {
154
155
// BLOCKS: [[G_PRIV_VAL:%.+]] = load double, double* [[G_PRIVATE_ADDR]]
155
156
// BLOCKS: fadd double
156
157
// BLOCKS: cmpxchg i64*
158
+ // BLOCKS: call void @__kmpc_end_reduce(
157
159
// BLOCKS: br label %[[REDUCTION_DONE]]
158
160
// BLOCKS: [[REDUCTION_DONE]]
159
161
// BLOCKS: ret void
@@ -273,17 +275,15 @@ int main() {
273
275
// var1 = var1.operator &&(var1_reduction);
274
276
// CHECK: [[TO_FLOAT:%.+]] = call float @{{.+}}([[S_FLOAT_TY]]* [[VAR1_REF]])
275
277
// CHECK: [[VAR1_BOOL:%.+]] = fcmp une float [[TO_FLOAT]], 0.0
276
- // CHECK: br i1 [[VAR1_BOOL]], label %[[TRUE:.+]], label %[[FALSE :.+]]
278
+ // CHECK: br i1 [[VAR1_BOOL]], label %[[TRUE:.+]], label %[[END2 :.+]]
277
279
// CHECK: [[TRUE]]
278
280
// CHECK: [[TO_FLOAT:%.+]] = call float @{{.+}}([[S_FLOAT_TY]]* [[VAR1_PRIV]])
279
281
// CHECK: [[VAR1_REDUCTION_BOOL:%.+]] = fcmp une float [[TO_FLOAT]], 0.0
280
- // CHECK: br i1 [[VAR1_REDUCTION_BOOL]], label %[[TRUE2:.+]], label %[[FALSE2:.+]]
281
- // CHECK: [[TRUE2]]
282
- // CHECK: br label %[[END2:.+]]
283
- // CHECK: [[FALSE2]]
284
282
// CHECK: br label %[[END2]]
285
283
// CHECK: [[END2]]
286
- // CHECK: [[COND_LVALUE:%.+]] = phi [[S_FLOAT_TY]]* [ [[VAR1_REF]], %[[TRUE2]] ], [ [[VAR1_PRIV]], %[[FALSE2]] ]
284
+ // CHECK: [[COND_LVALUE:%.+]] = phi i1 [ false, %{{.+}} ], [ [[VAR1_REDUCTION_BOOL]], %[[TRUE]] ]
285
+ // CHECK: [[CONV:%.+]] = uitofp i1 [[COND_LVALUE]] to float
286
+ // CHECK: call void @{{.+}}([[S_FLOAT_TY]]* [[COND_LVALUE:%.+]], float [[CONV]])
287
287
// CHECK: [[BC1:%.+]] = bitcast [[S_FLOAT_TY]]* [[VAR1_REF]] to i8*
288
288
// CHECK: [[BC2:%.+]] = bitcast [[S_FLOAT_TY]]* [[COND_LVALUE]] to i8*
289
289
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[BC1]], i8* [[BC2]], i64 4, i32 4, i1 false)
@@ -292,7 +292,8 @@ int main() {
292
292
// CHECK: [[T_VAR1_VAL:%.+]] = load float, float* [[T_VAR1_REF]],
293
293
// CHECK: [[T_VAR1_PRIV_VAL:%.+]] = load float, float* [[T_VAR1_PRIV]],
294
294
// CHECK: [[CMP:%.+]] = fcmp olt float [[T_VAR1_VAL]], [[T_VAR1_PRIV_VAL]]
295
- // CHECK: [[UP:%.+]] = uitofp i1 [[CMP]] to float
295
+ // CHECK: br i1 [[CMP]]
296
+ // CHECK: [[UP:%.+]] = phi float
296
297
// CHECK: store float [[UP]], float* [[T_VAR1_REF]],
297
298
298
299
// __kmpc_end_reduce(<loc>, <gtid>, &<lock>);
@@ -333,17 +334,15 @@ int main() {
333
334
// CHECK: call void @__kmpc_critical(
334
335
// CHECK: [[TO_FLOAT:%.+]] = call float @{{.+}}([[S_FLOAT_TY]]* [[VAR1_REF]])
335
336
// CHECK: [[VAR1_BOOL:%.+]] = fcmp une float [[TO_FLOAT]], 0.0
336
- // CHECK: br i1 [[VAR1_BOOL]], label %[[TRUE:.+]], label %[[FALSE :.+]]
337
+ // CHECK: br i1 [[VAR1_BOOL]], label %[[TRUE:.+]], label %[[END2 :.+]]
337
338
// CHECK: [[TRUE]]
338
339
// CHECK: [[TO_FLOAT:%.+]] = call float @{{.+}}([[S_FLOAT_TY]]* [[VAR1_PRIV]])
339
340
// CHECK: [[VAR1_REDUCTION_BOOL:%.+]] = fcmp une float [[TO_FLOAT]], 0.0
340
- // CHECK: br i1 [[VAR1_REDUCTION_BOOL]], label %[[TRUE2:.+]], label %[[FALSE2:.+]]
341
- // CHECK: [[TRUE2]]
342
- // CHECK: br label %[[END2:.+]]
343
- // CHECK: [[FALSE2]]
344
341
// CHECK: br label %[[END2]]
345
342
// CHECK: [[END2]]
346
- // CHECK: [[COND_LVALUE:%.+]] = phi [[S_FLOAT_TY]]* [ [[VAR1_REF]], %[[TRUE2]] ], [ [[VAR1_PRIV]], %[[FALSE2]] ]
343
+ // CHECK: [[COND_LVALUE:%.+]] = phi i1 [ false, %{{.+}} ], [ [[VAR1_REDUCTION_BOOL]], %[[TRUE]] ]
344
+ // CHECK: [[CONV:%.+]] = uitofp i1 [[COND_LVALUE]] to float
345
+ // CHECK: call void @{{.+}}([[S_FLOAT_TY]]* [[COND_LVALUE:%.+]], float [[CONV]])
347
346
// CHECK: [[BC1:%.+]] = bitcast [[S_FLOAT_TY]]* [[VAR1_REF]] to i8*
348
347
// CHECK: [[BC2:%.+]] = bitcast [[S_FLOAT_TY]]* [[COND_LVALUE]] to i8*
349
348
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[BC1]], i8* [[BC2]], i64 4, i32 4, i1 false)
@@ -356,9 +355,10 @@ int main() {
356
355
// CHECK: [[OLD1:%.+]] = bitcast i32 %{{.+}} to float
357
356
// CHECK: br label %[[CONT:.+]]
358
357
// CHECK: [[CONT]]
359
- // CHECK: [[ORIG_OLD:%.+]] = phi float [ [[OLD1]], %{{.+}} ], [ [[OLD2:%.+]], %[[CONT]] ]
358
+ // CHECK: [[ORIG_OLD:%.+]] = phi float [ [[OLD1]], %{{.+}} ], [ [[OLD2:%.+]], %{{.+}} ]
360
359
// CHECK: [[CMP:%.+]] = fcmp olt float
361
- // CHECK: [[UP:%.+]] = uitofp i1 [[CMP]] to float
360
+ // CHECK: br i1 [[CMP]]
361
+ // CHECK: [[UP:%.+]] = phi float
362
362
// CHECK: [[ORIG_OLD_INT:%.+]] = bitcast float [[ORIG_OLD]] to i32
363
363
// CHECK: [[UP_INT:%.+]] = bitcast float [[UP]] to i32
364
364
// CHECK: [[T_VAR1_REF_INT:%.+]] = bitcast float* [[T_VAR1_REF]] to i32*
@@ -369,6 +369,9 @@ int main() {
369
369
// CHECK: br i1 [[SUCCESS_FAIL]], label %[[ATOMIC_DONE:.+]], label %[[CONT]]
370
370
// CHECK: [[ATOMIC_DONE]]
371
371
372
+ // __kmpc_end_reduce(<loc>, <gtid>, &<lock>);
373
+ // CHECK: call void @__kmpc_end_reduce(%{{.+}}* [[REDUCTION_LOC]], i32 [[GTID]], [8 x i32]* [[REDUCTION_LOCK]])
374
+
372
375
// break;
373
376
// CHECK: br label %[[RED_DONE]]
374
377
// CHECK: [[RED_DONE]]
@@ -437,17 +440,15 @@ int main() {
437
440
// var1_lhs = var1_lhs.operator &&(var1_rhs);
438
441
// CHECK: [[TO_FLOAT:%.+]] = call float @{{.+}}([[S_FLOAT_TY]]* [[VAR1_LHS]])
439
442
// CHECK: [[VAR1_BOOL:%.+]] = fcmp une float [[TO_FLOAT]], 0.0
440
- // CHECK: br i1 [[VAR1_BOOL]], label %[[TRUE:.+]], label %[[FALSE :.+]]
443
+ // CHECK: br i1 [[VAR1_BOOL]], label %[[TRUE:.+]], label %[[END2 :.+]]
441
444
// CHECK: [[TRUE]]
442
445
// CHECK: [[TO_FLOAT:%.+]] = call float @{{.+}}([[S_FLOAT_TY]]* [[VAR1_RHS]])
443
446
// CHECK: [[VAR1_REDUCTION_BOOL:%.+]] = fcmp une float [[TO_FLOAT]], 0.0
444
- // CHECK: br i1 [[VAR1_REDUCTION_BOOL]], label %[[TRUE2:.+]], label %[[FALSE2:.+]]
445
- // CHECK: [[TRUE2]]
446
- // CHECK: br label %[[END2:.+]]
447
- // CHECK: [[FALSE2]]
448
447
// CHECK: br label %[[END2]]
449
448
// CHECK: [[END2]]
450
- // CHECK: [[COND_LVALUE:%.+]] = phi [[S_FLOAT_TY]]* [ [[VAR1_LHS]], %[[TRUE2]] ], [ [[VAR1_RHS]], %[[FALSE2]] ]
449
+ // CHECK: [[COND_LVALUE:%.+]] = phi i1 [ false, %{{.+}} ], [ [[VAR1_REDUCTION_BOOL]], %[[TRUE]] ]
450
+ // CHECK: [[CONV:%.+]] = uitofp i1 [[COND_LVALUE]] to float
451
+ // CHECK: call void @{{.+}}([[S_FLOAT_TY]]* [[COND_LVALUE:%.+]], float [[CONV]])
451
452
// CHECK: [[BC1:%.+]] = bitcast [[S_FLOAT_TY]]* [[VAR1_LHS]] to i8*
452
453
// CHECK: [[BC2:%.+]] = bitcast [[S_FLOAT_TY]]* [[COND_LVALUE]] to i8*
453
454
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[BC1]], i8* [[BC2]], i64 4, i32 4, i1 false)
@@ -456,7 +457,8 @@ int main() {
456
457
// CHECK: [[T_VAR1_LHS_VAL:%.+]] = load float, float* [[T_VAR1_LHS]],
457
458
// CHECK: [[T_VAR1_RHS_VAL:%.+]] = load float, float* [[T_VAR1_RHS]],
458
459
// CHECK: [[CMP:%.+]] = fcmp olt float [[T_VAR1_LHS_VAL]], [[T_VAR1_RHS_VAL]]
459
- // CHECK: [[UP:%.+]] = uitofp i1 [[CMP]] to float
460
+ // CHECK: br i1 [[CMP]]
461
+ // CHECK: [[UP:%.+]] = phi float
460
462
// CHECK: store float [[UP]], float* [[T_VAR1_LHS]],
461
463
// CHECK: ret void
462
464
@@ -552,17 +554,15 @@ int main() {
552
554
// var1 = var1.operator &&(var1_reduction);
553
555
// CHECK: [[TO_INT:%.+]] = call i{{[0-9]+}} @{{.+}}([[S_INT_TY]]* [[VAR1_REF]])
554
556
// CHECK: [[VAR1_BOOL:%.+]] = icmp ne i{{[0-9]+}} [[TO_INT]], 0
555
- // CHECK: br i1 [[VAR1_BOOL]], label %[[TRUE:.+]], label %[[FALSE :.+]]
557
+ // CHECK: br i1 [[VAR1_BOOL]], label %[[TRUE:.+]], label %[[END2 :.+]]
556
558
// CHECK: [[TRUE]]
557
559
// CHECK: [[TO_INT:%.+]] = call i{{[0-9]+}} @{{.+}}([[S_INT_TY]]* [[VAR1_PRIV]])
558
560
// CHECK: [[VAR1_REDUCTION_BOOL:%.+]] = icmp ne i{{[0-9]+}} [[TO_INT]], 0
559
- // CHECK: br i1 [[VAR1_REDUCTION_BOOL]], label %[[TRUE2:.+]], label %[[FALSE2:.+]]
560
- // CHECK: [[TRUE2]]
561
- // CHECK: br label %[[END2:.+]]
562
- // CHECK: [[FALSE2]]
563
561
// CHECK: br label %[[END2]]
564
562
// CHECK: [[END2]]
565
- // CHECK: [[COND_LVALUE:%.+]] = phi [[S_INT_TY]]* [ [[VAR1_REF]], %[[TRUE2]] ], [ [[VAR1_PRIV]], %[[FALSE2]] ]
563
+ // CHECK: [[COND_LVALUE:%.+]] = phi i1 [ false, %{{.+}} ], [ [[VAR1_REDUCTION_BOOL]], %[[TRUE]] ]
564
+ // CHECK: [[CONV:%.+]] = zext i1 [[COND_LVALUE]] to i32
565
+ // CHECK: call void @{{.+}}([[S_INT_TY]]* [[COND_LVALUE:%.+]], i32 [[CONV]])
566
566
// CHECK: [[BC1:%.+]] = bitcast [[S_INT_TY]]* [[VAR1_REF]] to i8*
567
567
// CHECK: [[BC2:%.+]] = bitcast [[S_INT_TY]]* [[COND_LVALUE]] to i8*
568
568
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[BC1]], i8* [[BC2]], i64 4, i32 4, i1 false)
@@ -571,7 +571,8 @@ int main() {
571
571
// CHECK: [[T_VAR1_VAL:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[T_VAR1_REF]],
572
572
// CHECK: [[T_VAR1_PRIV_VAL:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[T_VAR1_PRIV]],
573
573
// CHECK: [[CMP:%.+]] = icmp slt i{{[0-9]+}} [[T_VAR1_VAL]], [[T_VAR1_PRIV_VAL]]
574
- // CHECK: [[UP:%.+]] = zext i1 [[CMP]] to i{{[0-9]+}}
574
+ // CHECK: br i1 [[CMP]]
575
+ // CHECK: [[UP:%.+]] = phi i32
575
576
// CHECK: store i{{[0-9]+}} [[UP]], i{{[0-9]+}}* [[T_VAR1_REF]],
576
577
577
578
// __kmpc_end_reduce_nowait(<loc>, <gtid>, &<lock>);
@@ -597,17 +598,15 @@ int main() {
597
598
// CHECK: call void @__kmpc_critical(
598
599
// CHECK: [[TO_INT:%.+]] = call i{{[0-9]+}} @{{.+}}([[S_INT_TY]]* [[VAR1_REF]])
599
600
// CHECK: [[VAR1_BOOL:%.+]] = icmp ne i{{[0-9]+}} [[TO_INT]], 0
600
- // CHECK: br i1 [[VAR1_BOOL]], label %[[TRUE:.+]], label %[[FALSE :.+]]
601
+ // CHECK: br i1 [[VAR1_BOOL]], label %[[TRUE:.+]], label %[[END2 :.+]]
601
602
// CHECK: [[TRUE]]
602
603
// CHECK: [[TO_INT:%.+]] = call i{{[0-9]+}} @{{.+}}([[S_INT_TY]]* [[VAR1_PRIV]])
603
604
// CHECK: [[VAR1_REDUCTION_BOOL:%.+]] = icmp ne i{{[0-9]+}} [[TO_INT]], 0
604
- // CHECK: br i1 [[VAR1_REDUCTION_BOOL]], label %[[TRUE2:.+]], label %[[FALSE2:.+]]
605
- // CHECK: [[TRUE2]]
606
- // CHECK: br label %[[END2:.+]]
607
- // CHECK: [[FALSE2]]
608
605
// CHECK: br label %[[END2]]
609
606
// CHECK: [[END2]]
610
- // CHECK: [[COND_LVALUE:%.+]] = phi [[S_INT_TY]]* [ [[VAR1_REF]], %[[TRUE2]] ], [ [[VAR1_PRIV]], %[[FALSE2]] ]
607
+ // CHECK: [[COND_LVALUE:%.+]] = phi i1 [ false, %{{.+}} ], [ [[VAR1_REDUCTION_BOOL]], %[[TRUE]] ]
608
+ // CHECK: [[CONV:%.+]] = zext i1 [[COND_LVALUE]] to i32
609
+ // CHECK: call void @{{.+}}([[S_INT_TY]]* [[COND_LVALUE:%.+]], i32 [[CONV]])
611
610
// CHECK: [[BC1:%.+]] = bitcast [[S_INT_TY]]* [[VAR1_REF]] to i8*
612
611
// CHECK: [[BC2:%.+]] = bitcast [[S_INT_TY]]* [[COND_LVALUE]] to i8*
613
612
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[BC1]], i8* [[BC2]], i64 4, i32 4, i1 false)
@@ -683,17 +682,15 @@ int main() {
683
682
// var1_lhs = var1_lhs.operator &&(var1_rhs);
684
683
// CHECK: [[TO_INT:%.+]] = call i{{[0-9]+}} @{{.+}}([[S_INT_TY]]* [[VAR1_LHS]])
685
684
// CHECK: [[VAR1_BOOL:%.+]] = icmp ne i{{[0-9]+}} [[TO_INT]], 0
686
- // CHECK: br i1 [[VAR1_BOOL]], label %[[TRUE:.+]], label %[[FALSE :.+]]
685
+ // CHECK: br i1 [[VAR1_BOOL]], label %[[TRUE:.+]], label %[[END2 :.+]]
687
686
// CHECK: [[TRUE]]
688
687
// CHECK: [[TO_INT:%.+]] = call i{{[0-9]+}} @{{.+}}([[S_INT_TY]]* [[VAR1_RHS]])
689
688
// CHECK: [[VAR1_REDUCTION_BOOL:%.+]] = icmp ne i{{[0-9]+}} [[TO_INT]], 0
690
- // CHECK: br i1 [[VAR1_REDUCTION_BOOL]], label %[[TRUE2:.+]], label %[[FALSE2:.+]]
691
- // CHECK: [[TRUE2]]
692
- // CHECK: br label %[[END2:.+]]
693
- // CHECK: [[FALSE2]]
694
689
// CHECK: br label %[[END2]]
695
690
// CHECK: [[END2]]
696
- // CHECK: [[COND_LVALUE:%.+]] = phi [[S_INT_TY]]* [ [[VAR1_LHS]], %[[TRUE2]] ], [ [[VAR1_RHS]], %[[FALSE2]] ]
691
+ // CHECK: [[COND_LVALUE:%.+]] = phi i1 [ false, %{{.+}} ], [ [[VAR1_REDUCTION_BOOL]], %[[TRUE]] ]
692
+ // CHECK: [[CONV:%.+]] = zext i1 [[COND_LVALUE]] to i32
693
+ // CHECK: call void @{{.+}}([[S_INT_TY]]* [[COND_LVALUE:%.+]], i32 [[CONV]])
697
694
// CHECK: [[BC1:%.+]] = bitcast [[S_INT_TY]]* [[VAR1_LHS]] to i8*
698
695
// CHECK: [[BC2:%.+]] = bitcast [[S_INT_TY]]* [[COND_LVALUE]] to i8*
699
696
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[BC1]], i8* [[BC2]], i64 4, i32 4, i1 false)
@@ -702,7 +699,8 @@ int main() {
702
699
// CHECK: [[T_VAR1_LHS_VAL:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[T_VAR1_LHS]],
703
700
// CHECK: [[T_VAR1_RHS_VAL:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[T_VAR1_RHS]],
704
701
// CHECK: [[CMP:%.+]] = icmp slt i{{[0-9]+}} [[T_VAR1_LHS_VAL]], [[T_VAR1_RHS_VAL]]
705
- // CHECK: [[UP:%.+]] = zext i1 [[CMP]] to i{{[0-9]+}}
702
+ // CHECK: br i1 [[CMP]]
703
+ // CHECK: [[UP:%.+]] = phi i32
706
704
// CHECK: store i{{[0-9]+}} [[UP]], i{{[0-9]+}}* [[T_VAR1_LHS]],
707
705
// CHECK: ret void
708
706
0 commit comments