@@ -1626,3 +1626,284 @@ define i32 @select_cst_unknown(i32 signext %a, i32 signext %b) {
1626
1626
%ret = select i1 %cond , i32 5 , i32 -7
1627
1627
ret i32 %ret
1628
1628
}
1629
+
1630
+ define i32 @select_cst1 (i1 zeroext %cond ) {
1631
+ ; RV32IM-LABEL: select_cst1:
1632
+ ; RV32IM: # %bb.0:
1633
+ ; RV32IM-NEXT: mv a1, a0
1634
+ ; RV32IM-NEXT: li a0, 10
1635
+ ; RV32IM-NEXT: bnez a1, .LBB43_2
1636
+ ; RV32IM-NEXT: # %bb.1:
1637
+ ; RV32IM-NEXT: li a0, 20
1638
+ ; RV32IM-NEXT: .LBB43_2:
1639
+ ; RV32IM-NEXT: ret
1640
+ ;
1641
+ ; RV64IM-LABEL: select_cst1:
1642
+ ; RV64IM: # %bb.0:
1643
+ ; RV64IM-NEXT: mv a1, a0
1644
+ ; RV64IM-NEXT: li a0, 10
1645
+ ; RV64IM-NEXT: bnez a1, .LBB43_2
1646
+ ; RV64IM-NEXT: # %bb.1:
1647
+ ; RV64IM-NEXT: li a0, 20
1648
+ ; RV64IM-NEXT: .LBB43_2:
1649
+ ; RV64IM-NEXT: ret
1650
+ ;
1651
+ ; RV64IMXVTCONDOPS-LABEL: select_cst1:
1652
+ ; RV64IMXVTCONDOPS: # %bb.0:
1653
+ ; RV64IMXVTCONDOPS-NEXT: li a1, 20
1654
+ ; RV64IMXVTCONDOPS-NEXT: vt.maskcn a1, a1, a0
1655
+ ; RV64IMXVTCONDOPS-NEXT: li a2, 10
1656
+ ; RV64IMXVTCONDOPS-NEXT: vt.maskc a0, a2, a0
1657
+ ; RV64IMXVTCONDOPS-NEXT: or a0, a0, a1
1658
+ ; RV64IMXVTCONDOPS-NEXT: ret
1659
+ ;
1660
+ ; CHECKZICOND-LABEL: select_cst1:
1661
+ ; CHECKZICOND: # %bb.0:
1662
+ ; CHECKZICOND-NEXT: li a1, 20
1663
+ ; CHECKZICOND-NEXT: czero.nez a1, a1, a0
1664
+ ; CHECKZICOND-NEXT: li a2, 10
1665
+ ; CHECKZICOND-NEXT: czero.eqz a0, a2, a0
1666
+ ; CHECKZICOND-NEXT: or a0, a0, a1
1667
+ ; CHECKZICOND-NEXT: ret
1668
+ %ret = select i1 %cond , i32 10 , i32 20
1669
+ ret i32 %ret
1670
+ }
1671
+
1672
+ define i32 @select_cst2 (i1 zeroext %cond ) {
1673
+ ; RV32IM-LABEL: select_cst2:
1674
+ ; RV32IM: # %bb.0:
1675
+ ; RV32IM-NEXT: mv a1, a0
1676
+ ; RV32IM-NEXT: li a0, 10
1677
+ ; RV32IM-NEXT: bnez a1, .LBB44_2
1678
+ ; RV32IM-NEXT: # %bb.1:
1679
+ ; RV32IM-NEXT: lui a0, 5
1680
+ ; RV32IM-NEXT: addi a0, a0, -480
1681
+ ; RV32IM-NEXT: .LBB44_2:
1682
+ ; RV32IM-NEXT: ret
1683
+ ;
1684
+ ; RV64IM-LABEL: select_cst2:
1685
+ ; RV64IM: # %bb.0:
1686
+ ; RV64IM-NEXT: mv a1, a0
1687
+ ; RV64IM-NEXT: li a0, 10
1688
+ ; RV64IM-NEXT: bnez a1, .LBB44_2
1689
+ ; RV64IM-NEXT: # %bb.1:
1690
+ ; RV64IM-NEXT: lui a0, 5
1691
+ ; RV64IM-NEXT: addiw a0, a0, -480
1692
+ ; RV64IM-NEXT: .LBB44_2:
1693
+ ; RV64IM-NEXT: ret
1694
+ ;
1695
+ ; RV64IMXVTCONDOPS-LABEL: select_cst2:
1696
+ ; RV64IMXVTCONDOPS: # %bb.0:
1697
+ ; RV64IMXVTCONDOPS-NEXT: li a1, 10
1698
+ ; RV64IMXVTCONDOPS-NEXT: vt.maskc a1, a1, a0
1699
+ ; RV64IMXVTCONDOPS-NEXT: lui a2, 5
1700
+ ; RV64IMXVTCONDOPS-NEXT: addiw a2, a2, -480
1701
+ ; RV64IMXVTCONDOPS-NEXT: vt.maskcn a0, a2, a0
1702
+ ; RV64IMXVTCONDOPS-NEXT: or a0, a1, a0
1703
+ ; RV64IMXVTCONDOPS-NEXT: ret
1704
+ ;
1705
+ ; RV32IMZICOND-LABEL: select_cst2:
1706
+ ; RV32IMZICOND: # %bb.0:
1707
+ ; RV32IMZICOND-NEXT: li a1, 10
1708
+ ; RV32IMZICOND-NEXT: czero.eqz a1, a1, a0
1709
+ ; RV32IMZICOND-NEXT: lui a2, 5
1710
+ ; RV32IMZICOND-NEXT: addi a2, a2, -480
1711
+ ; RV32IMZICOND-NEXT: czero.nez a0, a2, a0
1712
+ ; RV32IMZICOND-NEXT: or a0, a1, a0
1713
+ ; RV32IMZICOND-NEXT: ret
1714
+ ;
1715
+ ; RV64IMZICOND-LABEL: select_cst2:
1716
+ ; RV64IMZICOND: # %bb.0:
1717
+ ; RV64IMZICOND-NEXT: li a1, 10
1718
+ ; RV64IMZICOND-NEXT: czero.eqz a1, a1, a0
1719
+ ; RV64IMZICOND-NEXT: lui a2, 5
1720
+ ; RV64IMZICOND-NEXT: addiw a2, a2, -480
1721
+ ; RV64IMZICOND-NEXT: czero.nez a0, a2, a0
1722
+ ; RV64IMZICOND-NEXT: or a0, a1, a0
1723
+ ; RV64IMZICOND-NEXT: ret
1724
+ %ret = select i1 %cond , i32 10 , i32 20000
1725
+ ret i32 %ret
1726
+ }
1727
+
1728
+ define i32 @select_cst3 (i1 zeroext %cond ) {
1729
+ ; RV32IM-LABEL: select_cst3:
1730
+ ; RV32IM: # %bb.0:
1731
+ ; RV32IM-NEXT: bnez a0, .LBB45_2
1732
+ ; RV32IM-NEXT: # %bb.1:
1733
+ ; RV32IM-NEXT: lui a0, 5
1734
+ ; RV32IM-NEXT: addi a0, a0, -480
1735
+ ; RV32IM-NEXT: ret
1736
+ ; RV32IM-NEXT: .LBB45_2:
1737
+ ; RV32IM-NEXT: lui a0, 7
1738
+ ; RV32IM-NEXT: addi a0, a0, 1328
1739
+ ; RV32IM-NEXT: ret
1740
+ ;
1741
+ ; RV64IM-LABEL: select_cst3:
1742
+ ; RV64IM: # %bb.0:
1743
+ ; RV64IM-NEXT: bnez a0, .LBB45_2
1744
+ ; RV64IM-NEXT: # %bb.1:
1745
+ ; RV64IM-NEXT: lui a0, 5
1746
+ ; RV64IM-NEXT: addiw a0, a0, -480
1747
+ ; RV64IM-NEXT: ret
1748
+ ; RV64IM-NEXT: .LBB45_2:
1749
+ ; RV64IM-NEXT: lui a0, 7
1750
+ ; RV64IM-NEXT: addiw a0, a0, 1328
1751
+ ; RV64IM-NEXT: ret
1752
+ ;
1753
+ ; RV64IMXVTCONDOPS-LABEL: select_cst3:
1754
+ ; RV64IMXVTCONDOPS: # %bb.0:
1755
+ ; RV64IMXVTCONDOPS-NEXT: lui a1, 5
1756
+ ; RV64IMXVTCONDOPS-NEXT: addiw a1, a1, -480
1757
+ ; RV64IMXVTCONDOPS-NEXT: vt.maskcn a1, a1, a0
1758
+ ; RV64IMXVTCONDOPS-NEXT: lui a2, 7
1759
+ ; RV64IMXVTCONDOPS-NEXT: addiw a2, a2, 1328
1760
+ ; RV64IMXVTCONDOPS-NEXT: vt.maskc a0, a2, a0
1761
+ ; RV64IMXVTCONDOPS-NEXT: or a0, a0, a1
1762
+ ; RV64IMXVTCONDOPS-NEXT: ret
1763
+ ;
1764
+ ; RV32IMZICOND-LABEL: select_cst3:
1765
+ ; RV32IMZICOND: # %bb.0:
1766
+ ; RV32IMZICOND-NEXT: lui a1, 5
1767
+ ; RV32IMZICOND-NEXT: addi a1, a1, -480
1768
+ ; RV32IMZICOND-NEXT: czero.nez a1, a1, a0
1769
+ ; RV32IMZICOND-NEXT: lui a2, 7
1770
+ ; RV32IMZICOND-NEXT: addi a2, a2, 1328
1771
+ ; RV32IMZICOND-NEXT: czero.eqz a0, a2, a0
1772
+ ; RV32IMZICOND-NEXT: or a0, a0, a1
1773
+ ; RV32IMZICOND-NEXT: ret
1774
+ ;
1775
+ ; RV64IMZICOND-LABEL: select_cst3:
1776
+ ; RV64IMZICOND: # %bb.0:
1777
+ ; RV64IMZICOND-NEXT: lui a1, 5
1778
+ ; RV64IMZICOND-NEXT: addiw a1, a1, -480
1779
+ ; RV64IMZICOND-NEXT: czero.nez a1, a1, a0
1780
+ ; RV64IMZICOND-NEXT: lui a2, 7
1781
+ ; RV64IMZICOND-NEXT: addiw a2, a2, 1328
1782
+ ; RV64IMZICOND-NEXT: czero.eqz a0, a2, a0
1783
+ ; RV64IMZICOND-NEXT: or a0, a0, a1
1784
+ ; RV64IMZICOND-NEXT: ret
1785
+ %ret = select i1 %cond , i32 30000 , i32 20000
1786
+ ret i32 %ret
1787
+ }
1788
+
1789
+ define i32 @select_cst4 (i1 zeroext %cond ) {
1790
+ ; CHECK-LABEL: select_cst4:
1791
+ ; CHECK: # %bb.0:
1792
+ ; CHECK-NEXT: neg a0, a0
1793
+ ; CHECK-NEXT: xori a0, a0, 2047
1794
+ ; CHECK-NEXT: ret
1795
+ %ret = select i1 %cond , i32 -2048 , i32 2047
1796
+ ret i32 %ret
1797
+ }
1798
+
1799
+ define i32 @select_cst5 (i1 zeroext %cond ) {
1800
+ ; RV32IM-LABEL: select_cst5:
1801
+ ; RV32IM: # %bb.0:
1802
+ ; RV32IM-NEXT: mv a1, a0
1803
+ ; RV32IM-NEXT: li a0, 2047
1804
+ ; RV32IM-NEXT: bnez a1, .LBB47_2
1805
+ ; RV32IM-NEXT: # %bb.1:
1806
+ ; RV32IM-NEXT: lui a0, 1
1807
+ ; RV32IM-NEXT: addi a0, a0, -2047
1808
+ ; RV32IM-NEXT: .LBB47_2:
1809
+ ; RV32IM-NEXT: ret
1810
+ ;
1811
+ ; RV64IM-LABEL: select_cst5:
1812
+ ; RV64IM: # %bb.0:
1813
+ ; RV64IM-NEXT: mv a1, a0
1814
+ ; RV64IM-NEXT: li a0, 2047
1815
+ ; RV64IM-NEXT: bnez a1, .LBB47_2
1816
+ ; RV64IM-NEXT: # %bb.1:
1817
+ ; RV64IM-NEXT: lui a0, 1
1818
+ ; RV64IM-NEXT: addiw a0, a0, -2047
1819
+ ; RV64IM-NEXT: .LBB47_2:
1820
+ ; RV64IM-NEXT: ret
1821
+ ;
1822
+ ; RV64IMXVTCONDOPS-LABEL: select_cst5:
1823
+ ; RV64IMXVTCONDOPS: # %bb.0:
1824
+ ; RV64IMXVTCONDOPS-NEXT: li a1, 2047
1825
+ ; RV64IMXVTCONDOPS-NEXT: vt.maskc a1, a1, a0
1826
+ ; RV64IMXVTCONDOPS-NEXT: lui a2, 1
1827
+ ; RV64IMXVTCONDOPS-NEXT: addiw a2, a2, -2047
1828
+ ; RV64IMXVTCONDOPS-NEXT: vt.maskcn a0, a2, a0
1829
+ ; RV64IMXVTCONDOPS-NEXT: or a0, a1, a0
1830
+ ; RV64IMXVTCONDOPS-NEXT: ret
1831
+ ;
1832
+ ; RV32IMZICOND-LABEL: select_cst5:
1833
+ ; RV32IMZICOND: # %bb.0:
1834
+ ; RV32IMZICOND-NEXT: li a1, 2047
1835
+ ; RV32IMZICOND-NEXT: czero.eqz a1, a1, a0
1836
+ ; RV32IMZICOND-NEXT: lui a2, 1
1837
+ ; RV32IMZICOND-NEXT: addi a2, a2, -2047
1838
+ ; RV32IMZICOND-NEXT: czero.nez a0, a2, a0
1839
+ ; RV32IMZICOND-NEXT: or a0, a1, a0
1840
+ ; RV32IMZICOND-NEXT: ret
1841
+ ;
1842
+ ; RV64IMZICOND-LABEL: select_cst5:
1843
+ ; RV64IMZICOND: # %bb.0:
1844
+ ; RV64IMZICOND-NEXT: li a1, 2047
1845
+ ; RV64IMZICOND-NEXT: czero.eqz a1, a1, a0
1846
+ ; RV64IMZICOND-NEXT: lui a2, 1
1847
+ ; RV64IMZICOND-NEXT: addiw a2, a2, -2047
1848
+ ; RV64IMZICOND-NEXT: czero.nez a0, a2, a0
1849
+ ; RV64IMZICOND-NEXT: or a0, a1, a0
1850
+ ; RV64IMZICOND-NEXT: ret
1851
+ %ret = select i1 %cond , i32 2047 , i32 2049
1852
+ ret i32 %ret
1853
+ }
1854
+
1855
+ define i32 @select_cst6 (i1 zeroext %cond ) {
1856
+ ; RV32IM-LABEL: select_cst6:
1857
+ ; RV32IM: # %bb.0:
1858
+ ; RV32IM-NEXT: bnez a0, .LBB48_2
1859
+ ; RV32IM-NEXT: # %bb.1:
1860
+ ; RV32IM-NEXT: li a0, 2047
1861
+ ; RV32IM-NEXT: ret
1862
+ ; RV32IM-NEXT: .LBB48_2:
1863
+ ; RV32IM-NEXT: lui a0, 1
1864
+ ; RV32IM-NEXT: addi a0, a0, -2047
1865
+ ; RV32IM-NEXT: ret
1866
+ ;
1867
+ ; RV64IM-LABEL: select_cst6:
1868
+ ; RV64IM: # %bb.0:
1869
+ ; RV64IM-NEXT: bnez a0, .LBB48_2
1870
+ ; RV64IM-NEXT: # %bb.1:
1871
+ ; RV64IM-NEXT: li a0, 2047
1872
+ ; RV64IM-NEXT: ret
1873
+ ; RV64IM-NEXT: .LBB48_2:
1874
+ ; RV64IM-NEXT: lui a0, 1
1875
+ ; RV64IM-NEXT: addiw a0, a0, -2047
1876
+ ; RV64IM-NEXT: ret
1877
+ ;
1878
+ ; RV64IMXVTCONDOPS-LABEL: select_cst6:
1879
+ ; RV64IMXVTCONDOPS: # %bb.0:
1880
+ ; RV64IMXVTCONDOPS-NEXT: li a1, 2047
1881
+ ; RV64IMXVTCONDOPS-NEXT: vt.maskcn a1, a1, a0
1882
+ ; RV64IMXVTCONDOPS-NEXT: lui a2, 1
1883
+ ; RV64IMXVTCONDOPS-NEXT: addiw a2, a2, -2047
1884
+ ; RV64IMXVTCONDOPS-NEXT: vt.maskc a0, a2, a0
1885
+ ; RV64IMXVTCONDOPS-NEXT: or a0, a0, a1
1886
+ ; RV64IMXVTCONDOPS-NEXT: ret
1887
+ ;
1888
+ ; RV32IMZICOND-LABEL: select_cst6:
1889
+ ; RV32IMZICOND: # %bb.0:
1890
+ ; RV32IMZICOND-NEXT: li a1, 2047
1891
+ ; RV32IMZICOND-NEXT: czero.nez a1, a1, a0
1892
+ ; RV32IMZICOND-NEXT: lui a2, 1
1893
+ ; RV32IMZICOND-NEXT: addi a2, a2, -2047
1894
+ ; RV32IMZICOND-NEXT: czero.eqz a0, a2, a0
1895
+ ; RV32IMZICOND-NEXT: or a0, a0, a1
1896
+ ; RV32IMZICOND-NEXT: ret
1897
+ ;
1898
+ ; RV64IMZICOND-LABEL: select_cst6:
1899
+ ; RV64IMZICOND: # %bb.0:
1900
+ ; RV64IMZICOND-NEXT: li a1, 2047
1901
+ ; RV64IMZICOND-NEXT: czero.nez a1, a1, a0
1902
+ ; RV64IMZICOND-NEXT: lui a2, 1
1903
+ ; RV64IMZICOND-NEXT: addiw a2, a2, -2047
1904
+ ; RV64IMZICOND-NEXT: czero.eqz a0, a2, a0
1905
+ ; RV64IMZICOND-NEXT: or a0, a0, a1
1906
+ ; RV64IMZICOND-NEXT: ret
1907
+ %ret = select i1 %cond , i32 2049 , i32 2047
1908
+ ret i32 %ret
1909
+ }
0 commit comments