Skip to content

Commit 2285a2c

Browse files
committed
fixup! [InstCombine] Simplify the pattern a ne/eq (zext (a ne/eq c))
Add negative tests
1 parent 2e5fe7b commit 2285a2c

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

llvm/test/Transforms/InstCombine/icmp-range.ll

+79
Original file line numberDiff line numberDiff line change
@@ -1426,6 +1426,85 @@ define i1 @icmp_ne_sext_ne_otherwise_i128(i128 %a) {
14261426
ret i1 %cmp1
14271427
}
14281428

1429+
; Negative tests with non-equality predicates
1430+
define i1 @icmp_ne_sext_sgt_zero_nofold(i32 %a) {
1431+
; CHECK-LABEL: @icmp_ne_sext_sgt_zero_nofold(
1432+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[A:%.*]], 0
1433+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1434+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1435+
; CHECK-NEXT: ret i1 [[CMP1]]
1436+
;
1437+
%cmp = icmp sgt i32 %a, 0
1438+
%conv = sext i1 %cmp to i32
1439+
%cmp1 = icmp ne i32 %conv, %a
1440+
ret i1 %cmp1
1441+
}
1442+
1443+
define i1 @icmp_slt_sext_ne_zero_nofold(i32 %a) {
1444+
; CHECK-LABEL: @icmp_slt_sext_ne_zero_nofold(
1445+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], 0
1446+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1447+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[CONV]], [[A]]
1448+
; CHECK-NEXT: ret i1 [[CMP1]]
1449+
;
1450+
%cmp = icmp ne i32 %a, 0
1451+
%conv = sext i1 %cmp to i32
1452+
%cmp1 = icmp slt i32 %conv, %a
1453+
ret i1 %cmp1
1454+
}
1455+
1456+
define i1 @icmp_ne_sext_slt_allones_nofold(i32 %a) {
1457+
; CHECK-LABEL: @icmp_ne_sext_slt_allones_nofold(
1458+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[A:%.*]], -1
1459+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1460+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1461+
; CHECK-NEXT: ret i1 [[CMP1]]
1462+
;
1463+
%cmp = icmp slt i32 %a, -1
1464+
%conv = sext i1 %cmp to i32
1465+
%cmp1 = icmp ne i32 %conv, %a
1466+
ret i1 %cmp1
1467+
}
1468+
1469+
define i1 @icmp_slt_sext_ne_allones_nofold(i32 %a) {
1470+
; CHECK-LABEL: @icmp_slt_sext_ne_allones_nofold(
1471+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], -1
1472+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1473+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[CONV]], [[A]]
1474+
; CHECK-NEXT: ret i1 [[CMP1]]
1475+
;
1476+
%cmp = icmp ne i32 %a, -1
1477+
%conv = sext i1 %cmp to i32
1478+
%cmp1 = icmp slt i32 %conv, %a
1479+
ret i1 %cmp1
1480+
}
1481+
1482+
define i1 @icmp_ne_sext_slt_otherwise_nofold(i32 %a) {
1483+
; CHECK-LABEL: @icmp_ne_sext_slt_otherwise_nofold(
1484+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[A:%.*]], 2
1485+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1486+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1487+
; CHECK-NEXT: ret i1 [[CMP1]]
1488+
;
1489+
%cmp = icmp slt i32 %a, 2
1490+
%conv = sext i1 %cmp to i32
1491+
%cmp1 = icmp ne i32 %conv, %a
1492+
ret i1 %cmp1
1493+
}
1494+
1495+
define i1 @icmp_slt_sext_ne_otherwise_nofold(i32 %a) {
1496+
; CHECK-LABEL: @icmp_slt_sext_ne_otherwise_nofold(
1497+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], 2
1498+
; CHECK-NEXT: [[CONV:%.*]] = sext i1 [[CMP]] to i32
1499+
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[CONV]], [[A]]
1500+
; CHECK-NEXT: ret i1 [[CMP1]]
1501+
;
1502+
%cmp = icmp ne i32 %a, 2
1503+
%conv = sext i1 %cmp to i32
1504+
%cmp1 = icmp slt i32 %conv, %a
1505+
ret i1 %cmp1
1506+
}
1507+
14291508
; tests from PR59555
14301509
define i1 @isFloat(i64 %0) {
14311510
; CHECK-LABEL: @isFloat(

0 commit comments

Comments
 (0)