Skip to content

Commit 72b6b01

Browse files
Add Test
1 parent 799955e commit 72b6b01

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed

llvm/test/Transforms/InstCombine/div-shift.ll

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1294,3 +1294,100 @@ entry:
12941294
%div = sdiv i32 %add, %add2
12951295
ret i32 %div
12961296
}
1297+
1298+
define i8 @udiv_if_power_of_two(i8 %x, i8 %y) {
1299+
; CHECK-LABEL: @udiv_if_power_of_two(
1300+
; CHECK-NEXT: start:
1301+
; CHECK-NEXT: [[TMP0:%.*]] = tail call range(i8 0, 9) i8 @llvm.ctpop.i8(i8 [[Y:%.*]])
1302+
; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i8 [[TMP0]], 1
1303+
; CHECK-NEXT: br i1 [[TMP1]], label [[BB1:%.*]], label [[BB3:%.*]]
1304+
; CHECK: bb1:
1305+
; CHECK-NEXT: [[TMP3:%.*]] = udiv i8 [[X:%.*]], [[Y]]
1306+
; CHECK-NEXT: br label [[BB3]]
1307+
; CHECK: bb3:
1308+
; CHECK-NEXT: [[_0_SROA_0_0:%.*]] = phi i8 [ [[TMP3]], [[BB1]] ], [ 0, [[START:%.*]] ]
1309+
; CHECK-NEXT: ret i8 [[_0_SROA_0_0]]
1310+
;
1311+
start:
1312+
%ctpop = tail call i8 @llvm.ctpop.i8(i8 %y)
1313+
%cmp = icmp eq i8 %ctpop, 1
1314+
br i1 %cmp, label %bb1, label %bb3
1315+
1316+
bb1:
1317+
%div = udiv i8 %x, %y
1318+
br label %bb3
1319+
1320+
bb3:
1321+
%result = phi i8 [ %div, %bb1 ], [ 0, %start ]
1322+
ret i8 %result
1323+
}
1324+
1325+
define i8 @udiv_exact_assume_power_of_two(i8 %x, i8 %y) {
1326+
; CHECK-LABEL: @udiv_exact_assume_power_of_two(
1327+
; CHECK-NEXT: start:
1328+
; CHECK-NEXT: [[TMP0:%.*]] = tail call range(i8 1, 9) i8 @llvm.ctpop.i8(i8 [[Y:%.*]])
1329+
; CHECK-NEXT: [[COND:%.*]] = icmp eq i8 [[TMP0]], 1
1330+
; CHECK-NEXT: tail call void @llvm.assume(i1 [[COND]])
1331+
; CHECK-NEXT: [[_0:%.*]] = udiv exact i8 [[X:%.*]], [[Y]]
1332+
; CHECK-NEXT: ret i8 [[_0]]
1333+
;
1334+
start:
1335+
%ctpop = tail call i8 @llvm.ctpop.i8(i8 %y)
1336+
%cond = icmp eq i8 %ctpop, 1
1337+
tail call void @llvm.assume(i1 %cond)
1338+
%div = udiv exact i8 %x, %y
1339+
ret i8 %div
1340+
}
1341+
1342+
define i7 @udiv_assume_power_of_two_illegal_type(i7 %x, i7 %y) {
1343+
; CHECK-LABEL: @udiv_assume_power_of_two_illegal_type(
1344+
; CHECK-NEXT: start:
1345+
; CHECK-NEXT: [[TMP0:%.*]] = tail call range(i7 1, 8) i7 @llvm.ctpop.i7(i7 [[Y:%.*]])
1346+
; CHECK-NEXT: [[COND:%.*]] = icmp eq i7 [[TMP0]], 1
1347+
; CHECK-NEXT: tail call void @llvm.assume(i1 [[COND]])
1348+
; CHECK-NEXT: [[_0:%.*]] = udiv i7 [[X:%.*]], [[Y]]
1349+
; CHECK-NEXT: ret i7 [[_0]]
1350+
;
1351+
start:
1352+
%ctpop = tail call i7 @llvm.ctpop.i7(i7 %y)
1353+
%cond = icmp eq i7 %ctpop, 1
1354+
tail call void @llvm.assume(i1 %cond)
1355+
%div = udiv i7 %x, %y
1356+
ret i7 %div
1357+
}
1358+
1359+
define i8 @udiv_assume_power_of_two_multiuse(i8 %x, i8 %y) {
1360+
; CHECK-LABEL: @udiv_assume_power_of_two_multiuse(
1361+
; CHECK-NEXT: start:
1362+
; CHECK-NEXT: [[TMP0:%.*]] = tail call range(i8 1, 9) i8 @llvm.ctpop.i8(i8 [[Y:%.*]])
1363+
; CHECK-NEXT: [[COND:%.*]] = icmp eq i8 [[TMP0]], 1
1364+
; CHECK-NEXT: tail call void @llvm.assume(i1 [[COND]])
1365+
; CHECK-NEXT: [[_0:%.*]] = udiv i8 [[X:%.*]], [[Y]]
1366+
; CHECK-NEXT: call void @use(i8 [[_0]])
1367+
; CHECK-NEXT: ret i8 [[_0]]
1368+
;
1369+
start:
1370+
%ctpop = tail call i8 @llvm.ctpop.i8(i8 %y)
1371+
%cond = icmp eq i8 %ctpop, 1
1372+
tail call void @llvm.assume(i1 %cond)
1373+
%div = udiv i8 %x, %y
1374+
call void @use(i8 %div)
1375+
ret i8 %div
1376+
}
1377+
1378+
define i8 @udiv_power_of_two_negative(i8 %x, i8 %y, i8 %z) {
1379+
; CHECK-LABEL: @udiv_power_of_two_negative(
1380+
; CHECK-NEXT: start:
1381+
; CHECK-NEXT: [[CTPOP:%.*]] = tail call range(i8 0, 9) i8 @llvm.ctpop.i8(i8 [[Z:%.*]])
1382+
; CHECK-NEXT: [[COND:%.*]] = icmp eq i8 [[CTPOP]], 1
1383+
; CHECK-NEXT: tail call void @llvm.assume(i1 [[COND]])
1384+
; CHECK-NEXT: [[_0:%.*]] = udiv i8 [[X:%.*]], [[Y:%.*]]
1385+
; CHECK-NEXT: ret i8 [[_0]]
1386+
;
1387+
start:
1388+
%ctpop = tail call i8 @llvm.ctpop.i8(i8 %z)
1389+
%cond = icmp eq i8 %ctpop, 1
1390+
tail call void @llvm.assume(i1 %cond)
1391+
%div = udiv i8 %x, %y
1392+
ret i8 %div
1393+
}

0 commit comments

Comments
 (0)