@@ -403,76 +403,11 @@ for.end:
403
403
ret void
404
404
}
405
405
406
- ; In this case we cannot peel the inner loop, because the condition involves
407
- ; the outer induction variable.
408
- define void @test5 (i32 %k ) {
409
- ; CHECK-LABEL: @test5(
410
- ; CHECK-NEXT: for.body.lr.ph:
411
- ; CHECK-NEXT: br label [[OUTER_HEADER:%.*]]
412
- ; CHECK: outer.header:
413
- ; CHECK-NEXT: [[J:%.*]] = phi i32 [ 0, [[FOR_BODY_LR_PH:%.*]] ], [ [[J_INC:%.*]], [[OUTER_INC:%.*]] ]
414
- ; CHECK-NEXT: br label [[FOR_BODY:%.*]]
415
- ; CHECK: for.body:
416
- ; CHECK-NEXT: [[I_05:%.*]] = phi i32 [ 0, [[OUTER_HEADER]] ], [ [[INC:%.*]], [[FOR_INC:%.*]] ]
417
- ; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i32 [[J]], 2
418
- ; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
419
- ; CHECK: if.then:
420
- ; CHECK-NEXT: call void @f1()
421
- ; CHECK-NEXT: br label [[FOR_INC]]
422
- ; CHECK: if.else:
423
- ; CHECK-NEXT: call void @f2()
424
- ; CHECK-NEXT: br label [[FOR_INC]]
425
- ; CHECK: for.inc:
426
- ; CHECK-NEXT: [[INC]] = add nsw i32 [[I_05]], 1
427
- ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[INC]], [[K:%.*]]
428
- ; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[OUTER_INC]]
429
- ; CHECK: outer.inc:
430
- ; CHECK-NEXT: [[J_INC]] = add nsw i32 [[J]], 1
431
- ; CHECK-NEXT: [[OUTER_CMP:%.*]] = icmp slt i32 [[J_INC]], [[K]]
432
- ; CHECK-NEXT: br i1 [[OUTER_CMP]], label [[OUTER_HEADER]], label [[FOR_END:%.*]]
433
- ; CHECK: for.end:
434
- ; CHECK-NEXT: ret void
435
- ;
436
- for.body.lr.ph:
437
- br label %outer.header
438
-
439
- outer.header:
440
- %j = phi i32 [ 0 , %for.body.lr.ph ], [ %j.inc , %outer.inc ]
441
- br label %for.body
442
-
443
- for.body:
444
- %i.05 = phi i32 [ 0 , %outer.header ], [ %inc , %for.inc ]
445
- %cmp1 = icmp ult i32 %j , 2
446
- br i1 %cmp1 , label %if.then , label %if.else
447
-
448
- if.then:
449
- call void @f1 ()
450
- br label %for.inc
451
-
452
- if.else:
453
- call void @f2 ()
454
- br label %for.inc
455
-
456
- for.inc:
457
- %inc = add nsw i32 %i.05 , 1
458
- %cmp = icmp slt i32 %inc , %k
459
- br i1 %cmp , label %for.body , label %outer.inc
460
-
461
- outer.inc:
462
- %j.inc = add nsw i32 %j , 1
463
- %outer.cmp = icmp slt i32 %j.inc , %k
464
- br i1 %outer.cmp , label %outer.header , label %for.end
465
-
466
-
467
- for.end:
468
- ret void
469
- }
470
-
471
406
; In this test, the condition involves 2 AddRecs. Without evaluating both
472
407
; AddRecs, we cannot prove that the condition becomes known in the loop body
473
408
; after peeling.
474
- define void @test6 (i32 %k ) {
475
- ; CHECK-LABEL: @test6 (
409
+ define void @test5 (i32 %k ) {
410
+ ; CHECK-LABEL: @test5 (
476
411
; CHECK-NEXT: entry:
477
412
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
478
413
; CHECK: for.body:
@@ -521,8 +456,8 @@ for.end:
521
456
ret void
522
457
}
523
458
524
- define void @test7 (i32 %k ) {
525
- ; CHECK-LABEL: @test7 (
459
+ define void @test6 (i32 %k ) {
460
+ ; CHECK-LABEL: @test6 (
526
461
; CHECK-NEXT: for.body.lr.ph:
527
462
; CHECK-NEXT: br label [[FOR_BODY_PEEL_BEGIN:%.*]]
528
463
; CHECK: for.body.peel.begin:
@@ -615,8 +550,8 @@ for.end:
615
550
ret void
616
551
}
617
552
618
- define void @test8 (i32 %k ) {
619
- ; CHECK-LABEL: @test8 (
553
+ define void @test7 (i32 %k ) {
554
+ ; CHECK-LABEL: @test7 (
620
555
; CHECK-NEXT: for.body.lr.ph:
621
556
; CHECK-NEXT: br label [[FOR_BODY_PEEL_BEGIN:%.*]]
622
557
; CHECK: for.body.peel.begin:
@@ -711,8 +646,8 @@ for.end:
711
646
712
647
; Comparison with non-monotonic predicate due to possible wrapping, loop
713
648
; body cannot be simplified.
714
- define void @test9 (i32 %k ) {
715
- ; CHECK-LABEL: @test9 (
649
+ define void @test8 (i32 %k ) {
650
+ ; CHECK-LABEL: @test8 (
716
651
; CHECK-NEXT: for.body.lr.ph:
717
652
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
718
653
; CHECK: for.body:
@@ -751,8 +686,8 @@ for.end:
751
686
}
752
687
; CHECK-NOT: llvm.loop.unroll.disable
753
688
754
- define void @test_10__peel_first_iter_via_slt_pred (i32 %len ) {
755
- ; CHECK-LABEL: @test_10__peel_first_iter_via_slt_pred (
689
+ define void @test_9__peel_first_iter_via_slt_pred (i32 %len ) {
690
+ ; CHECK-LABEL: @test_9__peel_first_iter_via_slt_pred (
756
691
; CHECK-NEXT: entry:
757
692
; CHECK-NEXT: [[CMP5:%.*]] = icmp sgt i32 [[LEN:%.*]], 0
758
693
; CHECK-NEXT: br i1 [[CMP5]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_COND_CLEANUP:%.*]]
@@ -818,8 +753,8 @@ if.end: ; preds = %if.then, %for.body
818
753
br i1 %exitcond , label %for.cond.cleanup , label %for.body
819
754
}
820
755
821
- define void @test_11__peel_first_iter_via_sgt_pred (i32 %len ) {
822
- ; CHECK-LABEL: @test_11__peel_first_iter_via_sgt_pred (
756
+ define void @test_10__peel_first_iter_via_sgt_pred (i32 %len ) {
757
+ ; CHECK-LABEL: @test_10__peel_first_iter_via_sgt_pred (
823
758
; CHECK-NEXT: entry:
824
759
; CHECK-NEXT: [[CMP5:%.*]] = icmp sgt i32 [[LEN:%.*]], 0
825
760
; CHECK-NEXT: br i1 [[CMP5]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_COND_CLEANUP:%.*]]
@@ -887,8 +822,8 @@ if.end: ; preds = %if.then, %for.body
887
822
888
823
; NOTE: here we should only peel the first iteration,
889
824
; i.e. all calls to sink() must stay in loop.
890
- define void @test12__peel_first_iter_via_eq_pred (i32 %len ) {
891
- ; CHECK-LABEL: @test12__peel_first_iter_via_eq_pred (
825
+ define void @test11__peel_first_iter_via_eq_pred (i32 %len ) {
826
+ ; CHECK-LABEL: @test11__peel_first_iter_via_eq_pred (
892
827
; CHECK-NEXT: entry:
893
828
; CHECK-NEXT: [[CMP5:%.*]] = icmp sgt i32 [[LEN:%.*]], 0
894
829
; CHECK-NEXT: br i1 [[CMP5]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_COND_CLEANUP:%.*]]
@@ -956,8 +891,8 @@ if.end: ; preds = %if.then, %for.body
956
891
957
892
; NOTE: here we should only peel the first iteration,
958
893
; i.e. all calls to sink() must stay in loop.
959
- define void @test13__peel_first_iter_via_ne_pred (i32 %len ) {
960
- ; CHECK-LABEL: @test13__peel_first_iter_via_ne_pred (
894
+ define void @test12__peel_first_iter_via_ne_pred (i32 %len ) {
895
+ ; CHECK-LABEL: @test12__peel_first_iter_via_ne_pred (
961
896
; CHECK-NEXT: entry:
962
897
; CHECK-NEXT: [[CMP5:%.*]] = icmp sgt i32 [[LEN:%.*]], 0
963
898
; CHECK-NEXT: br i1 [[CMP5]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_COND_CLEANUP:%.*]]
@@ -1024,8 +959,8 @@ if.end: ; preds = %if.then, %for.body
1024
959
}
1025
960
1026
961
; No peeling is profitable here.
1027
- define void @test14__ivar_mod2_is_1 (i32 %len ) {
1028
- ; CHECK-LABEL: @test14__ivar_mod2_is_1 (
962
+ define void @test13__ivar_mod2_is_1 (i32 %len ) {
963
+ ; CHECK-LABEL: @test13__ivar_mod2_is_1 (
1029
964
; CHECK-NEXT: entry:
1030
965
; CHECK-NEXT: [[CMP5:%.*]] = icmp sgt i32 [[LEN:%.*]], 0
1031
966
; CHECK-NEXT: br i1 [[CMP5]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_COND_CLEANUP:%.*]]
@@ -1074,8 +1009,8 @@ if.end: ; preds = %if.then, %for.body
1074
1009
}
1075
1010
1076
1011
; No peeling is profitable here.
1077
- define void @test15__ivar_mod2_is_0 (i32 %len ) {
1078
- ; CHECK-LABEL: @test15__ivar_mod2_is_0 (
1012
+ define void @test14__ivar_mod2_is_0 (i32 %len ) {
1013
+ ; CHECK-LABEL: @test14__ivar_mod2_is_0 (
1079
1014
; CHECK-NEXT: entry:
1080
1015
; CHECK-NEXT: [[CMP5:%.*]] = icmp sgt i32 [[LEN:%.*]], 0
1081
1016
; CHECK-NEXT: br i1 [[CMP5]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_COND_CLEANUP:%.*]]
@@ -1123,10 +1058,10 @@ if.end: ; preds = %if.then, %for.body
1123
1058
br i1 %exitcond , label %for.cond.cleanup , label %for.body
1124
1059
}
1125
1060
1126
- ; Similar to @test7 , we need to peel one extra iteration, and we can't do that
1061
+ ; Similar to @test6 , we need to peel one extra iteration, and we can't do that
1127
1062
; as per the -unroll-peel-max-count=4, so this shouldn't be peeled at all.
1128
- define void @test16 (i32 %k ) {
1129
- ; CHECK-LABEL: @test16 (
1063
+ define void @test15 (i32 %k ) {
1064
+ ; CHECK-LABEL: @test15 (
1130
1065
; CHECK-NEXT: for.body.lr.ph:
1131
1066
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
1132
1067
; CHECK: for.body:
@@ -1164,10 +1099,10 @@ for.end:
1164
1099
ret void
1165
1100
}
1166
1101
1167
- ; Similar to @test8 , we need to peel one extra iteration, and we can't do that
1102
+ ; Similar to @test7 , we need to peel one extra iteration, and we can't do that
1168
1103
; as per the -unroll-peel-max-count=4, so this shouldn't be peeled at all.
1169
- define void @test17 (i32 %k ) {
1170
- ; CHECK-LABEL: @test17 (
1104
+ define void @test16 (i32 %k ) {
1105
+ ; CHECK-LABEL: @test16 (
1171
1106
; CHECK-NEXT: for.body.lr.ph:
1172
1107
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
1173
1108
; CHECK: for.body:
0 commit comments