@@ -41,16 +41,27 @@ define i32 @smin_unit_step() {
41
41
; CHECK-NEXT: [[ENTRY:.*]]:
42
42
; CHECK-NEXT: br label %[[LOOP:.*]]
43
43
; CHECK: [[LOOP]]:
44
- ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]
44
+ ; CHECK-NEXT: [[IV1:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[IV_NEXT1:%.*]], %[[LOOP]] ]
45
+ ; CHECK-NEXT: call void @foo(i32 1)
46
+ ; CHECK-NEXT: [[IV_NEXT1]] = add nuw nsw i32 [[IV1]], 1
47
+ ; CHECK-NEXT: [[EC:%.*]] = icmp ne i32 [[IV_NEXT1]], 1023
48
+ ; CHECK-NEXT: br i1 [[EC]], label %[[LOOP]], label %[[EXIT_PEEL_BEGIN:.*]], !llvm.loop [[LOOP0:![0-9]+]]
49
+ ; CHECK: [[EXIT_PEEL_BEGIN]]:
50
+ ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ [[IV_NEXT1]], %[[LOOP]] ]
51
+ ; CHECK-NEXT: br label %[[LOOP_PEEL:.*]]
52
+ ; CHECK: [[LOOP_PEEL]]:
45
53
; CHECK-NEXT: [[SUB:%.*]] = sub i32 1024, [[IV]]
46
54
; CHECK-NEXT: [[MINMAX:%.*]] = call i32 @llvm.smin.i32(i32 [[SUB]], i32 1)
47
55
; CHECK-NEXT: call void @foo(i32 [[MINMAX]])
48
- ; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
56
+ ; CHECK-NEXT: [[IV_NEXT:%.* ]] = add nuw nsw i32 [[IV]], 1
49
57
; CHECK-NEXT: [[EC_PEEL:%.*]] = icmp ne i32 [[IV_NEXT]], 1024
50
- ; CHECK-NEXT: br i1 [[EC_PEEL]], label %[[LOOP]], label %[[EXIT:.*]]
58
+ ; CHECK-NEXT: br i1 [[EC_PEEL]], label %[[EXIT_PEEL_NEXT:.*]], label %[[EXIT_PEEL_NEXT]]
59
+ ; CHECK: [[EXIT_PEEL_NEXT]]:
60
+ ; CHECK-NEXT: br label %[[LOOP_PEEL_NEXT:.*]]
61
+ ; CHECK: [[LOOP_PEEL_NEXT]]:
62
+ ; CHECK-NEXT: br label %[[EXIT:.*]]
51
63
; CHECK: [[EXIT]]:
52
- ; CHECK-NEXT: [[MINMAX_LCSSA:%.*]] = phi i32 [ [[MINMAX]], %[[LOOP]] ]
53
- ; CHECK-NEXT: ret i32 [[MINMAX_LCSSA]]
64
+ ; CHECK-NEXT: ret i32 [[MINMAX]]
54
65
;
55
66
entry:
56
67
br label %loop
@@ -74,16 +85,28 @@ define i32 @smax_unit_step() {
74
85
; CHECK-NEXT: [[ENTRY:.*]]:
75
86
; CHECK-NEXT: br label %[[LOOP:.*]]
76
87
; CHECK: [[LOOP]]:
77
- ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]
88
+ ; CHECK-NEXT: [[IV1:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[IV_NEXT1:%.*]], %[[LOOP]] ]
89
+ ; CHECK-NEXT: [[SUB1:%.*]] = sub nuw nsw i32 1024, [[IV1]]
90
+ ; CHECK-NEXT: call void @foo(i32 [[SUB1]])
91
+ ; CHECK-NEXT: [[IV_NEXT1]] = add nuw nsw i32 [[IV1]], 1
92
+ ; CHECK-NEXT: [[EC:%.*]] = icmp ne i32 [[IV_NEXT1]], 1023
93
+ ; CHECK-NEXT: br i1 [[EC]], label %[[LOOP]], label %[[EXIT_PEEL_BEGIN:.*]], !llvm.loop [[LOOP2:![0-9]+]]
94
+ ; CHECK: [[EXIT_PEEL_BEGIN]]:
95
+ ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ [[IV_NEXT1]], %[[LOOP]] ]
96
+ ; CHECK-NEXT: br label %[[LOOP_PEEL:.*]]
97
+ ; CHECK: [[LOOP_PEEL]]:
78
98
; CHECK-NEXT: [[SUB:%.*]] = sub i32 1024, [[IV]]
79
99
; CHECK-NEXT: [[MINMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[SUB]], i32 1)
80
100
; CHECK-NEXT: call void @foo(i32 [[MINMAX]])
81
- ; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
101
+ ; CHECK-NEXT: [[IV_NEXT:%.* ]] = add nuw nsw i32 [[IV]], 1
82
102
; CHECK-NEXT: [[EC_PEEL:%.*]] = icmp ne i32 [[IV_NEXT]], 1024
83
- ; CHECK-NEXT: br i1 [[EC_PEEL]], label %[[LOOP]], label %[[EXIT:.*]]
103
+ ; CHECK-NEXT: br i1 [[EC_PEEL]], label %[[EXIT_PEEL_NEXT:.*]], label %[[EXIT_PEEL_NEXT]]
104
+ ; CHECK: [[EXIT_PEEL_NEXT]]:
105
+ ; CHECK-NEXT: br label %[[LOOP_PEEL_NEXT:.*]]
106
+ ; CHECK: [[LOOP_PEEL_NEXT]]:
107
+ ; CHECK-NEXT: br label %[[EXIT:.*]]
84
108
; CHECK: [[EXIT]]:
85
- ; CHECK-NEXT: [[MINMAX_LCSSA:%.*]] = phi i32 [ [[MINMAX]], %[[LOOP]] ]
86
- ; CHECK-NEXT: ret i32 [[MINMAX_LCSSA]]
109
+ ; CHECK-NEXT: ret i32 [[MINMAX]]
87
110
;
88
111
entry:
89
112
br label %loop
@@ -135,3 +158,8 @@ exit:
135
158
ret i32 %minmax.lcssa
136
159
}
137
160
161
+ ;.
162
+ ; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]]}
163
+ ; CHECK: [[META1]] = !{!"llvm.loop.peeled.count", i32 1}
164
+ ; CHECK: [[LOOP2]] = distinct !{[[LOOP2]], [[META1]]}
165
+ ;.
0 commit comments