@@ -1478,6 +1478,182 @@ func.func @const_fold_vector_inotequal() -> vector<3xi1> {
1478
1478
1479
1479
// -----
1480
1480
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
+
1481
1657
//===----------------------------------------------------------------------===//
1482
1658
// spirv.SLessThan
1483
1659
//===----------------------------------------------------------------------===//
0 commit comments