16eec8013SPiotr Sobczak; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*5a3299a6SMatt Arsenault; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX12-SDAG %s 3*5a3299a6SMatt Arsenault; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX12-GISEL %s 46eec8013SPiotr Sobczak 56eec8013SPiotr Sobczakdefine amdgpu_ps float @test_fminimum_f32_vv(float %a, float %b) { 66eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_f32_vv: 76eec8013SPiotr Sobczak; GCN: ; %bb.0: 86eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v0, v0, v1 96eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 106eec8013SPiotr Sobczak %val = call float @llvm.minimum.f32(float %a, float %b) 116eec8013SPiotr Sobczak ret float %val 126eec8013SPiotr Sobczak} 136eec8013SPiotr Sobczak 146eec8013SPiotr Sobczakdefine amdgpu_ps float @test_fminimum_f32_ss(float inreg %a, float inreg %b) { 156eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_f32_ss: 166eec8013SPiotr Sobczak; GCN: ; %bb.0: 176eec8013SPiotr Sobczak; GCN-NEXT: s_minimum_f32 s0, s0, s1 186eec8013SPiotr Sobczak; GCN-NEXT: s_delay_alu instid0(SALU_CYCLE_3) 196eec8013SPiotr Sobczak; GCN-NEXT: v_mov_b32_e32 v0, s0 206eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 216eec8013SPiotr Sobczak %val = call float @llvm.minimum.f32(float %a, float %b) 226eec8013SPiotr Sobczak ret float %val 236eec8013SPiotr Sobczak} 246eec8013SPiotr Sobczak 256eec8013SPiotr Sobczakdefine amdgpu_ps float @test_fminimum_f32_vs(float %a, float inreg %b) { 266eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_f32_vs: 276eec8013SPiotr Sobczak; GCN: ; %bb.0: 286eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v0, v0, s0 296eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 306eec8013SPiotr Sobczak %val = call float @llvm.minimum.f32(float %a, float %b) 316eec8013SPiotr Sobczak ret float %val 326eec8013SPiotr Sobczak} 336eec8013SPiotr Sobczak 346eec8013SPiotr Sobczakdefine amdgpu_ps float @test_fminimum_nnan_f32(float %a, float %b) { 356eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_nnan_f32: 366eec8013SPiotr Sobczak; GCN: ; %bb.0: 376eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v0, v0, v1 386eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 396eec8013SPiotr Sobczak %val = call nnan float @llvm.minimum.f32(float %a, float %b) 406eec8013SPiotr Sobczak ret float %val 416eec8013SPiotr Sobczak} 426eec8013SPiotr Sobczak 436eec8013SPiotr Sobczakdefine amdgpu_ps <2 x float> @test_fminimum_v2f32(<2 x float> %a, <2 x float> %b) { 446eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_v2f32: 456eec8013SPiotr Sobczak; GCN: ; %bb.0: 466eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v0, v0, v2 476eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v1, v1, v3 486eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 496eec8013SPiotr Sobczak %val = call <2 x float> @llvm.minimum.v2f32(<2 x float> %a, <2 x float> %b) 506eec8013SPiotr Sobczak ret <2 x float> %val 516eec8013SPiotr Sobczak} 526eec8013SPiotr Sobczak 536eec8013SPiotr Sobczakdefine amdgpu_ps <2 x float> @test_fminimum_v2f32_ss(<2 x float> inreg %a, <2 x float> inreg %b) { 546eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_v2f32_ss: 556eec8013SPiotr Sobczak; GCN: ; %bb.0: 566eec8013SPiotr Sobczak; GCN-NEXT: s_minimum_f32 s0, s0, s2 576eec8013SPiotr Sobczak; GCN-NEXT: s_minimum_f32 s1, s1, s3 586eec8013SPiotr Sobczak; GCN-NEXT: s_delay_alu instid0(SALU_CYCLE_3) 596eec8013SPiotr Sobczak; GCN-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1 606eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 616eec8013SPiotr Sobczak %val = call <2 x float> @llvm.minimum.v2f32(<2 x float> %a, <2 x float> %b) 626eec8013SPiotr Sobczak ret <2 x float> %val 636eec8013SPiotr Sobczak} 646eec8013SPiotr Sobczak 656eec8013SPiotr Sobczakdefine amdgpu_ps <3 x float> @test_fminimum_v3f32(<3 x float> %a, <3 x float> %b) { 666eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_v3f32: 676eec8013SPiotr Sobczak; GCN: ; %bb.0: 686eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v0, v0, v3 696eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v1, v1, v4 706eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v2, v2, v5 716eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 726eec8013SPiotr Sobczak %val = call <3 x float> @llvm.minimum.v3f32(<3 x float> %a, <3 x float> %b) 736eec8013SPiotr Sobczak ret <3 x float> %val 746eec8013SPiotr Sobczak} 756eec8013SPiotr Sobczak 766eec8013SPiotr Sobczakdefine amdgpu_ps <4 x float> @test_fminimum_v4f32(<4 x float> %a, <4 x float> %b) { 776eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_v4f32: 786eec8013SPiotr Sobczak; GCN: ; %bb.0: 796eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v0, v0, v4 806eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v1, v1, v5 816eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v2, v2, v6 826eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v3, v3, v7 836eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 846eec8013SPiotr Sobczak %val = call <4 x float> @llvm.minimum.v4f32(<4 x float> %a, <4 x float> %b) 856eec8013SPiotr Sobczak ret <4 x float> %val 866eec8013SPiotr Sobczak} 876eec8013SPiotr Sobczak 886eec8013SPiotr Sobczakdefine amdgpu_ps <16 x float> @test_fminimum_v16f32(<16 x float> %a, <16 x float> %b) { 896eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_v16f32: 906eec8013SPiotr Sobczak; GCN: ; %bb.0: 916eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v0, v0, v16 926eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v1, v1, v17 936eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v2, v2, v18 946eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v3, v3, v19 956eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v4, v4, v20 966eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v5, v5, v21 976eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v6, v6, v22 986eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v7, v7, v23 996eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v8, v8, v24 1006eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v9, v9, v25 1016eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v10, v10, v26 1026eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v11, v11, v27 1036eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v12, v12, v28 1046eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v13, v13, v29 1056eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v14, v14, v30 1066eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v15, v15, v31 1076eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 1086eec8013SPiotr Sobczak %val = call <16 x float> @llvm.minimum.v16f32(<16 x float> %a, <16 x float> %b) 1096eec8013SPiotr Sobczak ret <16 x float> %val 1106eec8013SPiotr Sobczak} 1116eec8013SPiotr Sobczak 1126eec8013SPiotr Sobczakdefine amdgpu_ps half @test_fminimum_f16_vv(half %a, half %b) { 1136eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_f16_vv: 1146eec8013SPiotr Sobczak; GCN: ; %bb.0: 1156eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f16 v0, v0, v1 1166eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 1176eec8013SPiotr Sobczak %val = call half @llvm.minimum.f16(half %a, half %b) 1186eec8013SPiotr Sobczak ret half %val 1196eec8013SPiotr Sobczak} 1206eec8013SPiotr Sobczak 1216eec8013SPiotr Sobczakdefine amdgpu_ps half @test_fminimum_f16_ss(half inreg %a, half inreg %b) { 1226eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_f16_ss: 1236eec8013SPiotr Sobczak; GCN: ; %bb.0: 1246eec8013SPiotr Sobczak; GCN-NEXT: s_minimum_f16 s0, s0, s1 1256eec8013SPiotr Sobczak; GCN-NEXT: s_delay_alu instid0(SALU_CYCLE_3) 1266eec8013SPiotr Sobczak; GCN-NEXT: v_mov_b32_e32 v0, s0 1276eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 1286eec8013SPiotr Sobczak %val = call half @llvm.minimum.f16(half %a, half %b) 1296eec8013SPiotr Sobczak ret half %val 1306eec8013SPiotr Sobczak} 1316eec8013SPiotr Sobczak 1326eec8013SPiotr Sobczakdefine amdgpu_ps <2 x half> @test_fminimum_v2f16_vv(<2 x half> %a, <2 x half> %b) { 1336eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_v2f16_vv: 1346eec8013SPiotr Sobczak; GCN: ; %bb.0: 1356eec8013SPiotr Sobczak; GCN-NEXT: v_pk_minimum_f16 v0, v0, v1 1366eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 1376eec8013SPiotr Sobczak %val = call <2 x half> @llvm.minimum.v2f16(<2 x half> %a, <2 x half> %b) 1386eec8013SPiotr Sobczak ret <2 x half> %val 1396eec8013SPiotr Sobczak} 1406eec8013SPiotr Sobczak 1416eec8013SPiotr Sobczakdefine amdgpu_ps <2 x half> @test_fminimum_v2f16_ss(<2 x half> inreg %a, <2 x half> inreg %b) { 1426eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_v2f16_ss: 1436eec8013SPiotr Sobczak; GCN: ; %bb.0: 1446eec8013SPiotr Sobczak; GCN-NEXT: v_pk_minimum_f16 v0, s0, s1 1456eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 1466eec8013SPiotr Sobczak %val = call <2 x half> @llvm.minimum.v2f16(<2 x half> %a, <2 x half> %b) 1476eec8013SPiotr Sobczak ret <2 x half> %val 1486eec8013SPiotr Sobczak} 1496eec8013SPiotr Sobczak 1506eec8013SPiotr Sobczakdefine amdgpu_ps <3 x half> @test_fminimum_v3f16_vv(<3 x half> %a, <3 x half> %b) { 1512a3903faSStanislav Mekhanoshin; GFX12-SDAG-LABEL: test_fminimum_v3f16_vv: 1522a3903faSStanislav Mekhanoshin; GFX12-SDAG: ; %bb.0: 1532a3903faSStanislav Mekhanoshin; GFX12-SDAG-NEXT: v_pk_minimum_f16 v0, v0, v2 1542a3903faSStanislav Mekhanoshin; GFX12-SDAG-NEXT: v_pk_minimum_f16 v1, v1, v3 1552a3903faSStanislav Mekhanoshin; GFX12-SDAG-NEXT: ; return to shader part epilog 1562a3903faSStanislav Mekhanoshin; 1572a3903faSStanislav Mekhanoshin; GFX12-GISEL-LABEL: test_fminimum_v3f16_vv: 1582a3903faSStanislav Mekhanoshin; GFX12-GISEL: ; %bb.0: 1592a3903faSStanislav Mekhanoshin; GFX12-GISEL-NEXT: v_pk_minimum_f16 v0, v0, v2 1602a3903faSStanislav Mekhanoshin; GFX12-GISEL-NEXT: v_minimum_f16 v1, v1, v3 1612a3903faSStanislav Mekhanoshin; GFX12-GISEL-NEXT: ; return to shader part epilog 1626eec8013SPiotr Sobczak %val = call <3 x half> @llvm.minimum.v3f16(<3 x half> %a, <3 x half> %b) 1636eec8013SPiotr Sobczak ret <3 x half> %val 1646eec8013SPiotr Sobczak} 1656eec8013SPiotr Sobczak 1666eec8013SPiotr Sobczakdefine amdgpu_ps <3 x half> @test_fminimum_v3f16_ss(<3 x half> inreg %a, <3 x half> inreg %b) { 1672a3903faSStanislav Mekhanoshin; GFX12-SDAG-LABEL: test_fminimum_v3f16_ss: 1682a3903faSStanislav Mekhanoshin; GFX12-SDAG: ; %bb.0: 1692a3903faSStanislav Mekhanoshin; GFX12-SDAG-NEXT: v_pk_minimum_f16 v0, s0, s2 1702a3903faSStanislav Mekhanoshin; GFX12-SDAG-NEXT: v_pk_minimum_f16 v1, s1, s3 1712a3903faSStanislav Mekhanoshin; GFX12-SDAG-NEXT: ; return to shader part epilog 1722a3903faSStanislav Mekhanoshin; 1732a3903faSStanislav Mekhanoshin; GFX12-GISEL-LABEL: test_fminimum_v3f16_ss: 1742a3903faSStanislav Mekhanoshin; GFX12-GISEL: ; %bb.0: 1752a3903faSStanislav Mekhanoshin; GFX12-GISEL-NEXT: v_pk_minimum_f16 v0, s0, s2 1762a3903faSStanislav Mekhanoshin; GFX12-GISEL-NEXT: s_minimum_f16 s0, s1, s3 17786627149SCarl Ritson; GFX12-GISEL-NEXT: s_wait_alu 0xfffe 17886627149SCarl Ritson; GFX12-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_2) 1792a3903faSStanislav Mekhanoshin; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, s0 1802a3903faSStanislav Mekhanoshin; GFX12-GISEL-NEXT: ; return to shader part epilog 1816eec8013SPiotr Sobczak %val = call <3 x half> @llvm.minimum.v3f16(<3 x half> %a, <3 x half> %b) 1826eec8013SPiotr Sobczak ret <3 x half> %val 1836eec8013SPiotr Sobczak} 1846eec8013SPiotr Sobczak 1856eec8013SPiotr Sobczakdefine amdgpu_ps <4 x half> @test_fminimum_v4f16(<4 x half> %a, <4 x half> %b) { 1866eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_v4f16: 1876eec8013SPiotr Sobczak; GCN: ; %bb.0: 1886eec8013SPiotr Sobczak; GCN-NEXT: v_pk_minimum_f16 v0, v0, v2 1896eec8013SPiotr Sobczak; GCN-NEXT: v_pk_minimum_f16 v1, v1, v3 1906eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 1916eec8013SPiotr Sobczak %val = call <4 x half> @llvm.minimum.v4f16(<4 x half> %a, <4 x half> %b) 1926eec8013SPiotr Sobczak ret <4 x half> %val 1936eec8013SPiotr Sobczak} 1946eec8013SPiotr Sobczak 1956eec8013SPiotr Sobczakdefine amdgpu_ps <4 x half> @test_fminimum_v4f16_ss(<4 x half> inreg %a, <4 x half> inreg %b) { 1966eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_v4f16_ss: 1976eec8013SPiotr Sobczak; GCN: ; %bb.0: 1986eec8013SPiotr Sobczak; GCN-NEXT: v_pk_minimum_f16 v0, s0, s2 1996eec8013SPiotr Sobczak; GCN-NEXT: v_pk_minimum_f16 v1, s1, s3 2006eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 2016eec8013SPiotr Sobczak %val = call <4 x half> @llvm.minimum.v4f16(<4 x half> %a, <4 x half> %b) 2026eec8013SPiotr Sobczak ret <4 x half> %val 2036eec8013SPiotr Sobczak} 2046eec8013SPiotr Sobczak 2056eec8013SPiotr Sobczakdefine amdgpu_ps <2 x float> @test_fminimum_f64_vv(double %a, double %b) { 2066eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_f64_vv: 2076eec8013SPiotr Sobczak; GCN: ; %bb.0: 2086eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f64 v[0:1], v[0:1], v[2:3] 2096eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 2106eec8013SPiotr Sobczak %val = call double @llvm.minimum.f64(double %a, double %b) 2116eec8013SPiotr Sobczak %ret = bitcast double %val to <2 x float> 2126eec8013SPiotr Sobczak ret <2 x float> %ret 2136eec8013SPiotr Sobczak} 2146eec8013SPiotr Sobczak 2156eec8013SPiotr Sobczakdefine amdgpu_ps <2 x float> @test_fminimum_f64_ss(double inreg %a, double inreg %b) { 2166eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_f64_ss: 2176eec8013SPiotr Sobczak; GCN: ; %bb.0: 2186eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f64 v[0:1], s[0:1], s[2:3] 2196eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 2206eec8013SPiotr Sobczak %val = call double @llvm.minimum.f64(double %a, double %b) 2216eec8013SPiotr Sobczak %ret = bitcast double %val to <2 x float> 2226eec8013SPiotr Sobczak ret <2 x float> %ret 2236eec8013SPiotr Sobczak} 2246eec8013SPiotr Sobczak 2256eec8013SPiotr Sobczakdefine amdgpu_ps <4 x float> @test_fminimum_v2f64_ss(<2 x double> inreg %a, <2 x double> inreg %b) { 2266eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_v2f64_ss: 2276eec8013SPiotr Sobczak; GCN: ; %bb.0: 2286eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f64 v[0:1], s[0:1], s[4:5] 2296eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f64 v[2:3], s[2:3], s[6:7] 2306eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 2316eec8013SPiotr Sobczak %val = call <2 x double> @llvm.minimum.v2f64(<2 x double> %a, <2 x double> %b) 2326eec8013SPiotr Sobczak %ret = bitcast <2 x double> %val to <4 x float> 2336eec8013SPiotr Sobczak ret <4 x float> %ret 2346eec8013SPiotr Sobczak} 2356eec8013SPiotr Sobczak 2366eec8013SPiotr Sobczakdefine amdgpu_ps <8 x float> @test_fminimum_v4f64(<4 x double> %a, <4 x double> %b) { 2376eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_v4f64: 2386eec8013SPiotr Sobczak; GCN: ; %bb.0: 2396eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f64 v[0:1], v[0:1], v[8:9] 2406eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f64 v[2:3], v[2:3], v[10:11] 2416eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f64 v[4:5], v[4:5], v[12:13] 2426eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f64 v[6:7], v[6:7], v[14:15] 2436eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 2446eec8013SPiotr Sobczak %val = call <4 x double> @llvm.minimum.v4f64(<4 x double> %a, <4 x double> %b) 2456eec8013SPiotr Sobczak %ret = bitcast <4 x double> %val to <8 x float> 2466eec8013SPiotr Sobczak ret <8 x float> %ret 2476eec8013SPiotr Sobczak} 2486eec8013SPiotr Sobczak 2496eec8013SPiotr Sobczakdefine amdgpu_ps <8 x float> @test_fminimum_v4f64_ss(<4 x double> inreg %a, <4 x double> inreg %b) { 2506eec8013SPiotr Sobczak; GCN-LABEL: test_fminimum_v4f64_ss: 2516eec8013SPiotr Sobczak; GCN: ; %bb.0: 2526eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f64 v[0:1], s[0:1], s[8:9] 2536eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f64 v[2:3], s[2:3], s[10:11] 2546eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f64 v[4:5], s[4:5], s[12:13] 2556eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f64 v[6:7], s[6:7], s[14:15] 2566eec8013SPiotr Sobczak; GCN-NEXT: ; return to shader part epilog 2576eec8013SPiotr Sobczak %val = call <4 x double> @llvm.minimum.v4f64(<4 x double> %a, <4 x double> %b) 2586eec8013SPiotr Sobczak %ret = bitcast <4 x double> %val to <8 x float> 2596eec8013SPiotr Sobczak ret <8 x float> %ret 2606eec8013SPiotr Sobczak} 2616eec8013SPiotr Sobczak 2626eec8013SPiotr Sobczakdefine amdgpu_kernel void @fminimumi_f32_move_to_valu(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr) { 2636eec8013SPiotr Sobczak; GCN-LABEL: fminimumi_f32_move_to_valu: 2646eec8013SPiotr Sobczak; GCN: ; %bb.0: 2656eec8013SPiotr Sobczak; GCN-NEXT: s_clause 0x1 2666548b635SShilei Tian; GCN-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 2676548b635SShilei Tian; GCN-NEXT: s_load_b64 s[4:5], s[4:5], 0x34 2686eec8013SPiotr Sobczak; GCN-NEXT: v_mov_b32_e32 v0, 0 269ba52f06fSJay Foad; GCN-NEXT: s_wait_kmcnt 0x0 2706548b635SShilei Tian; GCN-NEXT: global_load_b32 v1, v0, s[2:3] scope:SCOPE_SYS 271ba52f06fSJay Foad; GCN-NEXT: s_wait_loadcnt 0x0 2726548b635SShilei Tian; GCN-NEXT: global_load_b32 v2, v0, s[4:5] scope:SCOPE_SYS 273ba52f06fSJay Foad; GCN-NEXT: s_wait_loadcnt 0x0 2746eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f32 v1, v1, v2 2756548b635SShilei Tian; GCN-NEXT: global_store_b32 v0, v1, s[0:1] 2766eec8013SPiotr Sobczak; GCN-NEXT: s_endpgm 2776eec8013SPiotr Sobczak %a = load volatile float, ptr addrspace(1) %aptr, align 4 2786eec8013SPiotr Sobczak %b = load volatile float, ptr addrspace(1) %bptr, align 4 2796eec8013SPiotr Sobczak %v = call float @llvm.minimum.f32(float %a, float %b) 2806eec8013SPiotr Sobczak store float %v, ptr addrspace(1) %out, align 4 2816eec8013SPiotr Sobczak ret void 2826eec8013SPiotr Sobczak} 2836eec8013SPiotr Sobczak 2846eec8013SPiotr Sobczakdefine amdgpu_kernel void @fminimum_f16_move_to_valu(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr) { 2856eec8013SPiotr Sobczak; GCN-LABEL: fminimum_f16_move_to_valu: 2866eec8013SPiotr Sobczak; GCN: ; %bb.0: 2876eec8013SPiotr Sobczak; GCN-NEXT: s_clause 0x1 2886548b635SShilei Tian; GCN-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 2896548b635SShilei Tian; GCN-NEXT: s_load_b64 s[4:5], s[4:5], 0x34 2906eec8013SPiotr Sobczak; GCN-NEXT: v_mov_b32_e32 v0, 0 291ba52f06fSJay Foad; GCN-NEXT: s_wait_kmcnt 0x0 2926548b635SShilei Tian; GCN-NEXT: global_load_u16 v1, v0, s[2:3] scope:SCOPE_SYS 293ba52f06fSJay Foad; GCN-NEXT: s_wait_loadcnt 0x0 2946548b635SShilei Tian; GCN-NEXT: global_load_u16 v2, v0, s[4:5] scope:SCOPE_SYS 295ba52f06fSJay Foad; GCN-NEXT: s_wait_loadcnt 0x0 2966eec8013SPiotr Sobczak; GCN-NEXT: v_minimum_f16 v1, v1, v2 2976548b635SShilei Tian; GCN-NEXT: global_store_b16 v0, v1, s[0:1] 2986eec8013SPiotr Sobczak; GCN-NEXT: s_endpgm 2996eec8013SPiotr Sobczak %a = load volatile half, ptr addrspace(1) %aptr, align 4 3006eec8013SPiotr Sobczak %b = load volatile half, ptr addrspace(1) %bptr, align 4 3016eec8013SPiotr Sobczak %v = call half @llvm.minimum.f16(half %a, half %b) 3026eec8013SPiotr Sobczak store half %v, ptr addrspace(1) %out, align 4 3036eec8013SPiotr Sobczak ret void 3046eec8013SPiotr Sobczak} 3056eec8013SPiotr Sobczak 3066eec8013SPiotr Sobczakdeclare float @llvm.minimum.f32(float, float) 3076eec8013SPiotr Sobczakdeclare <2 x float> @llvm.minimum.v2f32(<2 x float>, <2 x float>) 3086eec8013SPiotr Sobczakdeclare <3 x float> @llvm.minimum.v3f32(<3 x float>, <3 x float>) 3096eec8013SPiotr Sobczakdeclare <4 x float> @llvm.minimum.v4f32(<4 x float>, <4 x float>) 3106eec8013SPiotr Sobczakdeclare <16 x float> @llvm.minimum.v16f32(<16 x float>, <16 x float>) 3116eec8013SPiotr Sobczakdeclare half @llvm.minimum.f16(half, half) 3126eec8013SPiotr Sobczakdeclare <2 x half> @llvm.minimum.v2f16(<2 x half>, <2 x half>) 3136eec8013SPiotr Sobczakdeclare <3 x half> @llvm.minimum.v3f16(<3 x half>, <3 x half>) 3146eec8013SPiotr Sobczakdeclare <4 x half> @llvm.minimum.v4f16(<4 x half>, <4 x half>) 3156eec8013SPiotr Sobczakdeclare double @llvm.minimum.f64(double, double) 3166eec8013SPiotr Sobczakdeclare <2 x double> @llvm.minimum.v2f64(<2 x double>, <2 x double>) 3176eec8013SPiotr Sobczakdeclare <4 x double> @llvm.minimum.v4f64(<4 x double>, <4 x double>) 318