Skip to content

Commit d9cd607

Browse files
committed
[InstCombine] Add tests for #110919 (NFC)
1 parent ea796e5 commit d9cd607

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed

llvm/test/Transforms/InstCombine/eq-of-parts.ll

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1438,3 +1438,103 @@ define i1 @ne_optimized_highbits_cmp_todo_overlapping(i32 %x, i32 %y) {
14381438
%r = or i1 %cmp_hi, %cmp_lo
14391439
ret i1 %r
14401440
}
1441+
1442+
define i1 @and_trunc_i1(i8 %a1, i8 %a2) {
1443+
; CHECK-LABEL: @and_trunc_i1(
1444+
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[A1:%.*]], [[A2:%.*]]
1445+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[XOR]], 2
1446+
; CHECK-NEXT: [[LOBIT:%.*]] = trunc i8 [[XOR]] to i1
1447+
; CHECK-NEXT: [[LOBIT_INV:%.*]] = xor i1 [[LOBIT]], true
1448+
; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP]], [[LOBIT_INV]]
1449+
; CHECK-NEXT: ret i1 [[AND]]
1450+
;
1451+
%xor = xor i8 %a1, %a2
1452+
%cmp = icmp ult i8 %xor, 2
1453+
%lobit = trunc i8 %xor to i1
1454+
%lobit.inv = xor i1 %lobit, true
1455+
%and = and i1 %cmp, %lobit.inv
1456+
ret i1 %and
1457+
}
1458+
1459+
define i1 @and_trunc_i1_wrong_const(i8 %a1, i8 %a2) {
1460+
; CHECK-LABEL: @and_trunc_i1_wrong_const(
1461+
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[A1:%.*]], [[A2:%.*]]
1462+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[XOR]], 4
1463+
; CHECK-NEXT: [[LOBIT:%.*]] = trunc i8 [[XOR]] to i1
1464+
; CHECK-NEXT: [[LOBIT_INV:%.*]] = xor i1 [[LOBIT]], true
1465+
; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP]], [[LOBIT_INV]]
1466+
; CHECK-NEXT: ret i1 [[AND]]
1467+
;
1468+
%xor = xor i8 %a1, %a2
1469+
%cmp = icmp ult i8 %xor, 4
1470+
%lobit = trunc i8 %xor to i1
1471+
%lobit.inv = xor i1 %lobit, true
1472+
%and = and i1 %cmp, %lobit.inv
1473+
ret i1 %and
1474+
}
1475+
1476+
define i1 @and_trunc_i1_wrong_operands(i8 %a1, i8 %a2, i8 %a3) {
1477+
; CHECK-LABEL: @and_trunc_i1_wrong_operands(
1478+
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[A1:%.*]], [[A2:%.*]]
1479+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[XOR]], 2
1480+
; CHECK-NEXT: [[XOR2:%.*]] = xor i8 [[A1]], [[A3:%.*]]
1481+
; CHECK-NEXT: [[LOBIT:%.*]] = trunc i8 [[XOR2]] to i1
1482+
; CHECK-NEXT: [[LOBIT_INV:%.*]] = xor i1 [[LOBIT]], true
1483+
; CHECK-NEXT: [[AND:%.*]] = and i1 [[CMP]], [[LOBIT_INV]]
1484+
; CHECK-NEXT: ret i1 [[AND]]
1485+
;
1486+
%xor = xor i8 %a1, %a2
1487+
%cmp = icmp ult i8 %xor, 2
1488+
%xor2 = xor i8 %a1, %a3
1489+
%lobit = trunc i8 %xor2 to i1
1490+
%lobit.inv = xor i1 %lobit, true
1491+
%and = and i1 %cmp, %lobit.inv
1492+
ret i1 %and
1493+
}
1494+
1495+
define i1 @or_trunc_i1(i64 %a1, i64 %a2) {
1496+
; CHECK-LABEL: @or_trunc_i1(
1497+
; CHECK-NEXT: [[XOR:%.*]] = xor i64 [[A2:%.*]], [[A1:%.*]]
1498+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i64 [[XOR]], 1
1499+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc i64 [[XOR]] to i1
1500+
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP]], [[TRUNC]]
1501+
; CHECK-NEXT: ret i1 [[OR]]
1502+
;
1503+
%xor = xor i64 %a2, %a1
1504+
%cmp = icmp ugt i64 %xor, 1
1505+
%trunc = trunc i64 %xor to i1
1506+
%or = or i1 %cmp, %trunc
1507+
ret i1 %or
1508+
}
1509+
1510+
define i1 @or_trunc_i1_wrong_const(i64 %a1, i64 %a2) {
1511+
; CHECK-LABEL: @or_trunc_i1_wrong_const(
1512+
; CHECK-NEXT: [[XOR:%.*]] = xor i64 [[A2:%.*]], [[A1:%.*]]
1513+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i64 [[XOR]], 2
1514+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc i64 [[XOR]] to i1
1515+
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP]], [[TRUNC]]
1516+
; CHECK-NEXT: ret i1 [[OR]]
1517+
;
1518+
%xor = xor i64 %a2, %a1
1519+
%cmp = icmp ugt i64 %xor, 2
1520+
%trunc = trunc i64 %xor to i1
1521+
%or = or i1 %cmp, %trunc
1522+
ret i1 %or
1523+
}
1524+
1525+
define i1 @or_trunc_i1_wrong_operands(i64 %a1, i64 %a2, i64 %a3) {
1526+
; CHECK-LABEL: @or_trunc_i1_wrong_operands(
1527+
; CHECK-NEXT: [[XOR:%.*]] = xor i64 [[A2:%.*]], [[A1:%.*]]
1528+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i64 [[XOR]], 1
1529+
; CHECK-NEXT: [[XOR2:%.*]] = xor i64 [[A3:%.*]], [[A1]]
1530+
; CHECK-NEXT: [[TRUNC:%.*]] = trunc i64 [[XOR2]] to i1
1531+
; CHECK-NEXT: [[OR:%.*]] = or i1 [[CMP]], [[TRUNC]]
1532+
; CHECK-NEXT: ret i1 [[OR]]
1533+
;
1534+
%xor = xor i64 %a2, %a1
1535+
%cmp = icmp ugt i64 %xor, 1
1536+
%xor2 = xor i64 %a3, %a1
1537+
%trunc = trunc i64 %xor2 to i1
1538+
%or = or i1 %cmp, %trunc
1539+
ret i1 %or
1540+
}

0 commit comments

Comments
 (0)