Skip to content

Commit db34a94

Browse files
committed
[ConstraintElim] Add tests for shl nsw decomposition (NFC)
1 parent 3fd081f commit db34a94

File tree

1 file changed

+87
-0
lines changed
  • llvm/test/Transforms/ConstraintElimination

1 file changed

+87
-0
lines changed

llvm/test/Transforms/ConstraintElimination/shl.ll

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,3 +1274,90 @@ entry:
12741274
%shl.cmp = icmp uge i256 %shl.ub, 1
12751275
ret i1 %shl.cmp
12761276
}
1277+
1278+
define i1 @shl_nsw_x8_slt_x7(i8 %start, i8 %high) {
1279+
; CHECK-LABEL: @shl_nsw_x8_slt_x7(
1280+
; CHECK-NEXT: [[C_0:%.*]] = icmp sge i8 [[HIGH:%.*]], 0
1281+
; CHECK-NEXT: call void @llvm.assume(i1 [[C_0]])
1282+
; CHECK-NEXT: [[START_SHL_3:%.*]] = shl nsw i8 [[START:%.*]], 3
1283+
; CHECK-NEXT: [[C_1:%.*]] = icmp slt i8 [[START_SHL_3]], [[HIGH]]
1284+
; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]])
1285+
; CHECK-NEXT: [[START_MUL_7:%.*]] = mul nsw i8 [[START]], 7
1286+
; CHECK-NEXT: [[T_1:%.*]] = icmp slt i8 [[START_MUL_7]], [[HIGH]]
1287+
; CHECK-NEXT: ret i1 [[T_1]]
1288+
;
1289+
%c.0 = icmp sge i8 %high, 0
1290+
call void @llvm.assume(i1 %c.0)
1291+
1292+
%start.shl.3 = shl nsw i8 %start, 3
1293+
%c.1 = icmp slt i8 %start.shl.3, %high
1294+
call void @llvm.assume(i1 %c.1)
1295+
1296+
%start.mul.7 = mul nsw i8 %start, 7
1297+
%t.1 = icmp slt i8 %start.mul.7, %high
1298+
ret i1 %t.1
1299+
}
1300+
1301+
define i1 @shl_nsw_x8_not_slt_x9(i8 %start, i8 %high) {
1302+
; CHECK-LABEL: @shl_nsw_x8_not_slt_x9(
1303+
; CHECK-NEXT: [[C_0:%.*]] = icmp sge i8 [[HIGH:%.*]], 0
1304+
; CHECK-NEXT: call void @llvm.assume(i1 [[C_0]])
1305+
; CHECK-NEXT: [[START_SHL_3:%.*]] = shl nsw i8 [[START:%.*]], 3
1306+
; CHECK-NEXT: [[C_1:%.*]] = icmp slt i8 [[START_SHL_3]], [[HIGH]]
1307+
; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]])
1308+
; CHECK-NEXT: [[START_MUL_9:%.*]] = mul nsw i8 [[START]], 9
1309+
; CHECK-NEXT: [[T_1:%.*]] = icmp slt i8 [[START_MUL_9]], [[HIGH]]
1310+
; CHECK-NEXT: ret i1 [[T_1]]
1311+
;
1312+
%c.0 = icmp sge i8 %high, 0
1313+
call void @llvm.assume(i1 %c.0)
1314+
1315+
%start.shl.3 = shl nsw i8 %start, 3
1316+
%c.1 = icmp slt i8 %start.shl.3, %high
1317+
call void @llvm.assume(i1 %c.1)
1318+
1319+
%start.mul.9 = mul nsw i8 %start, 9
1320+
%t.1 = icmp slt i8 %start.mul.9, %high
1321+
ret i1 %t.1
1322+
}
1323+
1324+
define i1 @shl_nsw_sign_implication(i8 %x) {
1325+
; CHECK-LABEL: @shl_nsw_sign_implication(
1326+
; CHECK-NEXT: [[SHL:%.*]] = shl nsw i8 [[X:%.*]], 2
1327+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 [[X]], 0
1328+
; CHECK-NEXT: br i1 [[CMP1]], label [[IF:%.*]], label [[ELSE:%.*]]
1329+
; CHECK: if:
1330+
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 [[SHL]], 0
1331+
; CHECK-NEXT: ret i1 [[CMP2]]
1332+
; CHECK: else:
1333+
; CHECK-NEXT: [[CMP3:%.*]] = icmp sge i8 [[SHL]], 0
1334+
; CHECK-NEXT: ret i1 [[CMP3]]
1335+
;
1336+
%shl = shl nsw i8 %x, 2
1337+
%cmp1 = icmp slt i8 %x, 0
1338+
br i1 %cmp1, label %if, label %else
1339+
1340+
if:
1341+
%cmp2 = icmp slt i8 %shl, 0
1342+
ret i1 %cmp2
1343+
1344+
else:
1345+
%cmp3 = icmp sge i8 %shl, 0
1346+
ret i1 %cmp3
1347+
}
1348+
1349+
define i1 @shl_nsw_by_bw_minus_1(i64 %x) {
1350+
; CHECK-LABEL: @shl_nsw_by_bw_minus_1(
1351+
; CHECK-NEXT: [[X_SHL:%.*]] = shl nsw i64 [[X:%.*]], 63
1352+
; CHECK-NEXT: [[C_1:%.*]] = icmp slt i64 [[X_SHL]], 0
1353+
; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]])
1354+
; CHECK-NEXT: [[T_1:%.*]] = icmp slt i64 [[X]], 0
1355+
; CHECK-NEXT: ret i1 [[T_1]]
1356+
;
1357+
%x.shl = shl nsw i64 %x, 63
1358+
%c.1 = icmp slt i64 %x.shl, 0
1359+
call void @llvm.assume(i1 %c.1)
1360+
1361+
%t.1 = icmp slt i64 %x, 0
1362+
ret i1 %t.1
1363+
}

0 commit comments

Comments
 (0)