@@ -1851,300 +1851,6 @@ define void @exp_compr_disabled_inputs_to_undef(<2 x half> %xy, <2 x half> %zw)
18511851 ret void
18521852}
18531853
1854- ; --------------------------------------------------------------------
1855- ; llvm.amdgcn.fmed3
1856- ; --------------------------------------------------------------------
1857-
1858- declare float @llvm.amdgcn.fmed3.f32 (float , float , float ) nounwind readnone
1859-
1860- define float @fmed3_f32 (float %x , float %y , float %z ) {
1861- ; CHECK-LABEL: @fmed3_f32(
1862- ; CHECK-NEXT: [[MED3:%.*]] = call float @llvm.amdgcn.fmed3.f32(float [[X:%.*]], float [[Y:%.*]], float [[Z:%.*]])
1863- ; CHECK-NEXT: ret float [[MED3]]
1864- ;
1865- %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float %y , float %z )
1866- ret float %med3
1867- }
1868-
1869- define float @fmed3_canonicalize_x_c0_c1_f32 (float %x ) {
1870- ; CHECK-LABEL: @fmed3_canonicalize_x_c0_c1_f32(
1871- ; CHECK-NEXT: [[MED3:%.*]] = call float @llvm.amdgcn.fmed3.f32(float [[X:%.*]], float 0.000000e+00, float 1.000000e+00)
1872- ; CHECK-NEXT: ret float [[MED3]]
1873- ;
1874- %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float 0 .0 , float 1 .0 )
1875- ret float %med3
1876- }
1877-
1878- define float @fmed3_canonicalize_c0_x_c1_f32 (float %x ) {
1879- ; CHECK-LABEL: @fmed3_canonicalize_c0_x_c1_f32(
1880- ; CHECK-NEXT: [[MED3:%.*]] = call float @llvm.amdgcn.fmed3.f32(float [[X:%.*]], float 0.000000e+00, float 1.000000e+00)
1881- ; CHECK-NEXT: ret float [[MED3]]
1882- ;
1883- %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0 .0 , float %x , float 1 .0 )
1884- ret float %med3
1885- }
1886-
1887- define float @fmed3_canonicalize_c0_c1_x_f32 (float %x ) {
1888- ; CHECK-LABEL: @fmed3_canonicalize_c0_c1_x_f32(
1889- ; CHECK-NEXT: [[MED3:%.*]] = call float @llvm.amdgcn.fmed3.f32(float [[X:%.*]], float 0.000000e+00, float 1.000000e+00)
1890- ; CHECK-NEXT: ret float [[MED3]]
1891- ;
1892- %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0 .0 , float 1 .0 , float %x )
1893- ret float %med3
1894- }
1895-
1896- define float @fmed3_canonicalize_x_y_c_f32 (float %x , float %y ) {
1897- ; CHECK-LABEL: @fmed3_canonicalize_x_y_c_f32(
1898- ; CHECK-NEXT: [[MED3:%.*]] = call float @llvm.amdgcn.fmed3.f32(float [[X:%.*]], float [[Y:%.*]], float 1.000000e+00)
1899- ; CHECK-NEXT: ret float [[MED3]]
1900- ;
1901- %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float %y , float 1 .0 )
1902- ret float %med3
1903- }
1904-
1905- define float @fmed3_canonicalize_x_c_y_f32 (float %x , float %y ) {
1906- ; CHECK-LABEL: @fmed3_canonicalize_x_c_y_f32(
1907- ; CHECK-NEXT: [[MED3:%.*]] = call float @llvm.amdgcn.fmed3.f32(float [[X:%.*]], float [[Y:%.*]], float 1.000000e+00)
1908- ; CHECK-NEXT: ret float [[MED3]]
1909- ;
1910- %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float 1 .0 , float %y )
1911- ret float %med3
1912- }
1913-
1914- define float @fmed3_canonicalize_c_x_y_f32 (float %x , float %y ) {
1915- ; CHECK-LABEL: @fmed3_canonicalize_c_x_y_f32(
1916- ; CHECK-NEXT: [[MED3:%.*]] = call float @llvm.amdgcn.fmed3.f32(float [[X:%.*]], float [[Y:%.*]], float 1.000000e+00)
1917- ; CHECK-NEXT: ret float [[MED3]]
1918- ;
1919- %med3 = call float @llvm.amdgcn.fmed3.f32 (float 1 .0 , float %x , float %y )
1920- ret float %med3
1921- }
1922-
1923- define float @fmed3_undef_x_y_f32 (float %x , float %y ) {
1924- ; CHECK-LABEL: @fmed3_undef_x_y_f32(
1925- ; CHECK-NEXT: [[MED3:%.*]] = call float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
1926- ; CHECK-NEXT: ret float [[MED3]]
1927- ;
1928- %med3 = call float @llvm.amdgcn.fmed3.f32 (float undef , float %x , float %y )
1929- ret float %med3
1930- }
1931-
1932- define float @fmed3_fmf_undef_x_y_f32 (float %x , float %y ) {
1933- ; CHECK-LABEL: @fmed3_fmf_undef_x_y_f32(
1934- ; CHECK-NEXT: [[MED3:%.*]] = call nnan float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
1935- ; CHECK-NEXT: ret float [[MED3]]
1936- ;
1937- %med3 = call nnan float @llvm.amdgcn.fmed3.f32 (float undef , float %x , float %y )
1938- ret float %med3
1939- }
1940-
1941- define float @fmed3_x_undef_y_f32 (float %x , float %y ) {
1942- ; CHECK-LABEL: @fmed3_x_undef_y_f32(
1943- ; CHECK-NEXT: [[MED3:%.*]] = call float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
1944- ; CHECK-NEXT: ret float [[MED3]]
1945- ;
1946- %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float undef , float %y )
1947- ret float %med3
1948- }
1949-
1950- define float @fmed3_x_y_undef_f32 (float %x , float %y ) {
1951- ; CHECK-LABEL: @fmed3_x_y_undef_f32(
1952- ; CHECK-NEXT: [[MED3:%.*]] = call float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
1953- ; CHECK-NEXT: ret float [[MED3]]
1954- ;
1955- %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float %y , float undef )
1956- ret float %med3
1957- }
1958-
1959- define float @fmed3_qnan0_x_y_f32 (float %x , float %y ) {
1960- ; CHECK-LABEL: @fmed3_qnan0_x_y_f32(
1961- ; CHECK-NEXT: [[MED3:%.*]] = call float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
1962- ; CHECK-NEXT: ret float [[MED3]]
1963- ;
1964- %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0x7FF8000000000000 , float %x , float %y )
1965- ret float %med3
1966- }
1967-
1968- define float @fmed3_x_qnan0_y_f32 (float %x , float %y ) {
1969- ; CHECK-LABEL: @fmed3_x_qnan0_y_f32(
1970- ; CHECK-NEXT: [[MED3:%.*]] = call float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
1971- ; CHECK-NEXT: ret float [[MED3]]
1972- ;
1973- %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float 0x7FF8000000000000 , float %y )
1974- ret float %med3
1975- }
1976-
1977- define float @fmed3_x_y_qnan0_f32 (float %x , float %y ) {
1978- ; CHECK-LABEL: @fmed3_x_y_qnan0_f32(
1979- ; CHECK-NEXT: [[MED3:%.*]] = call float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
1980- ; CHECK-NEXT: ret float [[MED3]]
1981- ;
1982- %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float %y , float 0x7FF8000000000000 )
1983- ret float %med3
1984- }
1985-
1986- define float @fmed3_qnan1_x_y_f32 (float %x , float %y ) {
1987- ; CHECK-LABEL: @fmed3_qnan1_x_y_f32(
1988- ; CHECK-NEXT: [[MED3:%.*]] = call float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
1989- ; CHECK-NEXT: ret float [[MED3]]
1990- ;
1991- %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0x7FF8000100000000 , float %x , float %y )
1992- ret float %med3
1993- }
1994-
1995- ; This can return any of the qnans.
1996- define float @fmed3_qnan0_qnan1_qnan2_f32 (float %x , float %y ) {
1997- ; CHECK-LABEL: @fmed3_qnan0_qnan1_qnan2_f32(
1998- ; CHECK-NEXT: ret float 0x7FF8030000000000
1999- ;
2000- %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0x7FF8000100000000 , float 0x7FF8002000000000 , float 0x7FF8030000000000 )
2001- ret float %med3
2002- }
2003-
2004- define float @fmed3_constant_src0_0_f32 (float %x , float %y ) {
2005- ; CHECK-LABEL: @fmed3_constant_src0_0_f32(
2006- ; CHECK-NEXT: ret float 5.000000e-01
2007- ;
2008- %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0 .5 , float -1 .0 , float 4 .0 )
2009- ret float %med3
2010- }
2011-
2012- define float @fmed3_constant_src0_1_f32 (float %x , float %y ) {
2013- ; CHECK-LABEL: @fmed3_constant_src0_1_f32(
2014- ; CHECK-NEXT: ret float 5.000000e-01
2015- ;
2016- %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0 .5 , float 4 .0 , float -1 .0 )
2017- ret float %med3
2018- }
2019-
2020- define float @fmed3_constant_src1_0_f32 (float %x , float %y ) {
2021- ; CHECK-LABEL: @fmed3_constant_src1_0_f32(
2022- ; CHECK-NEXT: ret float 5.000000e-01
2023- ;
2024- %med3 = call float @llvm.amdgcn.fmed3.f32 (float -1 .0 , float 0 .5 , float 4 .0 )
2025- ret float %med3
2026- }
2027-
2028- define float @fmed3_constant_src1_1_f32 (float %x , float %y ) {
2029- ; CHECK-LABEL: @fmed3_constant_src1_1_f32(
2030- ; CHECK-NEXT: ret float 5.000000e-01
2031- ;
2032- %med3 = call float @llvm.amdgcn.fmed3.f32 (float 4 .0 , float 0 .5 , float -1 .0 )
2033- ret float %med3
2034- }
2035-
2036- define float @fmed3_constant_src2_0_f32 (float %x , float %y ) {
2037- ; CHECK-LABEL: @fmed3_constant_src2_0_f32(
2038- ; CHECK-NEXT: ret float 5.000000e-01
2039- ;
2040- %med3 = call float @llvm.amdgcn.fmed3.f32 (float -1 .0 , float 4 .0 , float 0 .5 )
2041- ret float %med3
2042- }
2043-
2044- define float @fmed3_constant_src2_1_f32 (float %x , float %y ) {
2045- ; CHECK-LABEL: @fmed3_constant_src2_1_f32(
2046- ; CHECK-NEXT: ret float 5.000000e-01
2047- ;
2048- %med3 = call float @llvm.amdgcn.fmed3.f32 (float 4 .0 , float -1 .0 , float 0 .5 )
2049- ret float %med3
2050- }
2051-
2052- define float @fmed3_x_qnan0_qnan1_f32 (float %x ) {
2053- ; CHECK-LABEL: @fmed3_x_qnan0_qnan1_f32(
2054- ; CHECK-NEXT: ret float [[X:%.*]]
2055- ;
2056- %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float 0x7FF8001000000000 , float 0x7FF8002000000000 )
2057- ret float %med3
2058- }
2059-
2060- define float @fmed3_qnan0_x_qnan1_f32 (float %x ) {
2061- ; CHECK-LABEL: @fmed3_qnan0_x_qnan1_f32(
2062- ; CHECK-NEXT: ret float [[X:%.*]]
2063- ;
2064- %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0x7FF8001000000000 , float %x , float 0x7FF8002000000000 )
2065- ret float %med3
2066- }
2067-
2068- define float @fmed3_qnan0_qnan1_x_f32 (float %x ) {
2069- ; CHECK-LABEL: @fmed3_qnan0_qnan1_x_f32(
2070- ; CHECK-NEXT: ret float [[X:%.*]]
2071- ;
2072- %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0x7FF8001000000000 , float 0x7FF8002000000000 , float %x )
2073- ret float %med3
2074- }
2075-
2076- define float @fmed3_nan_0_1_f32 () {
2077- ; CHECK-LABEL: @fmed3_nan_0_1_f32(
2078- ; CHECK-NEXT: ret float 0.000000e+00
2079- ;
2080- %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0x7FF8001000000000 , float 0 .0 , float 1 .0 )
2081- ret float %med3
2082- }
2083-
2084- define float @fmed3_0_nan_1_f32 () {
2085- ; CHECK-LABEL: @fmed3_0_nan_1_f32(
2086- ; CHECK-NEXT: ret float 0.000000e+00
2087- ;
2088- %med = call float @llvm.amdgcn.fmed3.f32 (float 0 .0 , float 0x7FF8001000000000 , float 1 .0 )
2089- ret float %med
2090- }
2091-
2092- define float @fmed3_0_1_nan_f32 () {
2093- ; CHECK-LABEL: @fmed3_0_1_nan_f32(
2094- ; CHECK-NEXT: ret float 1.000000e+00
2095- ;
2096- %med = call float @llvm.amdgcn.fmed3.f32 (float 0 .0 , float 1 .0 , float 0x7FF8001000000000 )
2097- ret float %med
2098- }
2099-
2100- define float @fmed3_undef_0_1_f32 () {
2101- ; CHECK-LABEL: @fmed3_undef_0_1_f32(
2102- ; CHECK-NEXT: ret float 0.000000e+00
2103- ;
2104- %med3 = call float @llvm.amdgcn.fmed3.f32 (float undef , float 0 .0 , float 1 .0 )
2105- ret float %med3
2106- }
2107-
2108- define float @fmed3_0_undef_1_f32 () {
2109- ; CHECK-LABEL: @fmed3_0_undef_1_f32(
2110- ; CHECK-NEXT: ret float 0.000000e+00
2111- ;
2112- %med = call float @llvm.amdgcn.fmed3.f32 (float 0 .0 , float undef , float 1 .0 )
2113- ret float %med
2114- }
2115-
2116- define float @fmed3_0_1_undef_f32 () {
2117- ; CHECK-LABEL: @fmed3_0_1_undef_f32(
2118- ; CHECK-NEXT: ret float 1.000000e+00
2119- ;
2120- %med = call float @llvm.amdgcn.fmed3.f32 (float 0 .0 , float 1 .0 , float undef )
2121- ret float %med
2122- }
2123-
2124- define float @fmed3_poison_x_y_f32 (float %x , float %y ) {
2125- ; CHECK-LABEL: @fmed3_poison_x_y_f32(
2126- ; CHECK-NEXT: ret float poison
2127- ;
2128- %med3 = call float @llvm.amdgcn.fmed3.f32 (float poison, float %x , float %y )
2129- ret float %med3
2130- }
2131-
2132- define float @fmed3_x_poison_y_f32 (float %x , float %y ) {
2133- ; CHECK-LABEL: @fmed3_x_poison_y_f32(
2134- ; CHECK-NEXT: ret float poison
2135- ;
2136- %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float poison, float %y )
2137- ret float %med3
2138- }
2139-
2140- define float @fmed3_x_y_poison_f32 (float %x , float %y ) {
2141- ; CHECK-LABEL: @fmed3_x_y_poison_f32(
2142- ; CHECK-NEXT: ret float poison
2143- ;
2144- %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float %y , float poison)
2145- ret float %med3
2146- }
2147-
21481854; --------------------------------------------------------------------
21491855; llvm.amdgcn.icmp
21501856; --------------------------------------------------------------------
0 commit comments