xref: /llvm-project/llvm/test/CodeGen/AMDGPU/fminimum.ll (revision 5a3299a684d7d8c40f48d732e5b80a8bd29aa882)
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