@@ -1551,167 +1551,87 @@ define i32 @sub_if_uge_i32(i32 %x, i32 %y) {
15511551}
15521552
15531553define i64 @sub_if_uge_i64 (i64 %x , i64 %y ) {
1554- ; RV32I-LABEL: sub_if_uge_i64:
1555- ; RV32I: # %bb.0:
1556- ; RV32I-NEXT: beq a1, a3, .LBB52_2
1557- ; RV32I-NEXT: # %bb.1:
1558- ; RV32I-NEXT: sltu a4, a1, a3
1559- ; RV32I-NEXT: j .LBB52_3
1560- ; RV32I-NEXT: .LBB52_2:
1561- ; RV32I-NEXT: sltu a4, a0, a2
1562- ; RV32I-NEXT: .LBB52_3:
1563- ; RV32I-NEXT: addi a4, a4, -1
1564- ; RV32I-NEXT: and a3, a4, a3
1565- ; RV32I-NEXT: and a2, a4, a2
1566- ; RV32I-NEXT: sltu a4, a0, a2
1567- ; RV32I-NEXT: sub a1, a1, a3
1568- ; RV32I-NEXT: sub a1, a1, a4
1569- ; RV32I-NEXT: sub a0, a0, a2
1570- ; RV32I-NEXT: ret
1571- ;
1572- ; RV32ZBB-LABEL: sub_if_uge_i64:
1573- ; RV32ZBB: # %bb.0:
1574- ; RV32ZBB-NEXT: sltu a4, a0, a2
1575- ; RV32ZBB-NEXT: sub a3, a1, a3
1576- ; RV32ZBB-NEXT: sub a3, a3, a4
1577- ; RV32ZBB-NEXT: sub a2, a0, a2
1578- ; RV32ZBB-NEXT: beq a1, a3, .LBB52_2
1579- ; RV32ZBB-NEXT: # %bb.1:
1580- ; RV32ZBB-NEXT: sltu a4, a1, a3
1581- ; RV32ZBB-NEXT: beqz a4, .LBB52_3
1582- ; RV32ZBB-NEXT: j .LBB52_4
1583- ; RV32ZBB-NEXT: .LBB52_2:
1584- ; RV32ZBB-NEXT: sltu a4, a0, a2
1585- ; RV32ZBB-NEXT: bnez a4, .LBB52_4
1586- ; RV32ZBB-NEXT: .LBB52_3:
1587- ; RV32ZBB-NEXT: mv a0, a2
1588- ; RV32ZBB-NEXT: mv a1, a3
1589- ; RV32ZBB-NEXT: .LBB52_4:
1590- ; RV32ZBB-NEXT: ret
1554+ ; CHECK-LABEL: sub_if_uge_i64:
1555+ ; CHECK: # %bb.0:
1556+ ; CHECK-NEXT: beq a1, a3, .LBB52_2
1557+ ; CHECK-NEXT: # %bb.1:
1558+ ; CHECK-NEXT: sltu a4, a1, a3
1559+ ; CHECK-NEXT: j .LBB52_3
1560+ ; CHECK-NEXT: .LBB52_2:
1561+ ; CHECK-NEXT: sltu a4, a0, a2
1562+ ; CHECK-NEXT: .LBB52_3:
1563+ ; CHECK-NEXT: addi a4, a4, -1
1564+ ; CHECK-NEXT: and a3, a4, a3
1565+ ; CHECK-NEXT: and a2, a4, a2
1566+ ; CHECK-NEXT: sltu a4, a0, a2
1567+ ; CHECK-NEXT: sub a1, a1, a3
1568+ ; CHECK-NEXT: sub a1, a1, a4
1569+ ; CHECK-NEXT: sub a0, a0, a2
1570+ ; CHECK-NEXT: ret
15911571 %cmp = icmp ult i64 %x , %y
15921572 %select = select i1 %cmp , i64 0 , i64 %y
15931573 %sub = sub nuw i64 %x , %select
15941574 ret i64 %sub
15951575}
15961576
15971577define i128 @sub_if_uge_i128 (i128 %x , i128 %y ) {
1598- ; RV32I-LABEL: sub_if_uge_i128:
1599- ; RV32I: # %bb.0:
1600- ; RV32I-NEXT: lw a7, 4(a2)
1601- ; RV32I-NEXT: lw a6, 8(a2)
1602- ; RV32I-NEXT: lw t0, 12(a2)
1603- ; RV32I-NEXT: lw a4, 12(a1)
1604- ; RV32I-NEXT: lw a3, 4(a1)
1605- ; RV32I-NEXT: lw a5, 8(a1)
1606- ; RV32I-NEXT: beq a4, t0, .LBB53_2
1607- ; RV32I-NEXT: # %bb.1:
1608- ; RV32I-NEXT: sltu t1, a4, t0
1609- ; RV32I-NEXT: j .LBB53_3
1610- ; RV32I-NEXT: .LBB53_2:
1611- ; RV32I-NEXT: sltu t1, a5, a6
1612- ; RV32I-NEXT: .LBB53_3:
1613- ; RV32I-NEXT: lw a2, 0(a2)
1614- ; RV32I-NEXT: lw a1, 0(a1)
1615- ; RV32I-NEXT: beq a3, a7, .LBB53_5
1616- ; RV32I-NEXT: # %bb.4:
1617- ; RV32I-NEXT: sltu t2, a3, a7
1618- ; RV32I-NEXT: j .LBB53_6
1619- ; RV32I-NEXT: .LBB53_5:
1620- ; RV32I-NEXT: sltu t2, a1, a2
1621- ; RV32I-NEXT: .LBB53_6:
1622- ; RV32I-NEXT: xor t3, a4, t0
1623- ; RV32I-NEXT: xor t4, a5, a6
1624- ; RV32I-NEXT: or t3, t4, t3
1625- ; RV32I-NEXT: beqz t3, .LBB53_8
1626- ; RV32I-NEXT: # %bb.7:
1627- ; RV32I-NEXT: mv t2, t1
1628- ; RV32I-NEXT: .LBB53_8:
1629- ; RV32I-NEXT: addi t2, t2, -1
1630- ; RV32I-NEXT: and t1, t2, t0
1631- ; RV32I-NEXT: and t0, t2, a2
1632- ; RV32I-NEXT: and a7, t2, a7
1633- ; RV32I-NEXT: sltu a2, a1, t0
1634- ; RV32I-NEXT: and t2, t2, a6
1635- ; RV32I-NEXT: mv a6, a2
1636- ; RV32I-NEXT: beq a3, a7, .LBB53_10
1637- ; RV32I-NEXT: # %bb.9:
1638- ; RV32I-NEXT: sltu a6, a3, a7
1639- ; RV32I-NEXT: .LBB53_10:
1640- ; RV32I-NEXT: sub t3, a5, t2
1641- ; RV32I-NEXT: sltu a5, a5, t2
1642- ; RV32I-NEXT: sub a4, a4, t1
1643- ; RV32I-NEXT: sub a3, a3, a7
1644- ; RV32I-NEXT: sub a1, a1, t0
1645- ; RV32I-NEXT: sltu a7, t3, a6
1646- ; RV32I-NEXT: sub a4, a4, a5
1647- ; RV32I-NEXT: sub a5, t3, a6
1648- ; RV32I-NEXT: sub a3, a3, a2
1649- ; RV32I-NEXT: sub a2, a4, a7
1650- ; RV32I-NEXT: sw a1, 0(a0)
1651- ; RV32I-NEXT: sw a3, 4(a0)
1652- ; RV32I-NEXT: sw a5, 8(a0)
1653- ; RV32I-NEXT: sw a2, 12(a0)
1654- ; RV32I-NEXT: ret
1655- ;
1656- ; RV32ZBB-LABEL: sub_if_uge_i128:
1657- ; RV32ZBB: # %bb.0:
1658- ; RV32ZBB-NEXT: lw a7, 0(a2)
1659- ; RV32ZBB-NEXT: lw t0, 4(a2)
1660- ; RV32ZBB-NEXT: lw a5, 8(a2)
1661- ; RV32ZBB-NEXT: lw a6, 12(a2)
1662- ; RV32ZBB-NEXT: lw a2, 8(a1)
1663- ; RV32ZBB-NEXT: lw a3, 12(a1)
1664- ; RV32ZBB-NEXT: lw a4, 0(a1)
1665- ; RV32ZBB-NEXT: lw a1, 4(a1)
1666- ; RV32ZBB-NEXT: sltu t1, a2, a5
1667- ; RV32ZBB-NEXT: sub a6, a3, a6
1668- ; RV32ZBB-NEXT: sltu t2, a4, a7
1669- ; RV32ZBB-NEXT: sub a6, a6, t1
1670- ; RV32ZBB-NEXT: mv t1, t2
1671- ; RV32ZBB-NEXT: beq a1, t0, .LBB53_2
1672- ; RV32ZBB-NEXT: # %bb.1:
1673- ; RV32ZBB-NEXT: sltu t1, a1, t0
1674- ; RV32ZBB-NEXT: .LBB53_2:
1675- ; RV32ZBB-NEXT: sub t3, a2, a5
1676- ; RV32ZBB-NEXT: sltu a5, t3, t1
1677- ; RV32ZBB-NEXT: sub a5, a6, a5
1678- ; RV32ZBB-NEXT: sub a6, t3, t1
1679- ; RV32ZBB-NEXT: beq a3, a5, .LBB53_4
1680- ; RV32ZBB-NEXT: # %bb.3:
1681- ; RV32ZBB-NEXT: sltu t1, a3, a5
1682- ; RV32ZBB-NEXT: j .LBB53_5
1683- ; RV32ZBB-NEXT: .LBB53_4:
1684- ; RV32ZBB-NEXT: sltu t1, a2, a6
1685- ; RV32ZBB-NEXT: .LBB53_5:
1686- ; RV32ZBB-NEXT: sub t0, a1, t0
1687- ; RV32ZBB-NEXT: sub t0, t0, t2
1688- ; RV32ZBB-NEXT: sub a7, a4, a7
1689- ; RV32ZBB-NEXT: beq a1, t0, .LBB53_7
1690- ; RV32ZBB-NEXT: # %bb.6:
1691- ; RV32ZBB-NEXT: sltu t2, a1, t0
1692- ; RV32ZBB-NEXT: j .LBB53_8
1693- ; RV32ZBB-NEXT: .LBB53_7:
1694- ; RV32ZBB-NEXT: sltu t2, a4, a7
1695- ; RV32ZBB-NEXT: .LBB53_8:
1696- ; RV32ZBB-NEXT: xor t3, a3, a5
1697- ; RV32ZBB-NEXT: xor t4, a2, a6
1698- ; RV32ZBB-NEXT: or t3, t4, t3
1699- ; RV32ZBB-NEXT: beqz t3, .LBB53_10
1700- ; RV32ZBB-NEXT: # %bb.9:
1701- ; RV32ZBB-NEXT: mv t2, t1
1702- ; RV32ZBB-NEXT: .LBB53_10:
1703- ; RV32ZBB-NEXT: bnez t2, .LBB53_12
1704- ; RV32ZBB-NEXT: # %bb.11:
1705- ; RV32ZBB-NEXT: mv a4, a7
1706- ; RV32ZBB-NEXT: mv a1, t0
1707- ; RV32ZBB-NEXT: mv a2, a6
1708- ; RV32ZBB-NEXT: mv a3, a5
1709- ; RV32ZBB-NEXT: .LBB53_12:
1710- ; RV32ZBB-NEXT: sw a4, 0(a0)
1711- ; RV32ZBB-NEXT: sw a1, 4(a0)
1712- ; RV32ZBB-NEXT: sw a2, 8(a0)
1713- ; RV32ZBB-NEXT: sw a3, 12(a0)
1714- ; RV32ZBB-NEXT: ret
1578+ ; CHECK-LABEL: sub_if_uge_i128:
1579+ ; CHECK: # %bb.0:
1580+ ; CHECK-NEXT: lw a7, 4(a2)
1581+ ; CHECK-NEXT: lw a6, 8(a2)
1582+ ; CHECK-NEXT: lw t0, 12(a2)
1583+ ; CHECK-NEXT: lw a4, 12(a1)
1584+ ; CHECK-NEXT: lw a3, 4(a1)
1585+ ; CHECK-NEXT: lw a5, 8(a1)
1586+ ; CHECK-NEXT: beq a4, t0, .LBB53_2
1587+ ; CHECK-NEXT: # %bb.1:
1588+ ; CHECK-NEXT: sltu t1, a4, t0
1589+ ; CHECK-NEXT: j .LBB53_3
1590+ ; CHECK-NEXT: .LBB53_2:
1591+ ; CHECK-NEXT: sltu t1, a5, a6
1592+ ; CHECK-NEXT: .LBB53_3:
1593+ ; CHECK-NEXT: lw a2, 0(a2)
1594+ ; CHECK-NEXT: lw a1, 0(a1)
1595+ ; CHECK-NEXT: beq a3, a7, .LBB53_5
1596+ ; CHECK-NEXT: # %bb.4:
1597+ ; CHECK-NEXT: sltu t2, a3, a7
1598+ ; CHECK-NEXT: j .LBB53_6
1599+ ; CHECK-NEXT: .LBB53_5:
1600+ ; CHECK-NEXT: sltu t2, a1, a2
1601+ ; CHECK-NEXT: .LBB53_6:
1602+ ; CHECK-NEXT: xor t3, a4, t0
1603+ ; CHECK-NEXT: xor t4, a5, a6
1604+ ; CHECK-NEXT: or t3, t4, t3
1605+ ; CHECK-NEXT: beqz t3, .LBB53_8
1606+ ; CHECK-NEXT: # %bb.7:
1607+ ; CHECK-NEXT: mv t2, t1
1608+ ; CHECK-NEXT: .LBB53_8:
1609+ ; CHECK-NEXT: addi t2, t2, -1
1610+ ; CHECK-NEXT: and t1, t2, t0
1611+ ; CHECK-NEXT: and t0, t2, a2
1612+ ; CHECK-NEXT: and a7, t2, a7
1613+ ; CHECK-NEXT: sltu a2, a1, t0
1614+ ; CHECK-NEXT: and t2, t2, a6
1615+ ; CHECK-NEXT: mv a6, a2
1616+ ; CHECK-NEXT: beq a3, a7, .LBB53_10
1617+ ; CHECK-NEXT: # %bb.9:
1618+ ; CHECK-NEXT: sltu a6, a3, a7
1619+ ; CHECK-NEXT: .LBB53_10:
1620+ ; CHECK-NEXT: sub t3, a5, t2
1621+ ; CHECK-NEXT: sltu a5, a5, t2
1622+ ; CHECK-NEXT: sub a4, a4, t1
1623+ ; CHECK-NEXT: sub a3, a3, a7
1624+ ; CHECK-NEXT: sub a1, a1, t0
1625+ ; CHECK-NEXT: sltu a7, t3, a6
1626+ ; CHECK-NEXT: sub a4, a4, a5
1627+ ; CHECK-NEXT: sub a5, t3, a6
1628+ ; CHECK-NEXT: sub a3, a3, a2
1629+ ; CHECK-NEXT: sub a2, a4, a7
1630+ ; CHECK-NEXT: sw a1, 0(a0)
1631+ ; CHECK-NEXT: sw a3, 4(a0)
1632+ ; CHECK-NEXT: sw a5, 8(a0)
1633+ ; CHECK-NEXT: sw a2, 12(a0)
1634+ ; CHECK-NEXT: ret
17151635 %cmp = icmp ult i128 %x , %y
17161636 %select = select i1 %cmp , i128 0 , i128 %y
17171637 %sub = sub nuw i128 %x , %select
0 commit comments