@@ -1858,3 +1858,113 @@ define i32 @select_cst6(i1 zeroext %cond) {
1858
1858
%ret = select i1 %cond , i32 2049 , i32 2047
1859
1859
ret i32 %ret
1860
1860
}
1861
+
1862
+ @select_redundant_czero_eqz_data = global i32 0 , align 4
1863
+
1864
+ define void @select_redundant_czero_eqz1 (ptr %0 , ptr %1 ) {
1865
+ ; RV32IM-LABEL: select_redundant_czero_eqz1:
1866
+ ; RV32IM: # %bb.0: # %entry
1867
+ ; RV32IM-NEXT: bnez a0, .LBB49_2
1868
+ ; RV32IM-NEXT: # %bb.1:
1869
+ ; RV32IM-NEXT: lui a0, %hi(select_redundant_czero_eqz_data)
1870
+ ; RV32IM-NEXT: addi a0, a0, %lo(select_redundant_czero_eqz_data)
1871
+ ; RV32IM-NEXT: .LBB49_2: # %entry
1872
+ ; RV32IM-NEXT: sw a0, 0(a1)
1873
+ ; RV32IM-NEXT: ret
1874
+ ;
1875
+ ; RV64IM-LABEL: select_redundant_czero_eqz1:
1876
+ ; RV64IM: # %bb.0: # %entry
1877
+ ; RV64IM-NEXT: bnez a0, .LBB49_2
1878
+ ; RV64IM-NEXT: # %bb.1:
1879
+ ; RV64IM-NEXT: lui a0, %hi(select_redundant_czero_eqz_data)
1880
+ ; RV64IM-NEXT: addi a0, a0, %lo(select_redundant_czero_eqz_data)
1881
+ ; RV64IM-NEXT: .LBB49_2: # %entry
1882
+ ; RV64IM-NEXT: sd a0, 0(a1)
1883
+ ; RV64IM-NEXT: ret
1884
+ ;
1885
+ ; RV64IMXVTCONDOPS-LABEL: select_redundant_czero_eqz1:
1886
+ ; RV64IMXVTCONDOPS: # %bb.0: # %entry
1887
+ ; RV64IMXVTCONDOPS-NEXT: lui a2, %hi(select_redundant_czero_eqz_data)
1888
+ ; RV64IMXVTCONDOPS-NEXT: addi a2, a2, %lo(select_redundant_czero_eqz_data)
1889
+ ; RV64IMXVTCONDOPS-NEXT: vt.maskcn a2, a2, a0
1890
+ ; RV64IMXVTCONDOPS-NEXT: or a0, a2, a0
1891
+ ; RV64IMXVTCONDOPS-NEXT: sd a0, 0(a1)
1892
+ ; RV64IMXVTCONDOPS-NEXT: ret
1893
+ ;
1894
+ ; RV32IMZICOND-LABEL: select_redundant_czero_eqz1:
1895
+ ; RV32IMZICOND: # %bb.0: # %entry
1896
+ ; RV32IMZICOND-NEXT: lui a2, %hi(select_redundant_czero_eqz_data)
1897
+ ; RV32IMZICOND-NEXT: addi a2, a2, %lo(select_redundant_czero_eqz_data)
1898
+ ; RV32IMZICOND-NEXT: czero.nez a2, a2, a0
1899
+ ; RV32IMZICOND-NEXT: or a0, a2, a0
1900
+ ; RV32IMZICOND-NEXT: sw a0, 0(a1)
1901
+ ; RV32IMZICOND-NEXT: ret
1902
+ ;
1903
+ ; RV64IMZICOND-LABEL: select_redundant_czero_eqz1:
1904
+ ; RV64IMZICOND: # %bb.0: # %entry
1905
+ ; RV64IMZICOND-NEXT: lui a2, %hi(select_redundant_czero_eqz_data)
1906
+ ; RV64IMZICOND-NEXT: addi a2, a2, %lo(select_redundant_czero_eqz_data)
1907
+ ; RV64IMZICOND-NEXT: czero.nez a2, a2, a0
1908
+ ; RV64IMZICOND-NEXT: or a0, a2, a0
1909
+ ; RV64IMZICOND-NEXT: sd a0, 0(a1)
1910
+ ; RV64IMZICOND-NEXT: ret
1911
+ entry:
1912
+ %3 = icmp eq ptr %0 , null
1913
+ %4 = select i1 %3 , ptr @select_redundant_czero_eqz_data , ptr %0
1914
+ store ptr %4 , ptr %1 , align 8
1915
+ ret void
1916
+ }
1917
+
1918
+ define void @select_redundant_czero_eqz2 (ptr %0 , ptr %1 ) {
1919
+ ; RV32IM-LABEL: select_redundant_czero_eqz2:
1920
+ ; RV32IM: # %bb.0: # %entry
1921
+ ; RV32IM-NEXT: bnez a0, .LBB50_2
1922
+ ; RV32IM-NEXT: # %bb.1: # %entry
1923
+ ; RV32IM-NEXT: lui a0, %hi(select_redundant_czero_eqz_data)
1924
+ ; RV32IM-NEXT: addi a0, a0, %lo(select_redundant_czero_eqz_data)
1925
+ ; RV32IM-NEXT: .LBB50_2: # %entry
1926
+ ; RV32IM-NEXT: sw a0, 0(a1)
1927
+ ; RV32IM-NEXT: ret
1928
+ ;
1929
+ ; RV64IM-LABEL: select_redundant_czero_eqz2:
1930
+ ; RV64IM: # %bb.0: # %entry
1931
+ ; RV64IM-NEXT: bnez a0, .LBB50_2
1932
+ ; RV64IM-NEXT: # %bb.1: # %entry
1933
+ ; RV64IM-NEXT: lui a0, %hi(select_redundant_czero_eqz_data)
1934
+ ; RV64IM-NEXT: addi a0, a0, %lo(select_redundant_czero_eqz_data)
1935
+ ; RV64IM-NEXT: .LBB50_2: # %entry
1936
+ ; RV64IM-NEXT: sd a0, 0(a1)
1937
+ ; RV64IM-NEXT: ret
1938
+ ;
1939
+ ; RV64IMXVTCONDOPS-LABEL: select_redundant_czero_eqz2:
1940
+ ; RV64IMXVTCONDOPS: # %bb.0: # %entry
1941
+ ; RV64IMXVTCONDOPS-NEXT: lui a2, %hi(select_redundant_czero_eqz_data)
1942
+ ; RV64IMXVTCONDOPS-NEXT: addi a2, a2, %lo(select_redundant_czero_eqz_data)
1943
+ ; RV64IMXVTCONDOPS-NEXT: vt.maskcn a2, a2, a0
1944
+ ; RV64IMXVTCONDOPS-NEXT: or a0, a0, a2
1945
+ ; RV64IMXVTCONDOPS-NEXT: sd a0, 0(a1)
1946
+ ; RV64IMXVTCONDOPS-NEXT: ret
1947
+ ;
1948
+ ; RV32IMZICOND-LABEL: select_redundant_czero_eqz2:
1949
+ ; RV32IMZICOND: # %bb.0: # %entry
1950
+ ; RV32IMZICOND-NEXT: lui a2, %hi(select_redundant_czero_eqz_data)
1951
+ ; RV32IMZICOND-NEXT: addi a2, a2, %lo(select_redundant_czero_eqz_data)
1952
+ ; RV32IMZICOND-NEXT: czero.nez a2, a2, a0
1953
+ ; RV32IMZICOND-NEXT: or a0, a0, a2
1954
+ ; RV32IMZICOND-NEXT: sw a0, 0(a1)
1955
+ ; RV32IMZICOND-NEXT: ret
1956
+ ;
1957
+ ; RV64IMZICOND-LABEL: select_redundant_czero_eqz2:
1958
+ ; RV64IMZICOND: # %bb.0: # %entry
1959
+ ; RV64IMZICOND-NEXT: lui a2, %hi(select_redundant_czero_eqz_data)
1960
+ ; RV64IMZICOND-NEXT: addi a2, a2, %lo(select_redundant_czero_eqz_data)
1961
+ ; RV64IMZICOND-NEXT: czero.nez a2, a2, a0
1962
+ ; RV64IMZICOND-NEXT: or a0, a0, a2
1963
+ ; RV64IMZICOND-NEXT: sd a0, 0(a1)
1964
+ ; RV64IMZICOND-NEXT: ret
1965
+ entry:
1966
+ %3 = icmp ne ptr %0 , null
1967
+ %4 = select i1 %3 , ptr %0 , ptr @select_redundant_czero_eqz_data
1968
+ store ptr %4 , ptr %1 , align 8
1969
+ ret void
1970
+ }
0 commit comments