@@ -1858,3 +1858,113 @@ define i32 @select_cst6(i1 zeroext %cond) {
18581858 %ret = select i1 %cond , i32 2049 , i32 2047
18591859 ret i32 %ret
18601860}
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