Skip to content

Commit da140bc

Browse files
AZero13topperc
authored andcommitted
[InstCombine] Pre-commit tests for #100008 (NFC)
1 parent 2d95dee commit da140bc

File tree

1 file changed

+250
-0
lines changed

1 file changed

+250
-0
lines changed

llvm/test/Transforms/InstCombine/saturating-add-sub.ll

Lines changed: 250 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1395,6 +1395,256 @@ define i32 @uadd_sat(i32 %x, i32 %y) {
13951395
%r = select i1 %c, i32 -1, i32 %a
13961396
ret i32 %r
13971397
}
1398+
1399+
define i32 @uadd_sat_flipped(i32 %x) {
1400+
; CHECK-LABEL: @uadd_sat_flipped(
1401+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[X:%.*]], -11
1402+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 9
1403+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 -1, i32 [[ADD]]
1404+
; CHECK-NEXT: ret i32 [[COND]]
1405+
;
1406+
%cmp = icmp ugt i32 %x, -11
1407+
%add = add i32 %x, 9
1408+
%cond = select i1 %cmp, i32 -1, i32 %add
1409+
ret i32 %cond
1410+
}
1411+
1412+
define i32 @uadd_sat_flipped2(i32 %x) {
1413+
; CHECK-LABEL: @uadd_sat_flipped2(
1414+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[X:%.*]], -10
1415+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 9
1416+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 -1, i32 [[ADD]]
1417+
; CHECK-NEXT: ret i32 [[COND]]
1418+
;
1419+
%cmp = icmp ugt i32 %x, -10
1420+
%add = add i32 %x, 9
1421+
%cond = select i1 %cmp, i32 -1, i32 %add
1422+
ret i32 %cond
1423+
}
1424+
1425+
define i32 @uadd_sat_flipped3(i32 %x) {
1426+
; CHECK-LABEL: @uadd_sat_flipped3(
1427+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[X:%.*]], -8
1428+
; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 [[X]], 9
1429+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 -1, i32 [[ADD]]
1430+
; CHECK-NEXT: ret i32 [[COND]]
1431+
;
1432+
%cmp = icmp ugt i32 %x, -8
1433+
%add = add nuw i32 %x, 9
1434+
%cond = select i1 %cmp, i32 -1, i32 %add
1435+
ret i32 %cond
1436+
}
1437+
1438+
; Negative Test
1439+
1440+
define i32 @uadd_sat_flipped3_neg_no_nuw(i32 %x) {
1441+
; CHECK-LABEL: @uadd_sat_flipped3_neg_no_nuw(
1442+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[X:%.*]], -8
1443+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 9
1444+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 -1, i32 [[ADD]]
1445+
; CHECK-NEXT: ret i32 [[COND]]
1446+
;
1447+
%cmp = icmp ugt i32 %x, -8
1448+
%add = add i32 %x, 9
1449+
%cond = select i1 %cmp, i32 -1, i32 %add
1450+
ret i32 %cond
1451+
}
1452+
1453+
define i32 @uadd_sat_negative_one(i32 %x) {
1454+
; CHECK-LABEL: @uadd_sat_negative_one(
1455+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X:%.*]], -1
1456+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 1
1457+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 -1, i32 [[ADD]]
1458+
; CHECK-NEXT: ret i32 [[COND]]
1459+
;
1460+
%cmp = icmp eq i32 %x, -1
1461+
%add = add i32 %x, 1
1462+
%cond = select i1 %cmp, i32 -1, i32 %add
1463+
ret i32 %cond
1464+
}
1465+
1466+
define <2 x i8> @uadd_sat_flipped4_vector(<2 x i8> %x) {
1467+
; CHECK-LABEL: @uadd_sat_flipped4_vector(
1468+
; CHECK-NEXT: [[COND:%.*]] = call <2 x i8> @llvm.uadd.sat.v2i8(<2 x i8> [[X:%.*]], <2 x i8> <i8 9, i8 9>)
1469+
; CHECK-NEXT: ret <2 x i8> [[COND]]
1470+
;
1471+
%cmp = icmp ult <2 x i8> %x, <i8 -10, i8 -10>
1472+
%add = add <2 x i8> %x, <i8 9, i8 9>
1473+
%cond = select <2 x i1> %cmp, <2 x i8> %add, <2 x i8> <i8 -1, i8 -1>
1474+
ret <2 x i8> %cond
1475+
}
1476+
1477+
define <2 x i8> @uadd_sat_flipped4_poison_vector(<2 x i8> %x) {
1478+
; CHECK-LABEL: @uadd_sat_flipped4_poison_vector(
1479+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult <2 x i8> [[X:%.*]], <i8 -10, i8 poison>
1480+
; CHECK-NEXT: [[ADD:%.*]] = add <2 x i8> [[X]], <i8 9, i8 9>
1481+
; CHECK-NEXT: [[COND:%.*]] = select <2 x i1> [[CMP]], <2 x i8> [[ADD]], <2 x i8> <i8 -1, i8 -1>
1482+
; CHECK-NEXT: ret <2 x i8> [[COND]]
1483+
;
1484+
%cmp = icmp ult <2 x i8> %x, <i8 -10, i8 poison>
1485+
%add = add <2 x i8> %x, <i8 9, i8 9>
1486+
%cond = select <2 x i1> %cmp, <2 x i8> %add,<2 x i8> <i8 -1, i8 -1>
1487+
ret <2 x i8> %cond
1488+
}
1489+
1490+
define <2 x i8> @uadd_sat_flipped4_poison_vector_compare(<2 x i8> %x) {
1491+
; CHECK-LABEL: @uadd_sat_flipped4_poison_vector_compare(
1492+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult <2 x i8> [[X:%.*]], <i8 -10, i8 poison>
1493+
; CHECK-NEXT: [[ADD:%.*]] = add <2 x i8> [[X]], <i8 9, i8 poison>
1494+
; CHECK-NEXT: [[COND:%.*]] = select <2 x i1> [[CMP]], <2 x i8> [[ADD]], <2 x i8> <i8 -1, i8 -1>
1495+
; CHECK-NEXT: ret <2 x i8> [[COND]]
1496+
;
1497+
%cmp = icmp ult <2 x i8> %x, <i8 -10, i8 poison>
1498+
%add = add <2 x i8> %x, <i8 9, i8 poison>
1499+
%cond = select <2 x i1> %cmp, <2 x i8> %add,<2 x i8> <i8 -1, i8 -1>
1500+
ret <2 x i8> %cond
1501+
}
1502+
1503+
define <2 x i8> @uadd_sat_flipped4_poison_vector_compare2(<2 x i8> %x) {
1504+
; CHECK-LABEL: @uadd_sat_flipped4_poison_vector_compare2(
1505+
; CHECK-NEXT: ret <2 x i8> <i8 -1, i8 -1>
1506+
;
1507+
%cmp = icmp ult <2 x i8> %x, <i8 -10, i8 poison>
1508+
%add = add <2 x i8> %x, <i8 poison, i8 poison>
1509+
%cond = select <2 x i1> %cmp, <2 x i8> %add,<2 x i8> <i8 -1, i8 -1>
1510+
ret <2 x i8> %cond
1511+
}
1512+
1513+
; Negative test:
1514+
1515+
define i32 @uadd_sat_flipped_too_big(i32 %x) {
1516+
; CHECK-LABEL: @uadd_sat_flipped_too_big(
1517+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[X:%.*]], -8
1518+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 9
1519+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[ADD]], i32 -1
1520+
; CHECK-NEXT: ret i32 [[COND]]
1521+
;
1522+
%cmp = icmp ult i32 %x, -8
1523+
%add = add i32 %x, 9
1524+
%cond = select i1 %cmp, i32 %add, i32 -1
1525+
ret i32 %cond
1526+
}
1527+
1528+
; Negative test:
1529+
1530+
define i32 @uadd_sat_flipped_wrong_bounds(i32 %x) {
1531+
; CHECK-LABEL: @uadd_sat_flipped_wrong_bounds(
1532+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[X:%.*]], -13
1533+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 9
1534+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 -1, i32 [[ADD]]
1535+
; CHECK-NEXT: ret i32 [[COND]]
1536+
;
1537+
%cmp = icmp uge i32 %x, -12
1538+
%add = add i32 %x, 9
1539+
%cond = select i1 %cmp, i32 -1, i32 %add
1540+
ret i32 %cond
1541+
}
1542+
1543+
; Negative test:
1544+
1545+
define i32 @uadd_sat_flipped_wrong_bounds2(i32 %x) {
1546+
; CHECK-LABEL: @uadd_sat_flipped_wrong_bounds2(
1547+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[X:%.*]], -12
1548+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 9
1549+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 -1, i32 [[ADD]]
1550+
; CHECK-NEXT: ret i32 [[COND]]
1551+
;
1552+
%cmp = icmp ugt i32 %x, -12
1553+
%add = add i32 %x, 9
1554+
%cond = select i1 %cmp, i32 -1, i32 %add
1555+
ret i32 %cond
1556+
}
1557+
1558+
; Negative test:
1559+
1560+
define i32 @uadd_sat_flipped_wrong_bounds3(i32 %x) {
1561+
; CHECK-LABEL: @uadd_sat_flipped_wrong_bounds3(
1562+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[X:%.*]], -12
1563+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 9
1564+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 -1, i32 [[ADD]]
1565+
; CHECK-NEXT: ret i32 [[COND]]
1566+
;
1567+
%cmp = icmp ugt i32 %x, -12
1568+
%add = add i32 %x, 9
1569+
%cond = select i1 %cmp, i32 -1, i32 %add
1570+
ret i32 %cond
1571+
}
1572+
1573+
; Negative test:
1574+
1575+
define i32 @uadd_sat_flipped_wrong_bounds4(i32 %x) {
1576+
; CHECK-LABEL: @uadd_sat_flipped_wrong_bounds4(
1577+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[X:%.*]], -9
1578+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 9
1579+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 -1, i32 [[ADD]]
1580+
; CHECK-NEXT: ret i32 [[COND]]
1581+
;
1582+
%cmp = icmp uge i32 %x, -8
1583+
%add = add i32 %x, 9
1584+
%cond = select i1 %cmp, i32 -1, i32 %add
1585+
ret i32 %cond
1586+
}
1587+
1588+
; Negative test:
1589+
1590+
define i32 @uadd_sat_flipped_wrong_bounds5(i32 %x) {
1591+
; CHECK-LABEL: @uadd_sat_flipped_wrong_bounds5(
1592+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[X:%.*]], -8
1593+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 9
1594+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[ADD]], i32 -1
1595+
; CHECK-NEXT: ret i32 [[COND]]
1596+
;
1597+
%cmp = icmp ult i32 %x, -8
1598+
%add = add i32 %x, 9
1599+
%cond = select i1 %cmp, i32 %add, i32 -1
1600+
ret i32 %cond
1601+
}
1602+
1603+
; Negative test:
1604+
1605+
define i32 @uadd_sat_flipped_wrong_bounds6(i32 %x) {
1606+
; CHECK-LABEL: @uadd_sat_flipped_wrong_bounds6(
1607+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[X:%.*]], -11
1608+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 9
1609+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[ADD]], i32 -1
1610+
; CHECK-NEXT: ret i32 [[COND]]
1611+
;
1612+
%cmp = icmp ule i32 %x, -12
1613+
%add = add i32 %x, 9
1614+
%cond = select i1 %cmp, i32 %add, i32 -1
1615+
ret i32 %cond
1616+
}
1617+
1618+
; Negative test:
1619+
1620+
define i32 @uadd_sat_flipped_wrong_bounds7(i32 %x) {
1621+
; CHECK-LABEL: @uadd_sat_flipped_wrong_bounds7(
1622+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[X:%.*]], -11
1623+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 9
1624+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[ADD]], i32 -1
1625+
; CHECK-NEXT: ret i32 [[COND]]
1626+
;
1627+
%cmp = icmp ule i32 %x, -12
1628+
%add = add i32 %x, 9
1629+
%cond = select i1 %cmp, i32 %add, i32 -1
1630+
ret i32 %cond
1631+
}
1632+
1633+
; Negative test:
1634+
1635+
define i32 @uadd_sat_flipped_wrong_bounds8(i32 %x) {
1636+
; CHECK-LABEL: @uadd_sat_flipped_wrong_bounds8(
1637+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[X:%.*]], -12
1638+
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X]], 9
1639+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[ADD]], i32 -1
1640+
; CHECK-NEXT: ret i32 [[COND]]
1641+
;
1642+
%cmp = icmp ult i32 %x, -12
1643+
%add = add i32 %x, 9
1644+
%cond = select i1 %cmp, i32 %add, i32 -1
1645+
ret i32 %cond
1646+
}
1647+
13981648
define i32 @uadd_sat_nonstrict(i32 %x, i32 %y) {
13991649
; CHECK-LABEL: @uadd_sat_nonstrict(
14001650
; CHECK-NEXT: [[R:%.*]] = call i32 @llvm.uadd.sat.i32(i32 [[X:%.*]], i32 [[Y:%.*]])

0 commit comments

Comments
 (0)