@@ -148,7 +148,8 @@ define i8 @udiv_umin_extra_use(i8 %x, i8 %y, i8 %z) {
148148; CHECK-NEXT: [[Z2:%.*]] = shl nuw i8 1, [[Z:%.*]]
149149; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[Y2]], i8 [[Z2]])
150150; CHECK-NEXT: call void @use(i8 [[M]])
151- ; CHECK-NEXT: [[D:%.*]] = udiv i8 [[X:%.*]], [[M]]
151+ ; CHECK-NEXT: [[TMP1:%.*]] = call range(i8 0, 9) i8 @llvm.cttz.i8(i8 [[M]], i1 true)
152+ ; CHECK-NEXT: [[D:%.*]] = lshr i8 [[X:%.*]], [[TMP1]]
152153; CHECK-NEXT: ret i8 [[D]]
153154;
154155 %y2 = shl i8 1 , %y
@@ -165,7 +166,8 @@ define i8 @udiv_smin(i8 %x, i8 %y, i8 %z) {
165166; CHECK-NEXT: [[Y2:%.*]] = shl nuw i8 1, [[Y:%.*]]
166167; CHECK-NEXT: [[Z2:%.*]] = shl nuw i8 1, [[Z:%.*]]
167168; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smin.i8(i8 [[Y2]], i8 [[Z2]])
168- ; CHECK-NEXT: [[D:%.*]] = udiv i8 [[X:%.*]], [[M]]
169+ ; CHECK-NEXT: [[TMP1:%.*]] = call range(i8 0, 9) i8 @llvm.cttz.i8(i8 [[M]], i1 true)
170+ ; CHECK-NEXT: [[D:%.*]] = lshr i8 [[X:%.*]], [[TMP1]]
169171; CHECK-NEXT: ret i8 [[D]]
170172;
171173 %y2 = shl i8 1 , %y
@@ -181,7 +183,8 @@ define i8 @udiv_smax(i8 %x, i8 %y, i8 %z) {
181183; CHECK-NEXT: [[Y2:%.*]] = shl nuw i8 1, [[Y:%.*]]
182184; CHECK-NEXT: [[Z2:%.*]] = shl nuw i8 1, [[Z:%.*]]
183185; CHECK-NEXT: [[M:%.*]] = call i8 @llvm.smax.i8(i8 [[Y2]], i8 [[Z2]])
184- ; CHECK-NEXT: [[D:%.*]] = udiv i8 [[X:%.*]], [[M]]
186+ ; CHECK-NEXT: [[TMP1:%.*]] = call range(i8 0, 9) i8 @llvm.cttz.i8(i8 [[M]], i1 true)
187+ ; CHECK-NEXT: [[D:%.*]] = lshr i8 [[X:%.*]], [[TMP1]]
185188; CHECK-NEXT: ret i8 [[D]]
186189;
187190 %y2 = shl i8 1 , %y
@@ -1006,7 +1009,8 @@ define i8 @udiv_fail_shl_overflow(i8 %x, i8 %y) {
10061009; CHECK-LABEL: @udiv_fail_shl_overflow(
10071010; CHECK-NEXT: [[SHL:%.*]] = shl i8 2, [[Y:%.*]]
10081011; CHECK-NEXT: [[MIN:%.*]] = call i8 @llvm.umax.i8(i8 [[SHL]], i8 1)
1009- ; CHECK-NEXT: [[MUL:%.*]] = udiv i8 [[X:%.*]], [[MIN]]
1012+ ; CHECK-NEXT: [[TMP1:%.*]] = call range(i8 0, 9) i8 @llvm.cttz.i8(i8 [[MIN]], i1 true)
1013+ ; CHECK-NEXT: [[MUL:%.*]] = lshr i8 [[X:%.*]], [[TMP1]]
10101014; CHECK-NEXT: ret i8 [[MUL]]
10111015;
10121016 %shl = shl i8 2 , %y
@@ -1302,7 +1306,8 @@ define i8 @udiv_if_power_of_two(i8 %x, i8 %y) {
13021306; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i8 [[TMP0]], 1
13031307; CHECK-NEXT: br i1 [[TMP1]], label [[BB1:%.*]], label [[BB3:%.*]]
13041308; CHECK: bb1:
1305- ; CHECK-NEXT: [[TMP3:%.*]] = udiv i8 [[X:%.*]], [[Y]]
1309+ ; CHECK-NEXT: [[TMP2:%.*]] = call range(i8 0, 9) i8 @llvm.cttz.i8(i8 [[Y]], i1 true)
1310+ ; CHECK-NEXT: [[TMP3:%.*]] = lshr i8 [[X:%.*]], [[TMP2]]
13061311; CHECK-NEXT: br label [[BB3]]
13071312; CHECK: bb3:
13081313; CHECK-NEXT: [[_0_SROA_0_0:%.*]] = phi i8 [ [[TMP3]], [[BB1]] ], [ 0, [[START:%.*]] ]
@@ -1328,7 +1333,8 @@ define i8 @udiv_exact_assume_power_of_two(i8 %x, i8 %y) {
13281333; CHECK-NEXT: [[TMP0:%.*]] = tail call range(i8 1, 9) i8 @llvm.ctpop.i8(i8 [[Y:%.*]])
13291334; CHECK-NEXT: [[COND:%.*]] = icmp eq i8 [[TMP0]], 1
13301335; CHECK-NEXT: tail call void @llvm.assume(i1 [[COND]])
1331- ; CHECK-NEXT: [[_0:%.*]] = udiv exact i8 [[X:%.*]], [[Y]]
1336+ ; CHECK-NEXT: [[TMP1:%.*]] = call range(i8 0, 9) i8 @llvm.cttz.i8(i8 [[Y]], i1 true)
1337+ ; CHECK-NEXT: [[_0:%.*]] = lshr i8 [[X:%.*]], [[TMP1]]
13321338; CHECK-NEXT: ret i8 [[_0]]
13331339;
13341340start:
@@ -1345,7 +1351,8 @@ define i7 @udiv_assume_power_of_two_illegal_type(i7 %x, i7 %y) {
13451351; CHECK-NEXT: [[TMP0:%.*]] = tail call range(i7 1, 8) i7 @llvm.ctpop.i7(i7 [[Y:%.*]])
13461352; CHECK-NEXT: [[COND:%.*]] = icmp eq i7 [[TMP0]], 1
13471353; CHECK-NEXT: tail call void @llvm.assume(i1 [[COND]])
1348- ; CHECK-NEXT: [[_0:%.*]] = udiv i7 [[X:%.*]], [[Y]]
1354+ ; CHECK-NEXT: [[TMP1:%.*]] = call range(i7 0, 8) i7 @llvm.cttz.i7(i7 [[Y]], i1 true)
1355+ ; CHECK-NEXT: [[_0:%.*]] = lshr i7 [[X:%.*]], [[TMP1]]
13491356; CHECK-NEXT: ret i7 [[_0]]
13501357;
13511358start:
@@ -1362,7 +1369,8 @@ define i8 @udiv_assume_power_of_two_multiuse(i8 %x, i8 %y) {
13621369; CHECK-NEXT: [[TMP0:%.*]] = tail call range(i8 1, 9) i8 @llvm.ctpop.i8(i8 [[Y:%.*]])
13631370; CHECK-NEXT: [[COND:%.*]] = icmp eq i8 [[TMP0]], 1
13641371; CHECK-NEXT: tail call void @llvm.assume(i1 [[COND]])
1365- ; CHECK-NEXT: [[_0:%.*]] = udiv i8 [[X:%.*]], [[Y]]
1372+ ; CHECK-NEXT: [[TMP1:%.*]] = call range(i8 0, 9) i8 @llvm.cttz.i8(i8 [[Y]], i1 true)
1373+ ; CHECK-NEXT: [[_0:%.*]] = lshr i8 [[X:%.*]], [[TMP1]]
13661374; CHECK-NEXT: call void @use(i8 [[_0]])
13671375; CHECK-NEXT: ret i8 [[_0]]
13681376;
0 commit comments