@@ -1478,6 +1478,182 @@ func.func @const_fold_vector_inotequal() -> vector<3xi1> {
14781478
14791479// -----
14801480
1481+ //===----------------------------------------------------------------------===//
1482+ // spirv.SGreaterThan
1483+ //===----------------------------------------------------------------------===//
1484+
1485+ // CHECK-LABEL: @sgt_same
1486+ func.func @sgt_same (%arg0 : i32 , %arg1 : vector <3 xi32 >) -> (i1 , vector <3 xi1 >) {
1487+ // CHECK-DAG: %[[CFALSE:.*]] = spirv.Constant false
1488+ // CHECK-DAG: %[[CVFALSE:.*]] = spirv.Constant dense<false>
1489+ %0 = spirv.SGreaterThan %arg0 , %arg0 : i32
1490+ %1 = spirv.SGreaterThan %arg1 , %arg1 : vector <3 xi32 >
1491+
1492+ // CHECK: return %[[CFALSE]], %[[CVFALSE]]
1493+ return %0 , %1 : i1 , vector <3 xi1 >
1494+ }
1495+
1496+ // CHECK-LABEL: @const_fold_scalar_sgt
1497+ func.func @const_fold_scalar_sgt () -> (i1 , i1 ) {
1498+ %c4 = spirv.Constant 4 : i32
1499+ %c5 = spirv.Constant 5 : i32
1500+ %c6 = spirv.Constant 6 : i32
1501+
1502+ // CHECK-DAG: %[[CTRUE:.*]] = spirv.Constant true
1503+ // CHECK-DAG: %[[CFALSE:.*]] = spirv.Constant false
1504+ %0 = spirv.SGreaterThan %c5 , %c6 : i32
1505+ %1 = spirv.SGreaterThan %c5 , %c4 : i32
1506+
1507+ // CHECK: return %[[CFALSE]], %[[CTRUE]]
1508+ return %0 , %1 : i1 , i1
1509+ }
1510+
1511+ // CHECK-LABEL: @const_fold_vector_sgt
1512+ func.func @const_fold_vector_sgt () -> vector <3 xi1 > {
1513+ %cv0 = spirv.Constant dense <[-1 , -4 , 3 ]> : vector <3 xi32 >
1514+ %cv1 = spirv.Constant dense <[-1 , -3 , 2 ]> : vector <3 xi32 >
1515+
1516+ // CHECK: %[[RET:.*]] = spirv.Constant dense<[false, false, true]>
1517+ %0 = spirv.SGreaterThan %cv0 , %cv1 : vector <3 xi32 >
1518+
1519+ // CHECK: return %[[RET]]
1520+ return %0 : vector <3 xi1 >
1521+ }
1522+
1523+ // -----
1524+
1525+ //===----------------------------------------------------------------------===//
1526+ // spirv.SGreaterThanEqual
1527+ //===----------------------------------------------------------------------===//
1528+
1529+ // CHECK-LABEL: @sge_same
1530+ func.func @sge_same (%arg0 : i32 , %arg1 : vector <3 xi32 >) -> (i1 , vector <3 xi1 >) {
1531+ // CHECK-DAG: %[[CTRUE:.*]] = spirv.Constant true
1532+ // CHECK-DAG: %[[CVTRUE:.*]] = spirv.Constant dense<true>
1533+ %0 = spirv.SGreaterThanEqual %arg0 , %arg0 : i32
1534+ %1 = spirv.SGreaterThanEqual %arg1 , %arg1 : vector <3 xi32 >
1535+
1536+ // CHECK: return %[[CTRUE]], %[[CVTRUE]]
1537+ return %0 , %1 : i1 , vector <3 xi1 >
1538+ }
1539+
1540+ // CHECK-LABEL: @const_fold_scalar_sge
1541+ func.func @const_fold_scalar_sge () -> (i1 , i1 ) {
1542+ %c4 = spirv.Constant 4 : i32
1543+ %c5 = spirv.Constant 5 : i32
1544+ %c6 = spirv.Constant 6 : i32
1545+
1546+ // CHECK-DAG: %[[CTRUE:.*]] = spirv.Constant true
1547+ // CHECK-DAG: %[[CFALSE:.*]] = spirv.Constant false
1548+ %0 = spirv.SGreaterThanEqual %c5 , %c6 : i32
1549+ %1 = spirv.SGreaterThanEqual %c5 , %c4 : i32
1550+
1551+ // CHECK: return %[[CFALSE]], %[[CTRUE]]
1552+ return %0 , %1 : i1 , i1
1553+ }
1554+
1555+ // CHECK-LABEL: @const_fold_vector_sge
1556+ func.func @const_fold_vector_sge () -> vector <3 xi1 > {
1557+ %cv0 = spirv.Constant dense <[-1 , -4 , 3 ]> : vector <3 xi32 >
1558+ %cv1 = spirv.Constant dense <[-1 , -3 , 2 ]> : vector <3 xi32 >
1559+
1560+ // CHECK: %[[RET:.*]] = spirv.Constant dense<[true, false, true]>
1561+ %0 = spirv.SGreaterThanEqual %cv0 , %cv1 : vector <3 xi32 >
1562+
1563+ // CHECK: return %[[RET]]
1564+ return %0 : vector <3 xi1 >
1565+ }
1566+
1567+ // -----
1568+
1569+ //===----------------------------------------------------------------------===//
1570+ // spirv.UGreaterThan
1571+ //===----------------------------------------------------------------------===//
1572+
1573+ // CHECK-LABEL: @ugt_same
1574+ func.func @ugt_same (%arg0 : i32 , %arg1 : vector <3 xi32 >) -> (i1 , vector <3 xi1 >) {
1575+ // CHECK-DAG: %[[CFALSE:.*]] = spirv.Constant false
1576+ // CHECK-DAG: %[[CVFALSE:.*]] = spirv.Constant dense<false>
1577+ %0 = spirv.UGreaterThan %arg0 , %arg0 : i32
1578+ %1 = spirv.UGreaterThan %arg1 , %arg1 : vector <3 xi32 >
1579+
1580+ // CHECK: return %[[CFALSE]], %[[CVFALSE]]
1581+ return %0 , %1 : i1 , vector <3 xi1 >
1582+ }
1583+
1584+ // CHECK-LABEL: @const_fold_scalar_ugt
1585+ func.func @const_fold_scalar_ugt () -> (i1 , i1 ) {
1586+ %c4 = spirv.Constant 4 : i32
1587+ %c5 = spirv.Constant 5 : i32
1588+ %cn6 = spirv.Constant -6 : i32
1589+
1590+ // CHECK-DAG: %[[CTRUE:.*]] = spirv.Constant true
1591+ // CHECK-DAG: %[[CFALSE:.*]] = spirv.Constant false
1592+ %0 = spirv.UGreaterThan %c5 , %cn6 : i32
1593+ %1 = spirv.UGreaterThan %c5 , %c4 : i32
1594+
1595+ // CHECK: return %[[CFALSE]], %[[CTRUE]]
1596+ return %0 , %1 : i1 , i1
1597+ }
1598+
1599+ // CHECK-LABEL: @const_fold_vector_ugt
1600+ func.func @const_fold_vector_ugt () -> vector <3 xi1 > {
1601+ %cv0 = spirv.Constant dense <[-1 , -4 , 3 ]> : vector <3 xi32 >
1602+ %cv1 = spirv.Constant dense <[-1 , -3 , 2 ]> : vector <3 xi32 >
1603+
1604+ // CHECK: %[[RET:.*]] = spirv.Constant dense<[false, false, true]>
1605+ %0 = spirv.UGreaterThan %cv0 , %cv1 : vector <3 xi32 >
1606+
1607+ // CHECK: return %[[RET]]
1608+ return %0 : vector <3 xi1 >
1609+ }
1610+
1611+ // -----
1612+
1613+ //===----------------------------------------------------------------------===//
1614+ // spirv.UGreaterThanEqual
1615+ //===----------------------------------------------------------------------===//
1616+
1617+ // CHECK-LABEL: @uge_same
1618+ func.func @uge_same (%arg0 : i32 , %arg1 : vector <3 xi32 >) -> (i1 , vector <3 xi1 >) {
1619+ // CHECK-DAG: %[[CTRUE:.*]] = spirv.Constant true
1620+ // CHECK-DAG: %[[CVTRUE:.*]] = spirv.Constant dense<true>
1621+ %0 = spirv.UGreaterThanEqual %arg0 , %arg0 : i32
1622+ %1 = spirv.UGreaterThanEqual %arg1 , %arg1 : vector <3 xi32 >
1623+
1624+ // CHECK: return %[[CTRUE]], %[[CVTRUE]]
1625+ return %0 , %1 : i1 , vector <3 xi1 >
1626+ }
1627+
1628+ // CHECK-LABEL: @const_fold_scalar_uge
1629+ func.func @const_fold_scalar_uge () -> (i1 , i1 ) {
1630+ %c4 = spirv.Constant 4 : i32
1631+ %c5 = spirv.Constant 5 : i32
1632+ %cn6 = spirv.Constant -6 : i32
1633+
1634+ // CHECK-DAG: %[[CTRUE:.*]] = spirv.Constant true
1635+ // CHECK-DAG: %[[CFALSE:.*]] = spirv.Constant false
1636+ %0 = spirv.UGreaterThanEqual %c5 , %cn6 : i32
1637+ %1 = spirv.UGreaterThanEqual %c5 , %c4 : i32
1638+
1639+ // CHECK: return %[[CFALSE]], %[[CTRUE]]
1640+ return %0 , %1 : i1 , i1
1641+ }
1642+
1643+ // CHECK-LABEL: @const_fold_vector_uge
1644+ func.func @const_fold_vector_uge () -> vector <3 xi1 > {
1645+ %cv0 = spirv.Constant dense <[-1 , -4 , 3 ]> : vector <3 xi32 >
1646+ %cv1 = spirv.Constant dense <[-1 , -3 , 2 ]> : vector <3 xi32 >
1647+
1648+ // CHECK: %[[RET:.*]] = spirv.Constant dense<[true, false, true]>
1649+ %0 = spirv.UGreaterThanEqual %cv0 , %cv1 : vector <3 xi32 >
1650+
1651+ // CHECK: return %[[RET]]
1652+ return %0 : vector <3 xi1 >
1653+ }
1654+
1655+ // -----
1656+
14811657//===----------------------------------------------------------------------===//
14821658// spirv.SLessThan
14831659//===----------------------------------------------------------------------===//
0 commit comments