@@ -41,16 +41,27 @@ define i32 @smin_unit_step() {
4141; CHECK-NEXT: [[ENTRY:.*]]:
4242; CHECK-NEXT: br label %[[LOOP:.*]]
4343; 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]]:
4553; CHECK-NEXT: [[SUB:%.*]] = sub i32 1024, [[IV]]
4654; CHECK-NEXT: [[MINMAX:%.*]] = call i32 @llvm.smin.i32(i32 [[SUB]], i32 1)
4755; 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
4957; 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:.*]]
5163; CHECK: [[EXIT]]:
52- ; CHECK-NEXT: [[MINMAX_LCSSA:%.*]] = phi i32 [ [[MINMAX]], %[[LOOP]] ]
53- ; CHECK-NEXT: ret i32 [[MINMAX_LCSSA]]
64+ ; CHECK-NEXT: ret i32 [[MINMAX]]
5465;
5566entry:
5667 br label %loop
@@ -74,16 +85,28 @@ define i32 @smax_unit_step() {
7485; CHECK-NEXT: [[ENTRY:.*]]:
7586; CHECK-NEXT: br label %[[LOOP:.*]]
7687; 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]]:
7898; CHECK-NEXT: [[SUB:%.*]] = sub i32 1024, [[IV]]
7999; CHECK-NEXT: [[MINMAX:%.*]] = call i32 @llvm.smax.i32(i32 [[SUB]], i32 1)
80100; 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
82102; 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:.*]]
84108; CHECK: [[EXIT]]:
85- ; CHECK-NEXT: [[MINMAX_LCSSA:%.*]] = phi i32 [ [[MINMAX]], %[[LOOP]] ]
86- ; CHECK-NEXT: ret i32 [[MINMAX_LCSSA]]
109+ ; CHECK-NEXT: ret i32 [[MINMAX]]
87110;
88111entry:
89112 br label %loop
@@ -135,3 +158,8 @@ exit:
135158 ret i32 %minmax.lcssa
136159}
137160
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