@@ -13,14 +13,33 @@ define void @peel_with_guard_known_nonnegative_1(i32 %n) {
13
13
; CHECK-NEXT: [[N_EXT:%.*]] = zext i32 [[N]] to i64
14
14
; CHECK-NEXT: [[N_1:%.*]] = add i32 [[N]], 1
15
15
; CHECK-NEXT: [[WIDE_TRIP_COUNT:%.*]] = zext i32 [[N_1]] to i64
16
+ ; CHECK-NEXT: [[TMP0:%.*]] = add nsw i64 [[WIDE_TRIP_COUNT]], -1
17
+ ; CHECK-NEXT: [[TMP1:%.*]] = icmp ne i64 [[TMP0]], 0
18
+ ; CHECK-NEXT: br i1 [[TMP1]], label %[[PH_SPLIT:.*]], label %[[EXIT_LOOPEXIT_PEEL_BEGIN:.*]]
19
+ ; CHECK: [[PH_SPLIT]]:
16
20
; CHECK-NEXT: br label %[[LOOP:.*]]
17
21
; CHECK: [[LOOP]]:
18
- ; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]
22
+ ; CHECK-NEXT: [[IV1:%.*]] = phi i64 [ 0, %[[PH_SPLIT]] ], [ [[IV_NEXT1:%.*]], %[[LOOP]] ]
23
+ ; CHECK-NEXT: [[IV_NEXT1]] = add nuw nsw i64 [[IV1]], 1
24
+ ; CHECK-NEXT: [[TMP2:%.*]] = sub i64 [[WIDE_TRIP_COUNT]], 1
25
+ ; CHECK-NEXT: [[EC1:%.*]] = icmp eq i64 [[IV_NEXT1]], [[TMP2]]
26
+ ; CHECK-NEXT: br i1 [[EC1]], label %[[EXIT_LOOPEXIT_PEEL_BEGIN_LOOPEXIT:.*]], label %[[LOOP]], !llvm.loop [[LOOP0:![0-9]+]]
27
+ ; CHECK: [[EXIT_LOOPEXIT_PEEL_BEGIN_LOOPEXIT]]:
28
+ ; CHECK-NEXT: [[DOTPH:%.*]] = phi i64 [ [[IV_NEXT1]], %[[LOOP]] ]
29
+ ; CHECK-NEXT: br label %[[EXIT_LOOPEXIT_PEEL_BEGIN]]
30
+ ; CHECK: [[EXIT_LOOPEXIT_PEEL_BEGIN]]:
31
+ ; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[PH]] ], [ [[DOTPH]], %[[EXIT_LOOPEXIT_PEEL_BEGIN_LOOPEXIT]] ]
32
+ ; CHECK-NEXT: br label %[[LOOP_PEEL:.*]]
33
+ ; CHECK: [[LOOP_PEEL]]:
19
34
; CHECK-NEXT: [[C:%.*]] = icmp eq i64 [[IV]], [[N_EXT]]
20
35
; CHECK-NEXT: [[SPEC_SELECT:%.*]] = select i1 [[C]], i32 10, i32 20
21
- ; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1
36
+ ; CHECK-NEXT: [[IV_NEXT:%.* ]] = add i64 [[IV]], 1
22
37
; CHECK-NEXT: [[EC:%.*]] = icmp eq i64 [[IV_NEXT]], [[WIDE_TRIP_COUNT]]
23
- ; CHECK-NEXT: br i1 [[EC]], label %[[EXIT_LOOPEXIT:.*]], label %[[LOOP]]
38
+ ; CHECK-NEXT: br i1 [[EC]], label %[[EXIT_LOOPEXIT_PEEL_NEXT:.*]], label %[[EXIT_LOOPEXIT_PEEL_NEXT]]
39
+ ; CHECK: [[EXIT_LOOPEXIT_PEEL_NEXT]]:
40
+ ; CHECK-NEXT: br label %[[LOOP_PEEL_NEXT:.*]]
41
+ ; CHECK: [[LOOP_PEEL_NEXT]]:
42
+ ; CHECK-NEXT: br label %[[EXIT_LOOPEXIT:.*]]
24
43
; CHECK: [[EXIT_LOOPEXIT]]:
25
44
; CHECK-NEXT: br label %[[EXIT]]
26
45
; CHECK: [[EXIT]]:
@@ -137,7 +156,7 @@ define void @peel_with_guard2(i32 %n) {
137
156
; CHECK-NEXT: [[IV_NEXT]] = add nuw i32 [[IV]], 1
138
157
; CHECK-NEXT: [[TMP2:%.*]] = sub i32 [[N]], 1
139
158
; CHECK-NEXT: [[EC:%.*]] = icmp eq i32 [[IV_NEXT]], [[TMP2]]
140
- ; CHECK-NEXT: br i1 [[EC]], label %[[EXIT_LOOPEXIT_PEEL_BEGIN_LOOPEXIT:.*]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP0 :![0-9]+]]
159
+ ; CHECK-NEXT: br i1 [[EC]], label %[[EXIT_LOOPEXIT_PEEL_BEGIN_LOOPEXIT:.*]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP2 :![0-9]+]]
141
160
; CHECK: [[EXIT_LOOPEXIT_PEEL_BEGIN_LOOPEXIT]]:
142
161
; CHECK-NEXT: [[DOTPH:%.*]] = phi i32 [ [[IV_NEXT]], %[[LOOP_LATCH]] ]
143
162
; CHECK-NEXT: br label %[[EXIT_LOOPEXIT_PEEL_BEGIN]]
@@ -188,4 +207,5 @@ exit:
188
207
;.
189
208
; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]]}
190
209
; CHECK: [[META1]] = !{!"llvm.loop.peeled.count", i32 1}
210
+ ; CHECK: [[LOOP2]] = distinct !{[[LOOP2]], [[META1]]}
191
211
;.
0 commit comments