1ee61a4dbSMatt Arsenault; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2ee61a4dbSMatt Arsenault; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx803 < %s | FileCheck -check-prefix=GFX8 %s 3ee61a4dbSMatt Arsenault; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9 %s 4ee61a4dbSMatt Arsenault; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1030 < %s | FileCheck -check-prefix=GFX10 %s 5ee61a4dbSMatt Arsenault; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 < %s | FileCheck -check-prefix=GFX11 %s 6ee61a4dbSMatt Arsenault; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 < %s | FileCheck -check-prefix=GFX12 %s 7ee61a4dbSMatt Arsenault 8ee61a4dbSMatt Arsenaultdefine half @v_minimumnum_f16(half %x, half %y) { 9ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f16: 10ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 11ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 12ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v1, v1, v1 13ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v0, v0, v0 14ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v0, v0, v1 15ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 16ee61a4dbSMatt Arsenault; 17ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f16: 18ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 19ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 20ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f16_e32 v1, v1, v1 21ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f16_e32 v0, v0, v0 22ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f16_e32 v0, v0, v1 23ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 24ee61a4dbSMatt Arsenault; 25ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f16: 26ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 27ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 28ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f16_e32 v1, v1, v1 29ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f16_e32 v0, v0, v0 30ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f16_e32 v0, v0, v1 31ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 32ee61a4dbSMatt Arsenault; 33ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f16: 34ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 35ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 36ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f16_e32 v1, v1, v1 37ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f16_e32 v0, v0, v0 38ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 39ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f16_e32 v0, v0, v1 40ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 41ee61a4dbSMatt Arsenault; 42ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f16: 43ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 44ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 45ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 46ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 47ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 48ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 49ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f16_e32 v1, v1, v1 50ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f16_e32 v0, v0, v0 51ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 52ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f16_e32 v0, v0, v1 53ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 54ee61a4dbSMatt Arsenault %result = call half @llvm.minimumnum.f16(half %x, half %y) 55ee61a4dbSMatt Arsenault ret half %result 56ee61a4dbSMatt Arsenault} 57ee61a4dbSMatt Arsenault 58ee61a4dbSMatt Arsenaultdefine half @v_minimumnum_f16_nnan(half %x, half %y) { 59ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f16_nnan: 60ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 61ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 62ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v0, v0, v1 63ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 64ee61a4dbSMatt Arsenault; 65ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f16_nnan: 66ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 67ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 68ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f16_e32 v0, v0, v1 69ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 70ee61a4dbSMatt Arsenault; 71ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f16_nnan: 72ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 73ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 74ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f16_e32 v0, v0, v1 75ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 76ee61a4dbSMatt Arsenault; 77ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f16_nnan: 78ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 79ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 80ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f16_e32 v0, v0, v1 81ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 82ee61a4dbSMatt Arsenault; 83ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f16_nnan: 84ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 85ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 86ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 87ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 88ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 89ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 90ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f16_e32 v0, v0, v1 91ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 92ee61a4dbSMatt Arsenault %result = call nnan half @llvm.minimumnum.f16(half %x, half %y) 93ee61a4dbSMatt Arsenault ret half %result 94ee61a4dbSMatt Arsenault} 95ee61a4dbSMatt Arsenault 96ee61a4dbSMatt Arsenaultdefine half @v_minimumnum_f16_1.0(half %x) { 97ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f16_1.0: 98ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 99ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 100ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v0, v0, v0 101ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v0, 1.0, v0 102ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 103ee61a4dbSMatt Arsenault; 104ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f16_1.0: 105ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 106ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 107ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f16_e32 v0, v0, v0 108ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f16_e32 v0, 1.0, v0 109ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 110ee61a4dbSMatt Arsenault; 111ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f16_1.0: 112ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 113ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 114ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f16_e32 v0, v0, v0 115ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f16_e32 v0, 1.0, v0 116ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 117ee61a4dbSMatt Arsenault; 118ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f16_1.0: 119ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 120ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 121ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f16_e32 v0, v0, v0 122ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 123ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f16_e32 v0, 1.0, v0 124ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 125ee61a4dbSMatt Arsenault; 126ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f16_1.0: 127ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 128ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 129ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 130ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 131ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 132ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 133ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f16_e32 v0, v0, v0 134ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 135ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f16_e32 v0, 1.0, v0 136ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 137ee61a4dbSMatt Arsenault %result = call half @llvm.minimumnum.f16(half %x, half 1.0) 138ee61a4dbSMatt Arsenault ret half %result 139ee61a4dbSMatt Arsenault} 140ee61a4dbSMatt Arsenault 141ee61a4dbSMatt Arsenaultdefine bfloat @v_minimumnum_bf16(bfloat %x, bfloat %y) { 142ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_bf16: 143ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 144ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 145ee61a4dbSMatt Arsenault; GFX8-NEXT: v_lshlrev_b32_e32 v2, 16, v0 146ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cmp_u_f32_e32 vcc, v2, v2 147ee61a4dbSMatt Arsenault; GFX8-NEXT: v_lshlrev_b32_e32 v2, 16, v1 148ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 149ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cmp_u_f32_e32 vcc, v2, v2 150ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v0, vcc 151ee61a4dbSMatt Arsenault; GFX8-NEXT: v_lshlrev_b32_e32 v2, 16, v1 152ee61a4dbSMatt Arsenault; GFX8-NEXT: v_lshlrev_b32_e32 v3, 16, v0 153ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, v3, v2 154ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cndmask_b32_e32 v2, v1, v0, vcc 155ee61a4dbSMatt Arsenault; GFX8-NEXT: v_lshlrev_b32_e32 v2, 16, v2 156ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v2 157ee61a4dbSMatt Arsenault; GFX8-NEXT: v_bfe_u32 v3, v2, 16, 1 158ee61a4dbSMatt Arsenault; GFX8-NEXT: v_add_u32_e32 v3, vcc, v3, v2 159ee61a4dbSMatt Arsenault; GFX8-NEXT: s_movk_i32 s4, 0x7fff 160ee61a4dbSMatt Arsenault; GFX8-NEXT: v_add_u32_e32 v3, vcc, s4, v3 161ee61a4dbSMatt Arsenault; GFX8-NEXT: v_or_b32_e32 v4, 0x400000, v2 162ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cmp_u_f32_e32 vcc, v2, v2 163ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cndmask_b32_e32 v2, v3, v4, vcc 164ee61a4dbSMatt Arsenault; GFX8-NEXT: s_movk_i32 s4, 0x8000 165ee61a4dbSMatt Arsenault; GFX8-NEXT: v_lshrrev_b32_e32 v3, 16, v2 166ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cmp_eq_u16_e32 vcc, s4, v0 167ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc 168ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cmp_eq_u16_e32 vcc, s4, v1 169ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 170ee61a4dbSMatt Arsenault; GFX8-NEXT: v_and_b32_e32 v1, 0xffff0000, v2 171ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cmp_eq_f32_e32 vcc, 0, v1 172ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc 173ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 174ee61a4dbSMatt Arsenault; 175ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_bf16: 176ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 177ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 178ee61a4dbSMatt Arsenault; GFX9-NEXT: v_lshlrev_b32_e32 v2, 16, v0 179ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cmp_u_f32_e32 vcc, v2, v2 180ee61a4dbSMatt Arsenault; GFX9-NEXT: v_lshlrev_b32_e32 v3, 16, v1 181ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 182ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cmp_u_f32_e32 vcc, v3, v3 183ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v0, vcc 184ee61a4dbSMatt Arsenault; GFX9-NEXT: v_lshlrev_b32_e32 v2, 16, v0 185ee61a4dbSMatt Arsenault; GFX9-NEXT: v_lshlrev_b32_e32 v3, 16, v1 186ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, v2, v3 187ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cndmask_b32_e32 v2, v1, v0, vcc 188ee61a4dbSMatt Arsenault; GFX9-NEXT: v_lshlrev_b32_e32 v2, 16, v2 189ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v2, v2, v2 190ee61a4dbSMatt Arsenault; GFX9-NEXT: v_bfe_u32 v3, v2, 16, 1 191ee61a4dbSMatt Arsenault; GFX9-NEXT: s_movk_i32 s4, 0x7fff 192ee61a4dbSMatt Arsenault; GFX9-NEXT: v_add3_u32 v3, v3, v2, s4 193ee61a4dbSMatt Arsenault; GFX9-NEXT: v_or_b32_e32 v4, 0x400000, v2 194ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cmp_u_f32_e32 vcc, v2, v2 195ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cndmask_b32_e32 v2, v3, v4, vcc 196ee61a4dbSMatt Arsenault; GFX9-NEXT: s_movk_i32 s4, 0x8000 197ee61a4dbSMatt Arsenault; GFX9-NEXT: v_lshrrev_b32_e32 v3, 16, v2 198ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cmp_eq_u16_e32 vcc, s4, v0 199ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc 200ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cmp_eq_u16_e32 vcc, s4, v1 201ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 202ee61a4dbSMatt Arsenault; GFX9-NEXT: v_and_b32_e32 v1, 0xffff0000, v2 203ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cmp_eq_f32_e32 vcc, 0, v1 204ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc 205ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 206ee61a4dbSMatt Arsenault; 207ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_bf16: 208ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 209ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 210ee61a4dbSMatt Arsenault; GFX10-NEXT: v_lshlrev_b32_e32 v2, 16, v0 211ee61a4dbSMatt Arsenault; GFX10-NEXT: v_lshlrev_b32_e32 v3, 16, v1 212ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cmp_u_f32_e32 vcc_lo, v2, v2 213ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 214ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cmp_u_f32_e32 vcc_lo, v3, v3 215ee61a4dbSMatt Arsenault; GFX10-NEXT: v_lshlrev_b32_e32 v2, 16, v0 216ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v0, vcc_lo 217ee61a4dbSMatt Arsenault; GFX10-NEXT: v_lshlrev_b32_e32 v3, 16, v1 218ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cmp_lt_f32_e32 vcc_lo, v2, v3 219ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cndmask_b32_e32 v2, v1, v0, vcc_lo 220ee61a4dbSMatt Arsenault; GFX10-NEXT: v_lshlrev_b32_e32 v2, 16, v2 221ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v2, v2, v2 222ee61a4dbSMatt Arsenault; GFX10-NEXT: v_bfe_u32 v3, v2, 16, 1 223ee61a4dbSMatt Arsenault; GFX10-NEXT: v_or_b32_e32 v4, 0x400000, v2 224ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cmp_u_f32_e32 vcc_lo, v2, v2 225ee61a4dbSMatt Arsenault; GFX10-NEXT: v_add3_u32 v3, v3, v2, 0x7fff 226ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cndmask_b32_e32 v2, v3, v4, vcc_lo 227ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cmp_eq_u16_e32 vcc_lo, 0x8000, v0 228ee61a4dbSMatt Arsenault; GFX10-NEXT: v_lshrrev_b32_e32 v3, 16, v2 229ee61a4dbSMatt Arsenault; GFX10-NEXT: v_and_b32_e32 v2, 0xffff0000, v2 230ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc_lo 231ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cmp_eq_u16_e32 vcc_lo, 0x8000, v1 232ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 233ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cmp_eq_f32_e32 vcc_lo, 0, v2 234ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc_lo 235ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 236ee61a4dbSMatt Arsenault; 237ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_bf16: 238ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 239ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 240ee61a4dbSMatt Arsenault; GFX11-NEXT: v_lshlrev_b32_e32 v2, 16, v0 241ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2) 242ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cmp_u_f32_e32 vcc_lo, v2, v2 243ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 244ee61a4dbSMatt Arsenault; GFX11-NEXT: v_lshlrev_b32_e32 v3, 16, v1 245ee61a4dbSMatt Arsenault; GFX11-NEXT: v_lshlrev_b32_e32 v2, 16, v0 246ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1) 247ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cmp_u_f32_e32 vcc_lo, v3, v3 248ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v0, vcc_lo 249ee61a4dbSMatt Arsenault; GFX11-NEXT: v_lshlrev_b32_e32 v3, 16, v1 250ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 251ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cmp_lt_f32_e32 vcc_lo, v2, v3 252ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cndmask_b32_e32 v2, v1, v0, vcc_lo 253ee61a4dbSMatt Arsenault; GFX11-NEXT: v_lshlrev_b32_e32 v2, 16, v2 254ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 255ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e32 v2, v2, v2 256ee61a4dbSMatt Arsenault; GFX11-NEXT: v_bfe_u32 v3, v2, 16, 1 257ee61a4dbSMatt Arsenault; GFX11-NEXT: v_or_b32_e32 v4, 0x400000, v2 258ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cmp_u_f32_e32 vcc_lo, v2, v2 259ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1) 260ee61a4dbSMatt Arsenault; GFX11-NEXT: v_add3_u32 v3, v3, v2, 0x7fff 261ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cndmask_b32_e32 v2, v3, v4, vcc_lo 262ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cmp_eq_u16_e32 vcc_lo, 0x8000, v0 263ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2) 264ee61a4dbSMatt Arsenault; GFX11-NEXT: v_lshrrev_b32_e32 v3, 16, v2 265ee61a4dbSMatt Arsenault; GFX11-NEXT: v_and_b32_e32 v2, 0xffff0000, v2 266ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc_lo 267ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cmp_eq_u16_e32 vcc_lo, 0x8000, v1 268ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_4) 269ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 270ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cmp_eq_f32_e32 vcc_lo, 0, v2 271ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) 272ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc_lo 273ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 274ee61a4dbSMatt Arsenault; 275ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_bf16: 276ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 277ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 278ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 279ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 280ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 281ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 282ee61a4dbSMatt Arsenault; GFX12-NEXT: v_lshlrev_b32_e32 v2, 16, v0 283ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2) 284ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cmp_u_f32_e32 vcc_lo, v2, v2 285ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 286ee61a4dbSMatt Arsenault; GFX12-NEXT: v_lshlrev_b32_e32 v3, 16, v1 287ee61a4dbSMatt Arsenault; GFX12-NEXT: v_lshlrev_b32_e32 v2, 16, v0 288ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1) 289ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cmp_u_f32_e32 vcc_lo, v3, v3 290ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cndmask_b32_e32 v1, v1, v0, vcc_lo 291ee61a4dbSMatt Arsenault; GFX12-NEXT: v_lshlrev_b32_e32 v3, 16, v1 292ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 293ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cmp_lt_f32_e32 vcc_lo, v2, v3 294ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cndmask_b32_e32 v2, v1, v0, vcc_lo 295ee61a4dbSMatt Arsenault; GFX12-NEXT: v_lshlrev_b32_e32 v2, 16, v2 296ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 297ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e32 v2, v2, v2 298ee61a4dbSMatt Arsenault; GFX12-NEXT: v_bfe_u32 v3, v2, 16, 1 299ee61a4dbSMatt Arsenault; GFX12-NEXT: v_or_b32_e32 v4, 0x400000, v2 300ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cmp_u_f32_e32 vcc_lo, v2, v2 301ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1) 302ee61a4dbSMatt Arsenault; GFX12-NEXT: v_add3_u32 v3, v3, v2, 0x7fff 303ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cndmask_b32_e32 v2, v3, v4, vcc_lo 304ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cmp_eq_u16_e32 vcc_lo, 0x8000, v0 305ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2) 306ee61a4dbSMatt Arsenault; GFX12-NEXT: v_lshrrev_b32_e32 v3, 16, v2 307ee61a4dbSMatt Arsenault; GFX12-NEXT: v_and_b32_e32 v2, 0xffff0000, v2 308ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc_lo 309ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cmp_eq_u16_e32 vcc_lo, 0x8000, v1 310ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_4) 311ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 312ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cmp_eq_f32_e32 vcc_lo, 0, v2 313ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) 314ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc_lo 315ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 316ee61a4dbSMatt Arsenault %result = call bfloat @llvm.minimumnum.bf16(bfloat %x, bfloat %y) 317ee61a4dbSMatt Arsenault ret bfloat %result 318ee61a4dbSMatt Arsenault} 319ee61a4dbSMatt Arsenault 320ee61a4dbSMatt Arsenaultdefine bfloat @v_minimumnum_bf16_nnan(bfloat %x, bfloat %y) { 321ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_bf16_nnan: 322ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 323ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 324ee61a4dbSMatt Arsenault; GFX8-NEXT: v_lshlrev_b32_e32 v2, 16, v1 325ee61a4dbSMatt Arsenault; GFX8-NEXT: v_lshlrev_b32_e32 v3, 16, v0 326ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cmp_lt_f32_e32 vcc, v3, v2 327ee61a4dbSMatt Arsenault; GFX8-NEXT: s_movk_i32 s4, 0x8000 328ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cndmask_b32_e32 v2, v1, v0, vcc 329ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cmp_eq_u16_e32 vcc, s4, v0 330ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc 331ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cmp_eq_u16_e32 vcc, s4, v1 332ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 333ee61a4dbSMatt Arsenault; GFX8-NEXT: v_lshlrev_b32_e32 v1, 16, v2 334ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cmp_eq_f32_e32 vcc, 0, v1 335ee61a4dbSMatt Arsenault; GFX8-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc 336ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 337ee61a4dbSMatt Arsenault; 338ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_bf16_nnan: 339ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 340ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 341ee61a4dbSMatt Arsenault; GFX9-NEXT: v_lshlrev_b32_e32 v2, 16, v1 342ee61a4dbSMatt Arsenault; GFX9-NEXT: v_lshlrev_b32_e32 v3, 16, v0 343ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cmp_lt_f32_e32 vcc, v3, v2 344ee61a4dbSMatt Arsenault; GFX9-NEXT: s_movk_i32 s4, 0x8000 345ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cndmask_b32_e32 v2, v1, v0, vcc 346ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cmp_eq_u16_e32 vcc, s4, v0 347ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc 348ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cmp_eq_u16_e32 vcc, s4, v1 349ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 350ee61a4dbSMatt Arsenault; GFX9-NEXT: v_lshlrev_b32_e32 v1, 16, v2 351ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cmp_eq_f32_e32 vcc, 0, v1 352ee61a4dbSMatt Arsenault; GFX9-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc 353ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 354ee61a4dbSMatt Arsenault; 355ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_bf16_nnan: 356ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 357ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 358ee61a4dbSMatt Arsenault; GFX10-NEXT: v_lshlrev_b32_e32 v2, 16, v1 359ee61a4dbSMatt Arsenault; GFX10-NEXT: v_lshlrev_b32_e32 v3, 16, v0 360ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cmp_lt_f32_e32 vcc_lo, v3, v2 361ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cndmask_b32_e32 v2, v1, v0, vcc_lo 362ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cmp_eq_u16_e32 vcc_lo, 0x8000, v0 363ee61a4dbSMatt Arsenault; GFX10-NEXT: v_lshlrev_b32_e32 v3, 16, v2 364ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc_lo 365ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cmp_eq_u16_e32 vcc_lo, 0x8000, v1 366ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 367ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cmp_eq_f32_e32 vcc_lo, 0, v3 368ee61a4dbSMatt Arsenault; GFX10-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc_lo 369ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 370ee61a4dbSMatt Arsenault; 371ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_bf16_nnan: 372ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 373ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 374ee61a4dbSMatt Arsenault; GFX11-NEXT: v_lshlrev_b32_e32 v2, 16, v1 375ee61a4dbSMatt Arsenault; GFX11-NEXT: v_lshlrev_b32_e32 v3, 16, v0 376ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2) 377ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cmp_lt_f32_e32 vcc_lo, v3, v2 378ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cndmask_b32_e32 v2, v1, v0, vcc_lo 379ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cmp_eq_u16_e32 vcc_lo, 0x8000, v0 380ee61a4dbSMatt Arsenault; GFX11-NEXT: v_dual_cndmask_b32 v0, v2, v0 :: v_dual_lshlrev_b32 v3, 16, v2 381ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cmp_eq_u16_e32 vcc_lo, 0x8000, v1 382ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3) 383ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 384ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cmp_eq_f32_e32 vcc_lo, 0, v3 385ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) 386ee61a4dbSMatt Arsenault; GFX11-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc_lo 387ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 388ee61a4dbSMatt Arsenault; 389ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_bf16_nnan: 390ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 391ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 392ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 393ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 394ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 395ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 396ee61a4dbSMatt Arsenault; GFX12-NEXT: v_lshlrev_b32_e32 v2, 16, v1 397ee61a4dbSMatt Arsenault; GFX12-NEXT: v_lshlrev_b32_e32 v3, 16, v0 398ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2) 399ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cmp_lt_f32_e32 vcc_lo, v3, v2 400ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cndmask_b32_e32 v2, v1, v0, vcc_lo 401ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cmp_eq_u16_e32 vcc_lo, 0x8000, v0 402ee61a4dbSMatt Arsenault; GFX12-NEXT: v_dual_cndmask_b32 v0, v2, v0 :: v_dual_lshlrev_b32 v3, 16, v2 403ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cmp_eq_u16_e32 vcc_lo, 0x8000, v1 404ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3) 405ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 406ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cmp_eq_f32_e32 vcc_lo, 0, v3 407ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) 408ee61a4dbSMatt Arsenault; GFX12-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc_lo 409ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 410ee61a4dbSMatt Arsenault %result = call nnan bfloat @llvm.minimumnum.bf16(bfloat %x, bfloat %y) 411ee61a4dbSMatt Arsenault ret bfloat %result 412ee61a4dbSMatt Arsenault} 413ee61a4dbSMatt Arsenault 414ee61a4dbSMatt Arsenaultdefine float @v_minimumnum_f32(float %x, float %y) { 415ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f32: 416ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 417ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 418ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1 419ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0 420ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v1 421ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 422ee61a4dbSMatt Arsenault; 423ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f32: 424ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 425ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 426ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v1, v1, v1 427ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v0, v0, v0 428ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v1 429ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 430ee61a4dbSMatt Arsenault; 431ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f32: 432ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 433ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 434ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v1, v1, v1 435ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v0, v0, v0 436ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v1 437ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 438ee61a4dbSMatt Arsenault; 439ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f32: 440ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 441ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 442ee61a4dbSMatt Arsenault; GFX11-NEXT: v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0 443ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 444ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f32_e32 v0, v0, v1 445ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 446ee61a4dbSMatt Arsenault; 447ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f32: 448ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 449ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 450ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 451ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 452ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 453ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 454ee61a4dbSMatt Arsenault; GFX12-NEXT: v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0 455ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 456ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1 457ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 458ee61a4dbSMatt Arsenault %result = call float @llvm.minimumnum.f32(float %x, float %y) 459ee61a4dbSMatt Arsenault ret float %result 460ee61a4dbSMatt Arsenault} 461ee61a4dbSMatt Arsenault 462ee61a4dbSMatt Arsenaultdefine float @v_minimumnum_f32_nnan(float %x, float %y) { 463ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f32_nnan: 464ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 465ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 466ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v1 467ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 468ee61a4dbSMatt Arsenault; 469ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f32_nnan: 470ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 471ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 472ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v1 473ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 474ee61a4dbSMatt Arsenault; 475ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f32_nnan: 476ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 477ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 478ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v1 479ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 480ee61a4dbSMatt Arsenault; 481ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f32_nnan: 482ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 483ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 484ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f32_e32 v0, v0, v1 485ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 486ee61a4dbSMatt Arsenault; 487ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f32_nnan: 488ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 489ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 490ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 491ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 492ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 493ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 494ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1 495ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 496ee61a4dbSMatt Arsenault %result = call nnan float @llvm.minimumnum.f32(float %x, float %y) 497ee61a4dbSMatt Arsenault ret float %result 498ee61a4dbSMatt Arsenault} 499ee61a4dbSMatt Arsenault 500ee61a4dbSMatt Arsenaultdefine double @v_minimumnum_f64(double %x, double %y) { 501ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f64: 502ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 503ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 504ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 505ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 506ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 507ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 508ee61a4dbSMatt Arsenault; 509ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f64: 510ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 511ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 512ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 513ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 514ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 515ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 516ee61a4dbSMatt Arsenault; 517ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f64: 518ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 519ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 520ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 521ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 522ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 523ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 524ee61a4dbSMatt Arsenault; 525ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f64: 526ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 527ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 528ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 529ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 530ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 531ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 532ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 533ee61a4dbSMatt Arsenault; 534ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f64: 535ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 536ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 537ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 538ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 539ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 540ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 541ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[2:3], v[2:3], v[2:3] 542ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[0:1], v[0:1], v[0:1] 543ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 544ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[0:1], v[0:1], v[2:3] 545ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 546ee61a4dbSMatt Arsenault %result = call double @llvm.minimumnum.f64(double %x, double %y) 547ee61a4dbSMatt Arsenault ret double %result 548ee61a4dbSMatt Arsenault} 549ee61a4dbSMatt Arsenault 550ee61a4dbSMatt Arsenaultdefine double @v_minimumnum_f64_nnan(double %x, double %y) { 551ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f64_nnan: 552ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 553ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 554ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 555ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 556ee61a4dbSMatt Arsenault; 557ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f64_nnan: 558ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 559ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 560ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 561ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 562ee61a4dbSMatt Arsenault; 563ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f64_nnan: 564ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 565ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 566ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 567ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 568ee61a4dbSMatt Arsenault; 569ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f64_nnan: 570ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 571ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 572ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 573ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 574ee61a4dbSMatt Arsenault; 575ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f64_nnan: 576ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 577ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 578ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 579ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 580ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 581ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 582ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[0:1], v[0:1], v[2:3] 583ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 584ee61a4dbSMatt Arsenault %result = call nnan double @llvm.minimumnum.f64(double %x, double %y) 585ee61a4dbSMatt Arsenault ret double %result 586ee61a4dbSMatt Arsenault} 587ee61a4dbSMatt Arsenault 588ee61a4dbSMatt Arsenaultdefine float @v_minimumnum_f32_1.0(float %x) { 589ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f32_1.0: 590ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 591ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 592ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0 593ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, 1.0, v0 594ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 595ee61a4dbSMatt Arsenault; 596ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f32_1.0: 597ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 598ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 599ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v0, v0, v0 600ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, 1.0, v0 601ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 602ee61a4dbSMatt Arsenault; 603ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f32_1.0: 604ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 605ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 606ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v0, v0, v0 607ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, 1.0, v0 608ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 609ee61a4dbSMatt Arsenault; 610ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f32_1.0: 611ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 612ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 613ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e32 v0, v0, v0 614ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 615ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f32_e32 v0, 1.0, v0 616ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 617ee61a4dbSMatt Arsenault; 618ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f32_1.0: 619ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 620ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 621ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 622ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 623ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 624ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 625ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v0 626ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 627ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f32_e32 v0, 1.0, v0 628ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 629ee61a4dbSMatt Arsenault %result = call float @llvm.minimumnum.f32(float %x, float 1.0) 630ee61a4dbSMatt Arsenault ret float %result 631ee61a4dbSMatt Arsenault} 632ee61a4dbSMatt Arsenault 633ee61a4dbSMatt Arsenaultdefine float @v_minimumnum_f32_rhs_not_snan(float %x, float %y) { 634ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f32_rhs_not_snan: 635ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 636ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 637ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1 638ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0 639ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v1 640ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 641ee61a4dbSMatt Arsenault; 642ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f32_rhs_not_snan: 643ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 644ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 645ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v1, v1, v1 646ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v0, v0, v0 647ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v1 648ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 649ee61a4dbSMatt Arsenault; 650ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f32_rhs_not_snan: 651ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 652ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 653ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v1, v1, v1 654ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v0, v0, v0 655ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v1 656ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 657ee61a4dbSMatt Arsenault; 658ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f32_rhs_not_snan: 659ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 660ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 661ee61a4dbSMatt Arsenault; GFX11-NEXT: v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0 662ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 663ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f32_e32 v0, v0, v1 664ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 665ee61a4dbSMatt Arsenault; 666ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f32_rhs_not_snan: 667ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 668ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 669ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 670ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 671ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 672ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 673ee61a4dbSMatt Arsenault; GFX12-NEXT: v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0 674ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 675ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1 676ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 677ee61a4dbSMatt Arsenault %canon.y = call float @llvm.canonicalize.f32(float %y) 678ee61a4dbSMatt Arsenault %result = call float @llvm.minimumnum.f32(float %x, float %canon.y) 679ee61a4dbSMatt Arsenault ret float %result 680ee61a4dbSMatt Arsenault} 681ee61a4dbSMatt Arsenault 682ee61a4dbSMatt Arsenaultdefine float @v_minimumnum_f32_lhs_not_snan(float %x, float %y) { 683ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f32_lhs_not_snan: 684ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 685ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 686ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0 687ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1 688ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v1 689ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 690ee61a4dbSMatt Arsenault; 691ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f32_lhs_not_snan: 692ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 693ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 694ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v0, v0, v0 695ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v1, v1, v1 696ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v1 697ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 698ee61a4dbSMatt Arsenault; 699ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f32_lhs_not_snan: 700ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 701ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 702ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v0, v0, v0 703ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v1, v1, v1 704ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v1 705ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 706ee61a4dbSMatt Arsenault; 707ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f32_lhs_not_snan: 708ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 709ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 710ee61a4dbSMatt Arsenault; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1 711ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 712ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f32_e32 v0, v0, v1 713ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 714ee61a4dbSMatt Arsenault; 715ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f32_lhs_not_snan: 716ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 717ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 718ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 719ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 720ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 721ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 722ee61a4dbSMatt Arsenault; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1 723ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 724ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1 725ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 726ee61a4dbSMatt Arsenault %canon.x = call float @llvm.canonicalize.f32(float %x) 727ee61a4dbSMatt Arsenault %result = call float @llvm.minimumnum.f32(float %canon.x, float %y) 728ee61a4dbSMatt Arsenault ret float %result 729ee61a4dbSMatt Arsenault} 730ee61a4dbSMatt Arsenault 731ee61a4dbSMatt Arsenaultdefine float @v_minimumnum_f32_both_operands_not_snan(float %x, float %y) { 732ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f32_both_operands_not_snan: 733ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 734ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 735ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0 736ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1 737ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v1 738ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 739ee61a4dbSMatt Arsenault; 740ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f32_both_operands_not_snan: 741ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 742ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 743ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v0, v0, v0 744ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v1, v1, v1 745ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v1 746ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 747ee61a4dbSMatt Arsenault; 748ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f32_both_operands_not_snan: 749ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 750ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 751ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v0, v0, v0 752ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v1, v1, v1 753ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v1 754ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 755ee61a4dbSMatt Arsenault; 756ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f32_both_operands_not_snan: 757ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 758ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 759ee61a4dbSMatt Arsenault; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1 760ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 761ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f32_e32 v0, v0, v1 762ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 763ee61a4dbSMatt Arsenault; 764ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f32_both_operands_not_snan: 765ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 766ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 767ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 768ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 769ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 770ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 771ee61a4dbSMatt Arsenault; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1 772ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 773ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1 774ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 775ee61a4dbSMatt Arsenault %canon.x = call float @llvm.canonicalize.f32(float %x) 776ee61a4dbSMatt Arsenault %canon.y = call float @llvm.canonicalize.f32(float %y) 777ee61a4dbSMatt Arsenault %result = call float @llvm.minimumnum.f32(float %canon.x, float %canon.y) 778ee61a4dbSMatt Arsenault ret float %result 779ee61a4dbSMatt Arsenault} 780ee61a4dbSMatt Arsenault 781ee61a4dbSMatt Arsenaultdefine double @v_minimumnum_f64_1.0(double %x) { 782ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f64_1.0: 783ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 784ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 785ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 786ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f64 v[0:1], v[0:1], 1.0 787ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 788ee61a4dbSMatt Arsenault; 789ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f64_1.0: 790ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 791ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 792ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 793ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], 1.0 794ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 795ee61a4dbSMatt Arsenault; 796ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f64_1.0: 797ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 798ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 799ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 800ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f64 v[0:1], v[0:1], 1.0 801ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 802ee61a4dbSMatt Arsenault; 803ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f64_1.0: 804ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 805ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 806ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 807ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 808ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f64 v[0:1], v[0:1], 1.0 809ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 810ee61a4dbSMatt Arsenault; 811ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f64_1.0: 812ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 813ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 814ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 815ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 816ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 817ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 818ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[0:1], v[0:1], v[0:1] 819ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 820ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[0:1], 1.0, v[0:1] 821ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 822ee61a4dbSMatt Arsenault %result = call double @llvm.minimumnum.f64(double %x, double 1.0) 823ee61a4dbSMatt Arsenault ret double %result 824ee61a4dbSMatt Arsenault} 825ee61a4dbSMatt Arsenault 826ee61a4dbSMatt Arsenaultdefine half @v_minimumnum_f16_v_s(half %x, half inreg %y) { 827ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f16_v_s: 828ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 829ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 8306548b635SShilei Tian; GFX8-NEXT: v_max_f16_e64 v1, s16, s16 831ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v0, v0, v0 832ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v0, v0, v1 833ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 834ee61a4dbSMatt Arsenault; 835ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f16_v_s: 836ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 837ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 8386548b635SShilei Tian; GFX9-NEXT: v_max_f16_e64 v1, s16, s16 839ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f16_e32 v0, v0, v0 840ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f16_e32 v0, v0, v1 841ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 842ee61a4dbSMatt Arsenault; 843ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f16_v_s: 844ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 845ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 8466548b635SShilei Tian; GFX10-NEXT: v_max_f16_e64 v1, s16, s16 847ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f16_e32 v0, v0, v0 848ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f16_e32 v0, v0, v1 849ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 850ee61a4dbSMatt Arsenault; 851ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f16_v_s: 852ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 853ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 854ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f16_e64 v1, s0, s0 855ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f16_e32 v0, v0, v0 856ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 857ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f16_e32 v0, v0, v1 858ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 859ee61a4dbSMatt Arsenault; 860ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f16_v_s: 861ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 862ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 863ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 864ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 865ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 866ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 867ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f16_e64 v1, s0, s0 868ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f16_e32 v0, v0, v0 869ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 870ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f16_e32 v0, v0, v1 871ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 872ee61a4dbSMatt Arsenault %result = call half @llvm.minimumnum.f16(half %x, half %y) 873ee61a4dbSMatt Arsenault ret half %result 874ee61a4dbSMatt Arsenault} 875ee61a4dbSMatt Arsenault 876ee61a4dbSMatt Arsenaultdefine half @v_minimumnum_f16_s_s(half inreg %x, half inreg %y) { 877ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f16_s_s: 878ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 879ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 8806548b635SShilei Tian; GFX8-NEXT: v_max_f16_e64 v0, s17, s17 8816548b635SShilei Tian; GFX8-NEXT: v_max_f16_e64 v1, s16, s16 882ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v0, v1, v0 883ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 884ee61a4dbSMatt Arsenault; 885ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f16_s_s: 886ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 887ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 8886548b635SShilei Tian; GFX9-NEXT: v_max_f16_e64 v0, s17, s17 8896548b635SShilei Tian; GFX9-NEXT: v_max_f16_e64 v1, s16, s16 890ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f16_e32 v0, v1, v0 891ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 892ee61a4dbSMatt Arsenault; 893ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f16_s_s: 894ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 895ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 8966548b635SShilei Tian; GFX10-NEXT: v_max_f16_e64 v0, s17, s17 8976548b635SShilei Tian; GFX10-NEXT: v_max_f16_e64 v1, s16, s16 898ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f16_e32 v0, v1, v0 899ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 900ee61a4dbSMatt Arsenault; 901ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f16_s_s: 902ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 903ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 904ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f16_e64 v0, s1, s1 905ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f16_e64 v1, s0, s0 906ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 907ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f16_e32 v0, v1, v0 908ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 909ee61a4dbSMatt Arsenault; 910ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f16_s_s: 911ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 912ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 913ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 914ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 915ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 916ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 917ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f16_e64 v0, s1, s1 918ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f16_e64 v1, s0, s0 919ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 920ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f16_e32 v0, v1, v0 921ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 922ee61a4dbSMatt Arsenault %result = call half @llvm.minimumnum.f16(half %x, half %y) 923ee61a4dbSMatt Arsenault ret half %result 924ee61a4dbSMatt Arsenault} 925ee61a4dbSMatt Arsenault 926ee61a4dbSMatt Arsenaultdefine float @v_minimumnum_f32_s_v(float inreg %x, float %y) { 927ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f32_s_v: 928ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 929ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 930ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0 9316548b635SShilei Tian; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s16 932ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v1, v0 933ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 934ee61a4dbSMatt Arsenault; 935ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f32_s_v: 936ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 937ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 938ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v0, v0, v0 9396548b635SShilei Tian; GFX9-NEXT: v_max_f32_e64 v1, s16, s16 940ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v1, v0 941ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 942ee61a4dbSMatt Arsenault; 943ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f32_s_v: 944ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 945ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 946ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v0, v0, v0 9476548b635SShilei Tian; GFX10-NEXT: v_max_f32_e64 v1, s16, s16 948ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v1, v0 949ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 950ee61a4dbSMatt Arsenault; 951ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f32_s_v: 952ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 953ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 954ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e32 v0, v0, v0 955ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e64 v1, s0, s0 956ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 957ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f32_e32 v0, v1, v0 958ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 959ee61a4dbSMatt Arsenault; 960ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f32_s_v: 961ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 962ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 963ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 964ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 965ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 966ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 967ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v0 968ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e64 v1, s0, s0 969ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 970ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f32_e32 v0, v1, v0 971ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 972ee61a4dbSMatt Arsenault %result = call float @llvm.minimumnum.f32(float %x, float %y) 973ee61a4dbSMatt Arsenault ret float %result 974ee61a4dbSMatt Arsenault} 975ee61a4dbSMatt Arsenault 976ee61a4dbSMatt Arsenaultdefine float @v_minimumnum_f32_v_s(float %x, float inreg %y) { 977ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f32_v_s: 978ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 979ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 9806548b635SShilei Tian; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s16 981ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0 982ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v1 983ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 984ee61a4dbSMatt Arsenault; 985ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f32_v_s: 986ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 987ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 9886548b635SShilei Tian; GFX9-NEXT: v_max_f32_e64 v1, s16, s16 989ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v0, v0, v0 990ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v1 991ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 992ee61a4dbSMatt Arsenault; 993ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f32_v_s: 994ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 995ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 9966548b635SShilei Tian; GFX10-NEXT: v_max_f32_e64 v1, s16, s16 997ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v0, v0, v0 998ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v1 999ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 1000ee61a4dbSMatt Arsenault; 1001ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f32_v_s: 1002ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 1003ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1004ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e64 v1, s0, s0 1005ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e32 v0, v0, v0 1006ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 1007ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f32_e32 v0, v0, v1 1008ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 1009ee61a4dbSMatt Arsenault; 1010ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f32_v_s: 1011ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 1012ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 1013ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 1014ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 1015ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 1016ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 1017ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e64 v1, s0, s0 1018ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v0 1019ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 1020ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1 1021ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 1022ee61a4dbSMatt Arsenault %result = call float @llvm.minimumnum.f32(float %x, float %y) 1023ee61a4dbSMatt Arsenault ret float %result 1024ee61a4dbSMatt Arsenault} 1025ee61a4dbSMatt Arsenault 1026ee61a4dbSMatt Arsenaultdefine float @v_minimumnum_f32_s_s(float inreg %x, float inreg %y) { 1027ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f32_s_s: 1028ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 1029ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 10306548b635SShilei Tian; GFX8-NEXT: v_mul_f32_e64 v0, 1.0, s17 10316548b635SShilei Tian; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s16 1032ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v1, v0 1033ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 1034ee61a4dbSMatt Arsenault; 1035ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f32_s_s: 1036ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 1037ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 10386548b635SShilei Tian; GFX9-NEXT: v_max_f32_e64 v0, s17, s17 10396548b635SShilei Tian; GFX9-NEXT: v_max_f32_e64 v1, s16, s16 1040ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v1, v0 1041ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 1042ee61a4dbSMatt Arsenault; 1043ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f32_s_s: 1044ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 1045ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 10466548b635SShilei Tian; GFX10-NEXT: v_max_f32_e64 v0, s17, s17 10476548b635SShilei Tian; GFX10-NEXT: v_max_f32_e64 v1, s16, s16 1048ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v1, v0 1049ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 1050ee61a4dbSMatt Arsenault; 1051ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f32_s_s: 1052ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 1053ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1054ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e64 v0, s1, s1 1055ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e64 v1, s0, s0 1056ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 1057ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f32_e32 v0, v1, v0 1058ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 1059ee61a4dbSMatt Arsenault; 1060ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f32_s_s: 1061ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 1062ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 1063ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 1064ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 1065ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 1066ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 1067ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e64 v0, s1, s1 1068ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e64 v1, s0, s0 1069ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 1070ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f32_e32 v0, v1, v0 1071ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 1072ee61a4dbSMatt Arsenault %result = call float @llvm.minimumnum.f32(float %x, float %y) 1073ee61a4dbSMatt Arsenault ret float %result 1074ee61a4dbSMatt Arsenault} 1075ee61a4dbSMatt Arsenault 1076ee61a4dbSMatt Arsenaultdefine double @v_minimumnum_f64_s_v(double inreg %x, double %y) { 1077ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f64_s_v: 1078ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 1079ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1080ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 10816548b635SShilei Tian; GFX8-NEXT: v_max_f64 v[2:3], s[16:17], s[16:17] 1082ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f64 v[0:1], v[2:3], v[0:1] 1083ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 1084ee61a4dbSMatt Arsenault; 1085ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f64_s_v: 1086ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 1087ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1088ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 10896548b635SShilei Tian; GFX9-NEXT: v_max_f64 v[2:3], s[16:17], s[16:17] 1090ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f64 v[0:1], v[2:3], v[0:1] 1091ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 1092ee61a4dbSMatt Arsenault; 1093ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f64_s_v: 1094ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 1095ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 10966548b635SShilei Tian; GFX10-NEXT: v_max_f64 v[2:3], s[16:17], s[16:17] 1097ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 1098ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f64 v[0:1], v[2:3], v[0:1] 1099ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 1100ee61a4dbSMatt Arsenault; 1101ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f64_s_v: 1102ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 1103ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1104ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f64 v[2:3], s[0:1], s[0:1] 1105ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 1106ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 1107ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f64 v[0:1], v[2:3], v[0:1] 1108ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 1109ee61a4dbSMatt Arsenault; 1110ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f64_s_v: 1111ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 1112ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 1113ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 1114ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 1115ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 1116ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 1117ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f64_e64 v[2:3], s[0:1], s[0:1] 1118ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[0:1], v[0:1], v[0:1] 1119ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 1120ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[0:1], v[2:3], v[0:1] 1121ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 1122ee61a4dbSMatt Arsenault %result = call double @llvm.minimumnum.f64(double %x, double %y) 1123ee61a4dbSMatt Arsenault ret double %result 1124ee61a4dbSMatt Arsenault} 1125ee61a4dbSMatt Arsenault 1126ee61a4dbSMatt Arsenaultdefine double @v_minimumnum_f64_v_s(double %x, double inreg %y) { 1127ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f64_v_s: 1128ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 1129ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 11306548b635SShilei Tian; GFX8-NEXT: v_max_f64 v[2:3], s[16:17], s[16:17] 1131ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 1132ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 1133ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 1134ee61a4dbSMatt Arsenault; 1135ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f64_v_s: 1136ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 1137ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 11386548b635SShilei Tian; GFX9-NEXT: v_max_f64 v[2:3], s[16:17], s[16:17] 1139ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 1140ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 1141ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 1142ee61a4dbSMatt Arsenault; 1143ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f64_v_s: 1144ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 1145ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 11466548b635SShilei Tian; GFX10-NEXT: v_max_f64 v[2:3], s[16:17], s[16:17] 1147ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 1148ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 1149ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 1150ee61a4dbSMatt Arsenault; 1151ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f64_v_s: 1152ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 1153ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1154ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f64 v[2:3], s[0:1], s[0:1] 1155ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 1156ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 1157ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 1158ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 1159ee61a4dbSMatt Arsenault; 1160ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f64_v_s: 1161ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 1162ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 1163ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 1164ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 1165ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 1166ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 1167ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f64_e64 v[2:3], s[0:1], s[0:1] 1168ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[0:1], v[0:1], v[0:1] 1169ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 1170ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[0:1], v[0:1], v[2:3] 1171ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 1172ee61a4dbSMatt Arsenault %result = call double @llvm.minimumnum.f64(double %x, double %y) 1173ee61a4dbSMatt Arsenault ret double %result 1174ee61a4dbSMatt Arsenault} 1175ee61a4dbSMatt Arsenault 1176ee61a4dbSMatt Arsenaultdefine double @v_minimumnum_f64_s_s(double inreg %x, double inreg %y) { 1177ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f64_s_s: 1178ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 1179ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 11806548b635SShilei Tian; GFX8-NEXT: v_max_f64 v[0:1], s[18:19], s[18:19] 11816548b635SShilei Tian; GFX8-NEXT: v_max_f64 v[2:3], s[16:17], s[16:17] 1182ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f64 v[0:1], v[2:3], v[0:1] 1183ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 1184ee61a4dbSMatt Arsenault; 1185ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f64_s_s: 1186ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 1187ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 11886548b635SShilei Tian; GFX9-NEXT: v_max_f64 v[0:1], s[18:19], s[18:19] 11896548b635SShilei Tian; GFX9-NEXT: v_max_f64 v[2:3], s[16:17], s[16:17] 1190ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f64 v[0:1], v[2:3], v[0:1] 1191ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 1192ee61a4dbSMatt Arsenault; 1193ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f64_s_s: 1194ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 1195ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 11966548b635SShilei Tian; GFX10-NEXT: v_max_f64 v[0:1], s[18:19], s[18:19] 11976548b635SShilei Tian; GFX10-NEXT: v_max_f64 v[2:3], s[16:17], s[16:17] 1198ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f64 v[0:1], v[2:3], v[0:1] 1199ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 1200ee61a4dbSMatt Arsenault; 1201ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f64_s_s: 1202ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 1203ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1204ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f64 v[0:1], s[2:3], s[2:3] 1205ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f64 v[2:3], s[0:1], s[0:1] 1206ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 1207ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f64 v[0:1], v[2:3], v[0:1] 1208ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 1209ee61a4dbSMatt Arsenault; 1210ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f64_s_s: 1211ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 1212ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 1213ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 1214ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 1215ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 1216ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 1217ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f64_e64 v[0:1], s[2:3], s[2:3] 1218ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f64_e64 v[2:3], s[0:1], s[0:1] 1219ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 1220ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[0:1], v[2:3], v[0:1] 1221ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 1222ee61a4dbSMatt Arsenault %result = call double @llvm.minimumnum.f64(double %x, double %y) 1223ee61a4dbSMatt Arsenault ret double %result 1224ee61a4dbSMatt Arsenault} 1225ee61a4dbSMatt Arsenault 1226ee61a4dbSMatt Arsenaultdefine float @v_minimumnum_f32_fabs_rhs(float %x, float %y) { 1227ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f32_fabs_rhs: 1228ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 1229ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1230ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, |v1| 1231ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0 1232ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v1 1233ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 1234ee61a4dbSMatt Arsenault; 1235ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f32_fabs_rhs: 1236ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 1237ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1238ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e64 v1, |v1|, |v1| 1239ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v0, v0, v0 1240ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v1 1241ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 1242ee61a4dbSMatt Arsenault; 1243ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f32_fabs_rhs: 1244ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 1245ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1246ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e64 v1, |v1|, |v1| 1247ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v0, v0, v0 1248ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v1 1249ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 1250ee61a4dbSMatt Arsenault; 1251ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f32_fabs_rhs: 1252ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 1253ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1254ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e64 v1, |v1|, |v1| 1255ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e32 v0, v0, v0 1256ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 1257ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f32_e32 v0, v0, v1 1258ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 1259ee61a4dbSMatt Arsenault; 1260ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f32_fabs_rhs: 1261ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 1262ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 1263ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 1264ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 1265ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 1266ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 1267ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e64 v1, |v1|, |v1| 1268ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v0 1269ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 1270ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1 1271ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 1272ee61a4dbSMatt Arsenault %fabs.y = call float @llvm.fabs.f32(float %y) 1273ee61a4dbSMatt Arsenault %result = call float @llvm.minimumnum.f32(float %x, float %fabs.y) 1274ee61a4dbSMatt Arsenault ret float %result 1275ee61a4dbSMatt Arsenault} 1276ee61a4dbSMatt Arsenault 1277ee61a4dbSMatt Arsenaultdefine float @v_minimumnum_f32_fneg_fabs_rhs(float %x, float %y) { 1278ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f32_fneg_fabs_rhs: 1279ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 1280ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1281ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e64 v1, -1.0, |v1| 1282ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0 1283ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v1 1284ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 1285ee61a4dbSMatt Arsenault; 1286ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f32_fneg_fabs_rhs: 1287ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 1288ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1289ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e64 v1, -|v1|, -|v1| 1290ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v0, v0, v0 1291ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v1 1292ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 1293ee61a4dbSMatt Arsenault; 1294ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f32_fneg_fabs_rhs: 1295ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 1296ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1297ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e64 v1, -|v1|, -|v1| 1298ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v0, v0, v0 1299ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v1 1300ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 1301ee61a4dbSMatt Arsenault; 1302ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f32_fneg_fabs_rhs: 1303ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 1304ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1305ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e64 v1, -|v1|, -|v1| 1306ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e32 v0, v0, v0 1307ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 1308ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f32_e32 v0, v0, v1 1309ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 1310ee61a4dbSMatt Arsenault; 1311ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f32_fneg_fabs_rhs: 1312ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 1313ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 1314ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 1315ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 1316ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 1317ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 1318ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e64 v1, -|v1|, -|v1| 1319ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v0 1320ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 1321ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1 1322ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 1323ee61a4dbSMatt Arsenault %fabs.y = call float @llvm.fabs.f32(float %y) 1324ee61a4dbSMatt Arsenault %fneg.fabs.y = fneg float %fabs.y 1325ee61a4dbSMatt Arsenault %result = call float @llvm.minimumnum.f32(float %x, float %fneg.fabs.y) 1326ee61a4dbSMatt Arsenault ret float %result 1327ee61a4dbSMatt Arsenault} 1328ee61a4dbSMatt Arsenault 1329ee61a4dbSMatt Arsenaultdefine float @v_minimumnum_f32_fabs(float %x, float %y) { 1330ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f32_fabs: 1331ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 1332ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1333ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, |v1| 1334ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e64 v0, 1.0, |v0| 1335ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v1 1336ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 1337ee61a4dbSMatt Arsenault; 1338ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f32_fabs: 1339ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 1340ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1341ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e64 v1, |v1|, |v1| 1342ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e64 v0, |v0|, |v0| 1343ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v1 1344ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 1345ee61a4dbSMatt Arsenault; 1346ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f32_fabs: 1347ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 1348ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1349ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e64 v1, |v1|, |v1| 1350ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e64 v0, |v0|, |v0| 1351ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v1 1352ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 1353ee61a4dbSMatt Arsenault; 1354ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f32_fabs: 1355ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 1356ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1357ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e64 v1, |v1|, |v1| 1358ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e64 v0, |v0|, |v0| 1359ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 1360ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f32_e32 v0, v0, v1 1361ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 1362ee61a4dbSMatt Arsenault; 1363ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f32_fabs: 1364ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 1365ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 1366ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 1367ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 1368ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 1369ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 1370ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e64 v1, |v1|, |v1| 1371ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e64 v0, |v0|, |v0| 1372ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 1373ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1 1374ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 1375ee61a4dbSMatt Arsenault %fabs.x = call float @llvm.fabs.f32(float %x) 1376ee61a4dbSMatt Arsenault %fabs.y = call float @llvm.fabs.f32(float %y) 1377ee61a4dbSMatt Arsenault %result = call float @llvm.minimumnum.f32(float %fabs.x, float %fabs.y) 1378ee61a4dbSMatt Arsenault ret float %result 1379ee61a4dbSMatt Arsenault} 1380ee61a4dbSMatt Arsenault 1381ee61a4dbSMatt Arsenaultdefine float @v_minimumnum_f32_fneg(float %x, float %y) { 1382ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f32_fneg: 1383ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 1384ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1385ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v1, -1.0, v1 1386ee61a4dbSMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v0, -1.0, v0 1387ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v1 1388ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 1389ee61a4dbSMatt Arsenault; 1390ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f32_fneg: 1391ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 1392ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1393ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e64 v1, -v1, -v1 1394ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f32_e64 v0, -v0, -v0 1395ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v1 1396ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 1397ee61a4dbSMatt Arsenault; 1398ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f32_fneg: 1399ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 1400ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1401ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e64 v1, -v1, -v1 1402ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f32_e64 v0, -v0, -v0 1403ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v1 1404ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 1405ee61a4dbSMatt Arsenault; 1406ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f32_fneg: 1407ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 1408ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1409ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e64 v1, -v1, -v1 1410ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f32_e64 v0, -v0, -v0 1411ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 1412ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f32_e32 v0, v0, v1 1413ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 1414ee61a4dbSMatt Arsenault; 1415ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f32_fneg: 1416ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 1417ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 1418ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 1419ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 1420ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 1421ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 1422ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e64 v1, -v1, -v1 1423ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f32_e64 v0, -v0, -v0 1424ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 1425ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1 1426ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 1427ee61a4dbSMatt Arsenault %fneg.x = fneg float %x 1428ee61a4dbSMatt Arsenault %fneg.y = fneg float %y 1429ee61a4dbSMatt Arsenault %result = call float @llvm.minimumnum.f32(float %fneg.x, float %fneg.y) 1430ee61a4dbSMatt Arsenault ret float %result 1431ee61a4dbSMatt Arsenault} 1432ee61a4dbSMatt Arsenault 1433ee61a4dbSMatt Arsenaultdefine half @v_minimumnum_f16_fabs_rhs(half %x, half %y) { 1434ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f16_fabs_rhs: 1435ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 1436ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1437ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f16_e64 v1, |v1|, |v1| 1438ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v0, v0, v0 1439ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v0, v0, v1 1440ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 1441ee61a4dbSMatt Arsenault; 1442ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f16_fabs_rhs: 1443ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 1444ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1445ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f16_e64 v1, |v1|, |v1| 1446ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f16_e32 v0, v0, v0 1447ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f16_e32 v0, v0, v1 1448ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 1449ee61a4dbSMatt Arsenault; 1450ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f16_fabs_rhs: 1451ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 1452ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1453ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f16_e64 v1, |v1|, |v1| 1454ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f16_e32 v0, v0, v0 1455ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f16_e32 v0, v0, v1 1456ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 1457ee61a4dbSMatt Arsenault; 1458ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f16_fabs_rhs: 1459ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 1460ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1461ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f16_e64 v1, |v1|, |v1| 1462ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f16_e32 v0, v0, v0 1463ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 1464ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f16_e32 v0, v0, v1 1465ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 1466ee61a4dbSMatt Arsenault; 1467ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f16_fabs_rhs: 1468ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 1469ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 1470ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 1471ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 1472ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 1473ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 1474ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f16_e64 v1, |v1|, |v1| 1475ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f16_e32 v0, v0, v0 1476ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 1477ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f16_e32 v0, v0, v1 1478ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 1479ee61a4dbSMatt Arsenault %fabs.y = call half @llvm.fabs.f16(half %y) 1480ee61a4dbSMatt Arsenault %result = call half @llvm.minimumnum.f16(half %x, half %fabs.y) 1481ee61a4dbSMatt Arsenault ret half %result 1482ee61a4dbSMatt Arsenault} 1483ee61a4dbSMatt Arsenault 1484ee61a4dbSMatt Arsenaultdefine half @v_minimumnum_f16_fneg_fabs_rhs(half %x, half %y) { 1485ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f16_fneg_fabs_rhs: 1486ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 1487ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1488ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f16_e64 v1, -|v1|, -|v1| 1489ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v0, v0, v0 1490ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v0, v0, v1 1491ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 1492ee61a4dbSMatt Arsenault; 1493ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f16_fneg_fabs_rhs: 1494ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 1495ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1496ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f16_e64 v1, -|v1|, -|v1| 1497ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f16_e32 v0, v0, v0 1498ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f16_e32 v0, v0, v1 1499ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 1500ee61a4dbSMatt Arsenault; 1501ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f16_fneg_fabs_rhs: 1502ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 1503ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1504ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f16_e64 v1, -|v1|, -|v1| 1505ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f16_e32 v0, v0, v0 1506ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f16_e32 v0, v0, v1 1507ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 1508ee61a4dbSMatt Arsenault; 1509ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f16_fneg_fabs_rhs: 1510ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 1511ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1512ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f16_e64 v1, -|v1|, -|v1| 1513ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f16_e32 v0, v0, v0 1514ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 1515ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f16_e32 v0, v0, v1 1516ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 1517ee61a4dbSMatt Arsenault; 1518ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f16_fneg_fabs_rhs: 1519ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 1520ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 1521ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 1522ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 1523ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 1524ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 1525ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f16_e64 v1, -|v1|, -|v1| 1526ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f16_e32 v0, v0, v0 1527ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 1528ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f16_e32 v0, v0, v1 1529ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 1530ee61a4dbSMatt Arsenault %fabs.y = call half @llvm.fabs.f16(half %y) 1531ee61a4dbSMatt Arsenault %fneg.fabs.y = fneg half %fabs.y 1532ee61a4dbSMatt Arsenault %result = call half @llvm.minimumnum.f16(half %x, half %fneg.fabs.y) 1533ee61a4dbSMatt Arsenault ret half %result 1534ee61a4dbSMatt Arsenault} 1535ee61a4dbSMatt Arsenault 1536ee61a4dbSMatt Arsenaultdefine half @v_minimumnum_f16_fabs(half %x, half %y) { 1537ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f16_fabs: 1538ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 1539ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1540ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f16_e64 v1, |v1|, |v1| 1541ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f16_e64 v0, |v0|, |v0| 1542ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v0, v0, v1 1543ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 1544ee61a4dbSMatt Arsenault; 1545ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f16_fabs: 1546ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 1547ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1548ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f16_e64 v1, |v1|, |v1| 1549ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f16_e64 v0, |v0|, |v0| 1550ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f16_e32 v0, v0, v1 1551ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 1552ee61a4dbSMatt Arsenault; 1553ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f16_fabs: 1554ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 1555ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1556ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f16_e64 v1, |v1|, |v1| 1557ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f16_e64 v0, |v0|, |v0| 1558ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f16_e32 v0, v0, v1 1559ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 1560ee61a4dbSMatt Arsenault; 1561ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f16_fabs: 1562ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 1563ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1564ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f16_e64 v1, |v1|, |v1| 1565ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f16_e64 v0, |v0|, |v0| 1566ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 1567ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f16_e32 v0, v0, v1 1568ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 1569ee61a4dbSMatt Arsenault; 1570ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f16_fabs: 1571ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 1572ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 1573ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 1574ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 1575ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 1576ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 1577ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f16_e64 v1, |v1|, |v1| 1578ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f16_e64 v0, |v0|, |v0| 1579ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 1580ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f16_e32 v0, v0, v1 1581ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 1582ee61a4dbSMatt Arsenault %fabs.x = call half @llvm.fabs.f16(half %x) 1583ee61a4dbSMatt Arsenault %fabs.y = call half @llvm.fabs.f16(half %y) 1584ee61a4dbSMatt Arsenault %result = call half @llvm.minimumnum.f16(half %fabs.x, half %fabs.y) 1585ee61a4dbSMatt Arsenault ret half %result 1586ee61a4dbSMatt Arsenault} 1587ee61a4dbSMatt Arsenault 1588ee61a4dbSMatt Arsenaultdefine half @v_minimumnum_f16_fneg(half %x, half %y) { 1589ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f16_fneg: 1590ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 1591ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1592ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f16_e64 v1, -v1, -v1 1593ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f16_e64 v0, -v0, -v0 1594ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v0, v0, v1 1595ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 1596ee61a4dbSMatt Arsenault; 1597ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f16_fneg: 1598ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 1599ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1600ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f16_e64 v1, -v1, -v1 1601ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f16_e64 v0, -v0, -v0 1602ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f16_e32 v0, v0, v1 1603ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 1604ee61a4dbSMatt Arsenault; 1605ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f16_fneg: 1606ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 1607ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1608ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f16_e64 v1, -v1, -v1 1609ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f16_e64 v0, -v0, -v0 1610ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f16_e32 v0, v0, v1 1611ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 1612ee61a4dbSMatt Arsenault; 1613ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f16_fneg: 1614ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 1615ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1616ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f16_e64 v1, -v1, -v1 1617ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f16_e64 v0, -v0, -v0 1618ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 1619ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f16_e32 v0, v0, v1 1620ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 1621ee61a4dbSMatt Arsenault; 1622ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f16_fneg: 1623ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 1624ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 1625ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 1626ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 1627ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 1628ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 1629ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f16_e64 v1, -v1, -v1 1630ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f16_e64 v0, -v0, -v0 1631ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 1632ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f16_e32 v0, v0, v1 1633ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 1634ee61a4dbSMatt Arsenault %fneg.x = fneg half %x 1635ee61a4dbSMatt Arsenault %fneg.y = fneg half %y 1636ee61a4dbSMatt Arsenault %result = call half @llvm.minimumnum.f16(half %fneg.x, half %fneg.y) 1637ee61a4dbSMatt Arsenault ret half %result 1638ee61a4dbSMatt Arsenault} 1639ee61a4dbSMatt Arsenault 1640ee61a4dbSMatt Arsenaultdefine double @v_minimumnum_f64_fneg(double %x, double %y) { 1641ee61a4dbSMatt Arsenault; GFX8-LABEL: v_minimumnum_f64_fneg: 1642ee61a4dbSMatt Arsenault; GFX8: ; %bb.0: 1643ee61a4dbSMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1644ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f64 v[2:3], -v[2:3], -v[2:3] 1645ee61a4dbSMatt Arsenault; GFX8-NEXT: v_max_f64 v[0:1], -v[0:1], -v[0:1] 1646ee61a4dbSMatt Arsenault; GFX8-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 1647ee61a4dbSMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 1648ee61a4dbSMatt Arsenault; 1649ee61a4dbSMatt Arsenault; GFX9-LABEL: v_minimumnum_f64_fneg: 1650ee61a4dbSMatt Arsenault; GFX9: ; %bb.0: 1651ee61a4dbSMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1652ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f64 v[2:3], -v[2:3], -v[2:3] 1653ee61a4dbSMatt Arsenault; GFX9-NEXT: v_max_f64 v[0:1], -v[0:1], -v[0:1] 1654ee61a4dbSMatt Arsenault; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 1655ee61a4dbSMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 1656ee61a4dbSMatt Arsenault; 1657ee61a4dbSMatt Arsenault; GFX10-LABEL: v_minimumnum_f64_fneg: 1658ee61a4dbSMatt Arsenault; GFX10: ; %bb.0: 1659ee61a4dbSMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1660ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f64 v[2:3], -v[2:3], -v[2:3] 1661ee61a4dbSMatt Arsenault; GFX10-NEXT: v_max_f64 v[0:1], -v[0:1], -v[0:1] 1662ee61a4dbSMatt Arsenault; GFX10-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 1663ee61a4dbSMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 1664ee61a4dbSMatt Arsenault; 1665ee61a4dbSMatt Arsenault; GFX11-LABEL: v_minimumnum_f64_fneg: 1666ee61a4dbSMatt Arsenault; GFX11: ; %bb.0: 1667ee61a4dbSMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1668ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f64 v[2:3], -v[2:3], -v[2:3] 1669ee61a4dbSMatt Arsenault; GFX11-NEXT: v_max_f64 v[0:1], -v[0:1], -v[0:1] 1670ee61a4dbSMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 1671ee61a4dbSMatt Arsenault; GFX11-NEXT: v_min_f64 v[0:1], v[0:1], v[2:3] 1672ee61a4dbSMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 1673ee61a4dbSMatt Arsenault; 1674ee61a4dbSMatt Arsenault; GFX12-LABEL: v_minimumnum_f64_fneg: 1675ee61a4dbSMatt Arsenault; GFX12: ; %bb.0: 1676ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 1677ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 1678ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 1679ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 1680ee61a4dbSMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 1681ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f64_e64 v[2:3], -v[2:3], -v[2:3] 1682ee61a4dbSMatt Arsenault; GFX12-NEXT: v_max_num_f64_e64 v[0:1], -v[0:1], -v[0:1] 1683ee61a4dbSMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 1684ee61a4dbSMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[0:1], v[0:1], v[2:3] 1685ee61a4dbSMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 1686ee61a4dbSMatt Arsenault %fneg.x = fneg double %x 1687ee61a4dbSMatt Arsenault %fneg.y = fneg double %y 1688ee61a4dbSMatt Arsenault %result = call double @llvm.minimumnum.f64(double %fneg.x, double %fneg.y) 1689ee61a4dbSMatt Arsenault ret double %result 1690ee61a4dbSMatt Arsenault} 16915883ad34SMatt Arsenault 16925883ad34SMatt Arsenaultdefine <2 x half> @v_minimumnum_v2f16(<2 x half> %x, <2 x half> %y) { 16935883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v2f16: 16945883ad34SMatt Arsenault; GFX8: ; %bb.0: 16955883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 16965883ad34SMatt Arsenault; GFX8-NEXT: v_max_f16_sdwa v2, v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 16975883ad34SMatt Arsenault; GFX8-NEXT: v_max_f16_sdwa v3, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 16985883ad34SMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v1, v1, v1 16995883ad34SMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v0, v0, v0 17005883ad34SMatt Arsenault; GFX8-NEXT: v_min_f16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 17015883ad34SMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v0, v0, v1 17025883ad34SMatt Arsenault; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 17035883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 17045883ad34SMatt Arsenault; 17055883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v2f16: 17065883ad34SMatt Arsenault; GFX9: ; %bb.0: 17075883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 17085883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v1, v1, v1 17095883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v0, v0, v0 17105883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v0, v0, v1 17115883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 17125883ad34SMatt Arsenault; 17135883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v2f16: 17145883ad34SMatt Arsenault; GFX10: ; %bb.0: 17155883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 17165883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v1, v1, v1 17175883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v0, v0, v0 17185883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v0, v0, v1 17195883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 17205883ad34SMatt Arsenault; 17215883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v2f16: 17225883ad34SMatt Arsenault; GFX11: ; %bb.0: 17235883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 17245883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v1, v1, v1 17255883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v0, v0, v0 17265883ad34SMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 17275883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v0, v0, v1 17285883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 17295883ad34SMatt Arsenault; 17305883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v2f16: 17315883ad34SMatt Arsenault; GFX12: ; %bb.0: 17325883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 17335883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 17345883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 17355883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 17365883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 17375883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v1, v1, v1 17385883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v0, v0, v0 17395883ad34SMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 17405883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v0, v0, v1 17415883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 17425883ad34SMatt Arsenault %result = call <2 x half> @llvm.minimumnum.v2f16(<2 x half> %x, <2 x half> %y) 17435883ad34SMatt Arsenault ret <2 x half> %result 17445883ad34SMatt Arsenault} 17455883ad34SMatt Arsenault 17465883ad34SMatt Arsenaultdefine <2 x half> @v_minimumnum_v2f16_nnan(<2 x half> %x, <2 x half> %y) { 17475883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v2f16_nnan: 17485883ad34SMatt Arsenault; GFX8: ; %bb.0: 17495883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 17505883ad34SMatt Arsenault; GFX8-NEXT: v_min_f16_sdwa v2, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 17515883ad34SMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v0, v0, v1 17525883ad34SMatt Arsenault; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 17535883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 17545883ad34SMatt Arsenault; 17555883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v2f16_nnan: 17565883ad34SMatt Arsenault; GFX9: ; %bb.0: 17575883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 17585883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v0, v0, v1 17595883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 17605883ad34SMatt Arsenault; 17615883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v2f16_nnan: 17625883ad34SMatt Arsenault; GFX10: ; %bb.0: 17635883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 17645883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v0, v0, v1 17655883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 17665883ad34SMatt Arsenault; 17675883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v2f16_nnan: 17685883ad34SMatt Arsenault; GFX11: ; %bb.0: 17695883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 17705883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v0, v0, v1 17715883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 17725883ad34SMatt Arsenault; 17735883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v2f16_nnan: 17745883ad34SMatt Arsenault; GFX12: ; %bb.0: 17755883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 17765883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 17775883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 17785883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 17795883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 17805883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v0, v0, v1 17815883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 17825883ad34SMatt Arsenault %result = call nnan <2 x half> @llvm.minimumnum.v2f16(<2 x half> %x, <2 x half> %y) 17835883ad34SMatt Arsenault ret <2 x half> %result 17845883ad34SMatt Arsenault} 17855883ad34SMatt Arsenault 17865883ad34SMatt Arsenaultdefine <3 x half> @v_minimumnum_v3f16(<3 x half> %x, <3 x half> %y) { 17875883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v3f16: 17885883ad34SMatt Arsenault; GFX8: ; %bb.0: 17895883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 17905883ad34SMatt Arsenault; GFX8-NEXT: v_max_f16_sdwa v4, v2, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 17915883ad34SMatt Arsenault; GFX8-NEXT: v_max_f16_sdwa v5, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 17925883ad34SMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v2, v2, v2 17935883ad34SMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v0, v0, v0 17945883ad34SMatt Arsenault; GFX8-NEXT: v_min_f16_sdwa v4, v5, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 1795*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_e32 v3, v3, v3 17965883ad34SMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v1, v1, v1 1797*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_e32 v0, v0, v2 1798*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_e32 v1, v1, v3 17995883ad34SMatt Arsenault; GFX8-NEXT: v_or_b32_e32 v0, v0, v4 18005883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 18015883ad34SMatt Arsenault; 18025883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v3f16: 18035883ad34SMatt Arsenault; GFX9: ; %bb.0: 18045883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 18055883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v2, v2, v2 18065883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v0, v0, v0 18075883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v0, v0, v2 18085883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v2, v3, v3 18095883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v1, v1, v1 18105883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v1, v1, v2 18115883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 18125883ad34SMatt Arsenault; 18135883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v3f16: 18145883ad34SMatt Arsenault; GFX10: ; %bb.0: 18155883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 18165883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v2, v2, v2 18175883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v0, v0, v0 18185883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v3, v3, v3 18195883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v1, v1, v1 18205883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v0, v0, v2 18215883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v1, v1, v3 18225883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 18235883ad34SMatt Arsenault; 18245883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v3f16: 18255883ad34SMatt Arsenault; GFX11: ; %bb.0: 18265883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 18275883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v2, v2, v2 18285883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v0, v0, v0 18295883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v3, v3, v3 18305883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v1, v1, v1 18315883ad34SMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 18325883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v0, v0, v2 18335883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v1, v1, v3 18345883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 18355883ad34SMatt Arsenault; 18365883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v3f16: 18375883ad34SMatt Arsenault; GFX12: ; %bb.0: 18385883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 18395883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 18405883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 18415883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 18425883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 18435883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v2, v2, v2 18445883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v0, v0, v0 18455883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v3, v3, v3 18465883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v1, v1, v1 18475883ad34SMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 18485883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v0, v0, v2 18495883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v1, v1, v3 18505883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 18515883ad34SMatt Arsenault %result = call <3 x half> @llvm.minimumnum.v3f16(<3 x half> %x, <3 x half> %y) 18525883ad34SMatt Arsenault ret <3 x half> %result 18535883ad34SMatt Arsenault} 18545883ad34SMatt Arsenault 18555883ad34SMatt Arsenaultdefine <3 x half> @v_minimumnum_v3f16_nnan(<3 x half> %x, <3 x half> %y) { 18565883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v3f16_nnan: 18575883ad34SMatt Arsenault; GFX8: ; %bb.0: 18585883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 18595883ad34SMatt Arsenault; GFX8-NEXT: v_min_f16_sdwa v4, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 18605883ad34SMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v0, v0, v2 18615883ad34SMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v1, v1, v3 1862*15473820SPhoebe Wang; GFX8-NEXT: v_or_b32_e32 v0, v0, v4 18635883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 18645883ad34SMatt Arsenault; 18655883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v3f16_nnan: 18665883ad34SMatt Arsenault; GFX9: ; %bb.0: 18675883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 18685883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v0, v0, v2 18695883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v1, v1, v3 18705883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 18715883ad34SMatt Arsenault; 18725883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v3f16_nnan: 18735883ad34SMatt Arsenault; GFX10: ; %bb.0: 18745883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 18755883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v0, v0, v2 18765883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v1, v1, v3 18775883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 18785883ad34SMatt Arsenault; 18795883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v3f16_nnan: 18805883ad34SMatt Arsenault; GFX11: ; %bb.0: 18815883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 18825883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v0, v0, v2 18835883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v1, v1, v3 18845883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 18855883ad34SMatt Arsenault; 18865883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v3f16_nnan: 18875883ad34SMatt Arsenault; GFX12: ; %bb.0: 18885883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 18895883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 18905883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 18915883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 18925883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 18935883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v0, v0, v2 18945883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v1, v1, v3 18955883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 18965883ad34SMatt Arsenault %result = call nnan <3 x half> @llvm.minimumnum.v3f16(<3 x half> %x, <3 x half> %y) 18975883ad34SMatt Arsenault ret <3 x half> %result 18985883ad34SMatt Arsenault} 18995883ad34SMatt Arsenault 19005883ad34SMatt Arsenaultdefine <4 x half> @v_minimumnum_v4f16(<4 x half> %x, <4 x half> %y) { 19015883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v4f16: 19025883ad34SMatt Arsenault; GFX8: ; %bb.0: 19035883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1904*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v4, v3, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 1905*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v5, v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 19065883ad34SMatt Arsenault; GFX8-NEXT: v_min_f16_sdwa v4, v5, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 1907*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v5, v2, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 1908*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v6, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 19095883ad34SMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v3, v3, v3 19105883ad34SMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v1, v1, v1 1911*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_e32 v2, v2, v2 1912*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_e32 v0, v0, v0 1913*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_sdwa v5, v6, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 19145883ad34SMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v1, v1, v3 1915*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_e32 v0, v0, v2 1916*15473820SPhoebe Wang; GFX8-NEXT: v_or_b32_e32 v0, v0, v5 1917*15473820SPhoebe Wang; GFX8-NEXT: v_or_b32_e32 v1, v1, v4 19185883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 19195883ad34SMatt Arsenault; 19205883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v4f16: 19215883ad34SMatt Arsenault; GFX9: ; %bb.0: 19225883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 19235883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v2, v2, v2 19245883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v0, v0, v0 19255883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v0, v0, v2 19265883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v2, v3, v3 19275883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v1, v1, v1 19285883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v1, v1, v2 19295883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 19305883ad34SMatt Arsenault; 19315883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v4f16: 19325883ad34SMatt Arsenault; GFX10: ; %bb.0: 19335883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 19345883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v2, v2, v2 19355883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v0, v0, v0 19365883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v3, v3, v3 19375883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v1, v1, v1 19385883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v0, v0, v2 19395883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v1, v1, v3 19405883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 19415883ad34SMatt Arsenault; 19425883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v4f16: 19435883ad34SMatt Arsenault; GFX11: ; %bb.0: 19445883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 19455883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v2, v2, v2 19465883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v0, v0, v0 19475883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v3, v3, v3 19485883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v1, v1, v1 19495883ad34SMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 19505883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v0, v0, v2 19515883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v1, v1, v3 19525883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 19535883ad34SMatt Arsenault; 19545883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v4f16: 19555883ad34SMatt Arsenault; GFX12: ; %bb.0: 19565883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 19575883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 19585883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 19595883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 19605883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 19615883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v2, v2, v2 19625883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v0, v0, v0 19635883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v3, v3, v3 19645883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v1, v1, v1 19655883ad34SMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 19665883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v0, v0, v2 19675883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v1, v1, v3 19685883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 19695883ad34SMatt Arsenault %result = call <4 x half> @llvm.minimumnum.v4f16(<4 x half> %x, <4 x half> %y) 19705883ad34SMatt Arsenault ret <4 x half> %result 19715883ad34SMatt Arsenault} 19725883ad34SMatt Arsenault 19735883ad34SMatt Arsenaultdefine <4 x half> @v_minimumnum_v4f16_nnan(<4 x half> %x, <4 x half> %y) { 19745883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v4f16_nnan: 19755883ad34SMatt Arsenault; GFX8: ; %bb.0: 19765883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1977*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_sdwa v4, v1, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 1978*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_sdwa v5, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 19795883ad34SMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v1, v1, v3 1980*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_e32 v0, v0, v2 1981*15473820SPhoebe Wang; GFX8-NEXT: v_or_b32_e32 v0, v0, v5 1982*15473820SPhoebe Wang; GFX8-NEXT: v_or_b32_e32 v1, v1, v4 19835883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 19845883ad34SMatt Arsenault; 19855883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v4f16_nnan: 19865883ad34SMatt Arsenault; GFX9: ; %bb.0: 19875883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 19885883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v0, v0, v2 19895883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v1, v1, v3 19905883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 19915883ad34SMatt Arsenault; 19925883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v4f16_nnan: 19935883ad34SMatt Arsenault; GFX10: ; %bb.0: 19945883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 19955883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v0, v0, v2 19965883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v1, v1, v3 19975883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 19985883ad34SMatt Arsenault; 19995883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v4f16_nnan: 20005883ad34SMatt Arsenault; GFX11: ; %bb.0: 20015883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 20025883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v0, v0, v2 20035883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v1, v1, v3 20045883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 20055883ad34SMatt Arsenault; 20065883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v4f16_nnan: 20075883ad34SMatt Arsenault; GFX12: ; %bb.0: 20085883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 20095883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 20105883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 20115883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 20125883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 20135883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v0, v0, v2 20145883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v1, v1, v3 20155883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 20165883ad34SMatt Arsenault %result = call nnan <4 x half> @llvm.minimumnum.v4f16(<4 x half> %x, <4 x half> %y) 20175883ad34SMatt Arsenault ret <4 x half> %result 20185883ad34SMatt Arsenault} 20195883ad34SMatt Arsenault 20205883ad34SMatt Arsenaultdefine <6 x half> @v_minimumnum_v6f16(<6 x half> %x, <6 x half> %y) { 20215883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v6f16: 20225883ad34SMatt Arsenault; GFX8: ; %bb.0: 20235883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2024*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v6, v5, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 2025*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v7, v2, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 20265883ad34SMatt Arsenault; GFX8-NEXT: v_min_f16_sdwa v6, v7, v6 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 2027*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v7, v4, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 2028*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v8, v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 2029*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_sdwa v7, v8, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 2030*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v8, v3, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 2031*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v9, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 2032*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_e32 v5, v5, v5 2033*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_e32 v2, v2, v2 20345883ad34SMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v4, v4, v4 20355883ad34SMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v1, v1, v1 2036*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_e32 v3, v3, v3 2037*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_e32 v0, v0, v0 2038*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_sdwa v8, v9, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 2039*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_e32 v2, v2, v5 20405883ad34SMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v1, v1, v4 2041*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_e32 v0, v0, v3 2042*15473820SPhoebe Wang; GFX8-NEXT: v_or_b32_e32 v0, v0, v8 2043*15473820SPhoebe Wang; GFX8-NEXT: v_or_b32_e32 v1, v1, v7 2044*15473820SPhoebe Wang; GFX8-NEXT: v_or_b32_e32 v2, v2, v6 20455883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 20465883ad34SMatt Arsenault; 20475883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v6f16: 20485883ad34SMatt Arsenault; GFX9: ; %bb.0: 20495883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 20505883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v3, v3, v3 20515883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v0, v0, v0 20525883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v0, v0, v3 20535883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v3, v4, v4 20545883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v1, v1, v1 20555883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v1, v1, v3 20565883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v3, v5, v5 20575883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v2, v2, v2 20585883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v2, v2, v3 20595883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 20605883ad34SMatt Arsenault; 20615883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v6f16: 20625883ad34SMatt Arsenault; GFX10: ; %bb.0: 20635883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 20645883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v3, v3, v3 20655883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v0, v0, v0 20665883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v4, v4, v4 20675883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v1, v1, v1 20685883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v5, v5, v5 20695883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v2, v2, v2 20705883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v0, v0, v3 20715883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v1, v1, v4 20725883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v2, v2, v5 20735883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 20745883ad34SMatt Arsenault; 20755883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v6f16: 20765883ad34SMatt Arsenault; GFX11: ; %bb.0: 20775883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 20785883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v3, v3, v3 20795883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v0, v0, v0 20805883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v4, v4, v4 20815883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v1, v1, v1 20825883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v5, v5, v5 20835883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v2, v2, v2 20845883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v0, v0, v3 20855883ad34SMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3) 20865883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v1, v1, v4 20875883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v2, v2, v5 20885883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 20895883ad34SMatt Arsenault; 20905883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v6f16: 20915883ad34SMatt Arsenault; GFX12: ; %bb.0: 20925883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 20935883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 20945883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 20955883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 20965883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 20975883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v3, v3, v3 20985883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v0, v0, v0 20995883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v4, v4, v4 21005883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v1, v1, v1 21015883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v5, v5, v5 21025883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v2, v2, v2 21035883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v0, v0, v3 21045883ad34SMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3) 21055883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v1, v1, v4 21065883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v2, v2, v5 21075883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 21085883ad34SMatt Arsenault %result = call <6 x half> @llvm.minimumnum.v6f16(<6 x half> %x, <6 x half> %y) 21095883ad34SMatt Arsenault ret <6 x half> %result 21105883ad34SMatt Arsenault} 21115883ad34SMatt Arsenault 21125883ad34SMatt Arsenaultdefine <8 x half> @v_minimumnum_v8f16(<8 x half> %x, <8 x half> %y) { 21135883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v8f16: 21145883ad34SMatt Arsenault; GFX8: ; %bb.0: 21155883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2116*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v8, v7, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 2117*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v9, v3, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 21185883ad34SMatt Arsenault; GFX8-NEXT: v_min_f16_sdwa v8, v9, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 2119*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v9, v6, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 2120*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v10, v2, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 2121*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_sdwa v9, v10, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 2122*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v10, v5, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 2123*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v11, v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 2124*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_sdwa v10, v11, v10 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 2125*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v11, v4, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 2126*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_sdwa v12, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1 2127*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_e32 v7, v7, v7 2128*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_e32 v3, v3, v3 2129*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_e32 v6, v6, v6 2130*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_e32 v2, v2, v2 21315883ad34SMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v5, v5, v5 21325883ad34SMatt Arsenault; GFX8-NEXT: v_max_f16_e32 v1, v1, v1 2133*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_e32 v4, v4, v4 2134*15473820SPhoebe Wang; GFX8-NEXT: v_max_f16_e32 v0, v0, v0 2135*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_sdwa v11, v12, v11 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 2136*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_e32 v3, v3, v7 2137*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_e32 v2, v2, v6 21385883ad34SMatt Arsenault; GFX8-NEXT: v_min_f16_e32 v1, v1, v5 2139*15473820SPhoebe Wang; GFX8-NEXT: v_min_f16_e32 v0, v0, v4 2140*15473820SPhoebe Wang; GFX8-NEXT: v_or_b32_e32 v0, v0, v11 2141*15473820SPhoebe Wang; GFX8-NEXT: v_or_b32_e32 v1, v1, v10 2142*15473820SPhoebe Wang; GFX8-NEXT: v_or_b32_e32 v2, v2, v9 2143*15473820SPhoebe Wang; GFX8-NEXT: v_or_b32_e32 v3, v3, v8 21445883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 21455883ad34SMatt Arsenault; 21465883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v8f16: 21475883ad34SMatt Arsenault; GFX9: ; %bb.0: 21485883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 21495883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v4, v4, v4 21505883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v0, v0, v0 21515883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v0, v0, v4 21525883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v4, v5, v5 21535883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v1, v1, v1 21545883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v1, v1, v4 21555883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v4, v6, v6 21565883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v2, v2, v2 21575883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v2, v2, v4 21585883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v4, v7, v7 21595883ad34SMatt Arsenault; GFX9-NEXT: v_pk_max_f16 v3, v3, v3 21605883ad34SMatt Arsenault; GFX9-NEXT: v_pk_min_f16 v3, v3, v4 21615883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 21625883ad34SMatt Arsenault; 21635883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v8f16: 21645883ad34SMatt Arsenault; GFX10: ; %bb.0: 21655883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 21665883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v4, v4, v4 21675883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v0, v0, v0 21685883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v5, v5, v5 21695883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v1, v1, v1 21705883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v6, v6, v6 21715883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v2, v2, v2 21725883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v7, v7, v7 21735883ad34SMatt Arsenault; GFX10-NEXT: v_pk_max_f16 v3, v3, v3 21745883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v0, v0, v4 21755883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v1, v1, v5 21765883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v2, v2, v6 21775883ad34SMatt Arsenault; GFX10-NEXT: v_pk_min_f16 v3, v3, v7 21785883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 21795883ad34SMatt Arsenault; 21805883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v8f16: 21815883ad34SMatt Arsenault; GFX11: ; %bb.0: 21825883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 21835883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v4, v4, v4 21845883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v0, v0, v0 21855883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v5, v5, v5 21865883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v1, v1, v1 21875883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v6, v6, v6 21885883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v2, v2, v2 21895883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v7, v7, v7 21905883ad34SMatt Arsenault; GFX11-NEXT: v_pk_max_f16 v3, v3, v3 21915883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v0, v0, v4 21925883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v1, v1, v5 21935883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v2, v2, v6 21945883ad34SMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_4) 21955883ad34SMatt Arsenault; GFX11-NEXT: v_pk_min_f16 v3, v3, v7 21965883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 21975883ad34SMatt Arsenault; 21985883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v8f16: 21995883ad34SMatt Arsenault; GFX12: ; %bb.0: 22005883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 22015883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 22025883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 22035883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 22045883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 22055883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v4, v4, v4 22065883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v0, v0, v0 22075883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v5, v5, v5 22085883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v1, v1, v1 22095883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v6, v6, v6 22105883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v2, v2, v2 22115883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v7, v7, v7 22125883ad34SMatt Arsenault; GFX12-NEXT: v_pk_max_num_f16 v3, v3, v3 22135883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v0, v0, v4 22145883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v1, v1, v5 22155883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v2, v2, v6 22165883ad34SMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_4) 22175883ad34SMatt Arsenault; GFX12-NEXT: v_pk_min_num_f16 v3, v3, v7 22185883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 22195883ad34SMatt Arsenault %result = call <8 x half> @llvm.minimumnum.v8f16(<8 x half> %x, <8 x half> %y) 22205883ad34SMatt Arsenault ret <8 x half> %result 22215883ad34SMatt Arsenault} 22225883ad34SMatt Arsenault 22235883ad34SMatt Arsenaultdefine <2 x float> @v_minimumnum_v2f32(<2 x float> %x, <2 x float> %y) { 22245883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v2f32: 22255883ad34SMatt Arsenault; GFX8: ; %bb.0: 22265883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 22275883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v2 22285883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0 22295883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v2 22305883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v3 22315883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1 22325883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v1, v1, v2 22335883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 22345883ad34SMatt Arsenault; 22355883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v2f32: 22365883ad34SMatt Arsenault; GFX9: ; %bb.0: 22375883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 22385883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v2, v2, v2 22395883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v0, v0, v0 22405883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v2 22415883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v2, v3, v3 22425883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v1, v1, v1 22435883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v1, v1, v2 22445883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 22455883ad34SMatt Arsenault; 22465883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v2f32: 22475883ad34SMatt Arsenault; GFX10: ; %bb.0: 22485883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 22495883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v2, v2, v2 22505883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v0, v0, v0 22515883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v3, v3, v3 22525883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v1, v1, v1 22535883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v2 22545883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v1, v1, v3 22555883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 22565883ad34SMatt Arsenault; 22575883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v2f32: 22585883ad34SMatt Arsenault; GFX11: ; %bb.0: 22595883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 22605883ad34SMatt Arsenault; GFX11-NEXT: v_dual_max_f32 v2, v2, v2 :: v_dual_max_f32 v3, v3, v3 22615883ad34SMatt Arsenault; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1 22625883ad34SMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 22635883ad34SMatt Arsenault; GFX11-NEXT: v_dual_min_f32 v0, v0, v2 :: v_dual_min_f32 v1, v1, v3 22645883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 22655883ad34SMatt Arsenault; 22665883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v2f32: 22675883ad34SMatt Arsenault; GFX12: ; %bb.0: 22685883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 22695883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 22705883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 22715883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 22725883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 22735883ad34SMatt Arsenault; GFX12-NEXT: v_dual_max_num_f32 v2, v2, v2 :: v_dual_max_num_f32 v3, v3, v3 22745883ad34SMatt Arsenault; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1 22755883ad34SMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) 22765883ad34SMatt Arsenault; GFX12-NEXT: v_dual_min_num_f32 v0, v0, v2 :: v_dual_min_num_f32 v1, v1, v3 22775883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 22785883ad34SMatt Arsenault %result = call <2 x float> @llvm.minimumnum.v2f32(<2 x float> %x, <2 x float> %y) 22795883ad34SMatt Arsenault ret <2 x float> %result 22805883ad34SMatt Arsenault} 22815883ad34SMatt Arsenault 22825883ad34SMatt Arsenaultdefine <2 x float> @v_minimumnum_v2f32_nnan(<2 x float> %x, <2 x float> %y) { 22835883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v2f32_nnan: 22845883ad34SMatt Arsenault; GFX8: ; %bb.0: 22855883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 22865883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v2 22875883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v1, v1, v3 22885883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 22895883ad34SMatt Arsenault; 22905883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v2f32_nnan: 22915883ad34SMatt Arsenault; GFX9: ; %bb.0: 22925883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 22935883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v2 22945883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v1, v1, v3 22955883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 22965883ad34SMatt Arsenault; 22975883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v2f32_nnan: 22985883ad34SMatt Arsenault; GFX10: ; %bb.0: 22995883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 23005883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v2 23015883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v1, v1, v3 23025883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 23035883ad34SMatt Arsenault; 23045883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v2f32_nnan: 23055883ad34SMatt Arsenault; GFX11: ; %bb.0: 23065883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 23075883ad34SMatt Arsenault; GFX11-NEXT: v_dual_min_f32 v0, v0, v2 :: v_dual_min_f32 v1, v1, v3 23085883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 23095883ad34SMatt Arsenault; 23105883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v2f32_nnan: 23115883ad34SMatt Arsenault; GFX12: ; %bb.0: 23125883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 23135883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 23145883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 23155883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 23165883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 23175883ad34SMatt Arsenault; GFX12-NEXT: v_dual_min_num_f32 v0, v0, v2 :: v_dual_min_num_f32 v1, v1, v3 23185883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 23195883ad34SMatt Arsenault %result = call nnan <2 x float> @llvm.minimumnum.v2f32(<2 x float> %x, <2 x float> %y) 23205883ad34SMatt Arsenault ret <2 x float> %result 23215883ad34SMatt Arsenault} 23225883ad34SMatt Arsenault 23235883ad34SMatt Arsenaultdefine <3 x float> @v_minimumnum_v3f32(<3 x float> %x, <3 x float> %y) { 23245883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v3f32: 23255883ad34SMatt Arsenault; GFX8: ; %bb.0: 23265883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 23275883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v3, 1.0, v3 23285883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0 23295883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v3 23305883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v3, 1.0, v4 23315883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1 23325883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v1, v1, v3 23335883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v3, 1.0, v5 23345883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v2 23355883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v2, v2, v3 23365883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 23375883ad34SMatt Arsenault; 23385883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v3f32: 23395883ad34SMatt Arsenault; GFX9: ; %bb.0: 23405883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 23415883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v3, v3, v3 23425883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v0, v0, v0 23435883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v3 23445883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v3, v4, v4 23455883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v1, v1, v1 23465883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v1, v1, v3 23475883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v3, v5, v5 23485883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v2, v2, v2 23495883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v2, v2, v3 23505883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 23515883ad34SMatt Arsenault; 23525883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v3f32: 23535883ad34SMatt Arsenault; GFX10: ; %bb.0: 23545883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 23555883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v3, v3, v3 23565883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v0, v0, v0 23575883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v4, v4, v4 23585883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v1, v1, v1 23595883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v5, v5, v5 23605883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v2, v2, v2 23615883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v3 23625883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v1, v1, v4 23635883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v2, v2, v5 23645883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 23655883ad34SMatt Arsenault; 23665883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v3f32: 23675883ad34SMatt Arsenault; GFX11: ; %bb.0: 23685883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 23695883ad34SMatt Arsenault; GFX11-NEXT: v_dual_max_f32 v3, v3, v3 :: v_dual_max_f32 v0, v0, v0 23705883ad34SMatt Arsenault; GFX11-NEXT: v_dual_max_f32 v4, v4, v4 :: v_dual_max_f32 v1, v1, v1 23715883ad34SMatt Arsenault; GFX11-NEXT: v_dual_max_f32 v5, v5, v5 :: v_dual_max_f32 v2, v2, v2 23725883ad34SMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 23735883ad34SMatt Arsenault; GFX11-NEXT: v_dual_min_f32 v0, v0, v3 :: v_dual_min_f32 v1, v1, v4 23745883ad34SMatt Arsenault; GFX11-NEXT: v_min_f32_e32 v2, v2, v5 23755883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 23765883ad34SMatt Arsenault; 23775883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v3f32: 23785883ad34SMatt Arsenault; GFX12: ; %bb.0: 23795883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 23805883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 23815883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 23825883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 23835883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 23845883ad34SMatt Arsenault; GFX12-NEXT: v_dual_max_num_f32 v3, v3, v3 :: v_dual_max_num_f32 v0, v0, v0 23855883ad34SMatt Arsenault; GFX12-NEXT: v_dual_max_num_f32 v4, v4, v4 :: v_dual_max_num_f32 v1, v1, v1 23865883ad34SMatt Arsenault; GFX12-NEXT: v_dual_max_num_f32 v5, v5, v5 :: v_dual_max_num_f32 v2, v2, v2 23875883ad34SMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 23885883ad34SMatt Arsenault; GFX12-NEXT: v_dual_min_num_f32 v0, v0, v3 :: v_dual_min_num_f32 v1, v1, v4 23895883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f32_e32 v2, v2, v5 23905883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 23915883ad34SMatt Arsenault %result = call <3 x float> @llvm.minimumnum.v3f32(<3 x float> %x, <3 x float> %y) 23925883ad34SMatt Arsenault ret <3 x float> %result 23935883ad34SMatt Arsenault} 23945883ad34SMatt Arsenault 23955883ad34SMatt Arsenaultdefine <3 x float> @v_minimumnum_v3f32_nnan(<3 x float> %x, <3 x float> %y) { 23965883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v3f32_nnan: 23975883ad34SMatt Arsenault; GFX8: ; %bb.0: 23985883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 23995883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v3 24005883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v1, v1, v4 24015883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v2, v2, v5 24025883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 24035883ad34SMatt Arsenault; 24045883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v3f32_nnan: 24055883ad34SMatt Arsenault; GFX9: ; %bb.0: 24065883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 24075883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v3 24085883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v1, v1, v4 24095883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v2, v2, v5 24105883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 24115883ad34SMatt Arsenault; 24125883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v3f32_nnan: 24135883ad34SMatt Arsenault; GFX10: ; %bb.0: 24145883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 24155883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v3 24165883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v1, v1, v4 24175883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v2, v2, v5 24185883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 24195883ad34SMatt Arsenault; 24205883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v3f32_nnan: 24215883ad34SMatt Arsenault; GFX11: ; %bb.0: 24225883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 24235883ad34SMatt Arsenault; GFX11-NEXT: v_dual_min_f32 v0, v0, v3 :: v_dual_min_f32 v1, v1, v4 24245883ad34SMatt Arsenault; GFX11-NEXT: v_min_f32_e32 v2, v2, v5 24255883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 24265883ad34SMatt Arsenault; 24275883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v3f32_nnan: 24285883ad34SMatt Arsenault; GFX12: ; %bb.0: 24295883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 24305883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 24315883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 24325883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 24335883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 24345883ad34SMatt Arsenault; GFX12-NEXT: v_dual_min_num_f32 v0, v0, v3 :: v_dual_min_num_f32 v1, v1, v4 24355883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f32_e32 v2, v2, v5 24365883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 24375883ad34SMatt Arsenault %result = call nnan <3 x float> @llvm.minimumnum.v3f32(<3 x float> %x, <3 x float> %y) 24385883ad34SMatt Arsenault ret <3 x float> %result 24395883ad34SMatt Arsenault} 24405883ad34SMatt Arsenault 24415883ad34SMatt Arsenaultdefine <4 x float> @v_minimumnum_v4f32(<4 x float> %x, <4 x float> %y) { 24425883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v4f32: 24435883ad34SMatt Arsenault; GFX8: ; %bb.0: 24445883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 24455883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v4, 1.0, v4 24465883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0 24475883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v4 24485883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v4, 1.0, v5 24495883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1 24505883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v1, v1, v4 24515883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v4, 1.0, v6 24525883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v2 24535883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v2, v2, v4 24545883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v4, 1.0, v7 24555883ad34SMatt Arsenault; GFX8-NEXT: v_mul_f32_e32 v3, 1.0, v3 24565883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v3, v3, v4 24575883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 24585883ad34SMatt Arsenault; 24595883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v4f32: 24605883ad34SMatt Arsenault; GFX9: ; %bb.0: 24615883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 24625883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v4, v4, v4 24635883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v0, v0, v0 24645883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v4 24655883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v4, v5, v5 24665883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v1, v1, v1 24675883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v1, v1, v4 24685883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v4, v6, v6 24695883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v2, v2, v2 24705883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v2, v2, v4 24715883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v4, v7, v7 24725883ad34SMatt Arsenault; GFX9-NEXT: v_max_f32_e32 v3, v3, v3 24735883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v3, v3, v4 24745883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 24755883ad34SMatt Arsenault; 24765883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v4f32: 24775883ad34SMatt Arsenault; GFX10: ; %bb.0: 24785883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 24795883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v4, v4, v4 24805883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v0, v0, v0 24815883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v5, v5, v5 24825883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v1, v1, v1 24835883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v6, v6, v6 24845883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v2, v2, v2 24855883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v7, v7, v7 24865883ad34SMatt Arsenault; GFX10-NEXT: v_max_f32_e32 v3, v3, v3 24875883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v4 24885883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v1, v1, v5 24895883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v2, v2, v6 24905883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v3, v3, v7 24915883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 24925883ad34SMatt Arsenault; 24935883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v4f32: 24945883ad34SMatt Arsenault; GFX11: ; %bb.0: 24955883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 24965883ad34SMatt Arsenault; GFX11-NEXT: v_dual_max_f32 v4, v4, v4 :: v_dual_max_f32 v5, v5, v5 24975883ad34SMatt Arsenault; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1 24985883ad34SMatt Arsenault; GFX11-NEXT: v_dual_max_f32 v6, v6, v6 :: v_dual_max_f32 v7, v7, v7 24995883ad34SMatt Arsenault; GFX11-NEXT: v_dual_max_f32 v2, v2, v2 :: v_dual_max_f32 v3, v3, v3 25005883ad34SMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 25015883ad34SMatt Arsenault; GFX11-NEXT: v_dual_min_f32 v0, v0, v4 :: v_dual_min_f32 v1, v1, v5 25025883ad34SMatt Arsenault; GFX11-NEXT: v_dual_min_f32 v2, v2, v6 :: v_dual_min_f32 v3, v3, v7 25035883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 25045883ad34SMatt Arsenault; 25055883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v4f32: 25065883ad34SMatt Arsenault; GFX12: ; %bb.0: 25075883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 25085883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 25095883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 25105883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 25115883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 25125883ad34SMatt Arsenault; GFX12-NEXT: v_dual_max_num_f32 v4, v4, v4 :: v_dual_max_num_f32 v5, v5, v5 25135883ad34SMatt Arsenault; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1 25145883ad34SMatt Arsenault; GFX12-NEXT: v_dual_max_num_f32 v6, v6, v6 :: v_dual_max_num_f32 v7, v7, v7 25155883ad34SMatt Arsenault; GFX12-NEXT: v_dual_max_num_f32 v2, v2, v2 :: v_dual_max_num_f32 v3, v3, v3 25165883ad34SMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 25175883ad34SMatt Arsenault; GFX12-NEXT: v_dual_min_num_f32 v0, v0, v4 :: v_dual_min_num_f32 v1, v1, v5 25185883ad34SMatt Arsenault; GFX12-NEXT: v_dual_min_num_f32 v2, v2, v6 :: v_dual_min_num_f32 v3, v3, v7 25195883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 25205883ad34SMatt Arsenault %result = call <4 x float> @llvm.minimumnum.v4f32(<4 x float> %x, <4 x float> %y) 25215883ad34SMatt Arsenault ret <4 x float> %result 25225883ad34SMatt Arsenault} 25235883ad34SMatt Arsenault 25245883ad34SMatt Arsenaultdefine <4 x float> @v_minimumnum_v4f32_nnan(<4 x float> %x, <4 x float> %y) { 25255883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v4f32_nnan: 25265883ad34SMatt Arsenault; GFX8: ; %bb.0: 25275883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 25285883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v0, v0, v4 25295883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v1, v1, v5 25305883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v2, v2, v6 25315883ad34SMatt Arsenault; GFX8-NEXT: v_min_f32_e32 v3, v3, v7 25325883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 25335883ad34SMatt Arsenault; 25345883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v4f32_nnan: 25355883ad34SMatt Arsenault; GFX9: ; %bb.0: 25365883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 25375883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v0, v0, v4 25385883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v1, v1, v5 25395883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v2, v2, v6 25405883ad34SMatt Arsenault; GFX9-NEXT: v_min_f32_e32 v3, v3, v7 25415883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 25425883ad34SMatt Arsenault; 25435883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v4f32_nnan: 25445883ad34SMatt Arsenault; GFX10: ; %bb.0: 25455883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 25465883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v0, v0, v4 25475883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v1, v1, v5 25485883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v2, v2, v6 25495883ad34SMatt Arsenault; GFX10-NEXT: v_min_f32_e32 v3, v3, v7 25505883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 25515883ad34SMatt Arsenault; 25525883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v4f32_nnan: 25535883ad34SMatt Arsenault; GFX11: ; %bb.0: 25545883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 25555883ad34SMatt Arsenault; GFX11-NEXT: v_dual_min_f32 v0, v0, v4 :: v_dual_min_f32 v1, v1, v5 25565883ad34SMatt Arsenault; GFX11-NEXT: v_dual_min_f32 v2, v2, v6 :: v_dual_min_f32 v3, v3, v7 25575883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 25585883ad34SMatt Arsenault; 25595883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v4f32_nnan: 25605883ad34SMatt Arsenault; GFX12: ; %bb.0: 25615883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 25625883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 25635883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 25645883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 25655883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 25665883ad34SMatt Arsenault; GFX12-NEXT: v_dual_min_num_f32 v0, v0, v4 :: v_dual_min_num_f32 v1, v1, v5 25675883ad34SMatt Arsenault; GFX12-NEXT: v_dual_min_num_f32 v2, v2, v6 :: v_dual_min_num_f32 v3, v3, v7 25685883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 25695883ad34SMatt Arsenault %result = call nnan <4 x float> @llvm.minimumnum.v4f32(<4 x float> %x, <4 x float> %y) 25705883ad34SMatt Arsenault ret <4 x float> %result 25715883ad34SMatt Arsenault} 25725883ad34SMatt Arsenault 25735883ad34SMatt Arsenaultdefine <2 x double> @v_minimumnum_v2f64(<2 x double> %x, <2 x double> %y) { 25745883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v2f64: 25755883ad34SMatt Arsenault; GFX8: ; %bb.0: 25765883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 25775883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5] 25785883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 25795883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7] 25805883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 25815883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5] 25825883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7] 25835883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 25845883ad34SMatt Arsenault; 25855883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v2f64: 25865883ad34SMatt Arsenault; GFX9: ; %bb.0: 25875883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 25885883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5] 25895883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 25905883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7] 25915883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 25925883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5] 25935883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7] 25945883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 25955883ad34SMatt Arsenault; 25965883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v2f64: 25975883ad34SMatt Arsenault; GFX10: ; %bb.0: 25985883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 25995883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5] 26005883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 26015883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7] 26025883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 26035883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5] 26045883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7] 26055883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 26065883ad34SMatt Arsenault; 26075883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v2f64: 26085883ad34SMatt Arsenault; GFX11: ; %bb.0: 26095883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 26105883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5] 26115883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 26125883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7] 26135883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 26145883ad34SMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 26155883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5] 26165883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7] 26175883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 26185883ad34SMatt Arsenault; 26195883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v2f64: 26205883ad34SMatt Arsenault; GFX12: ; %bb.0: 26215883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 26225883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 26235883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 26245883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 26255883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 26265883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[4:5], v[4:5], v[4:5] 26275883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[0:1], v[0:1], v[0:1] 26285883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[6:7], v[6:7], v[6:7] 26295883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[2:3], v[2:3], v[2:3] 26305883ad34SMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2) 26315883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[0:1], v[0:1], v[4:5] 26325883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[2:3], v[2:3], v[6:7] 26335883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 26345883ad34SMatt Arsenault %result = call <2 x double> @llvm.minimumnum.v2f64(<2 x double> %x, <2 x double> %y) 26355883ad34SMatt Arsenault ret <2 x double> %result 26365883ad34SMatt Arsenault} 26375883ad34SMatt Arsenault 26385883ad34SMatt Arsenaultdefine <2 x double> @v_minimumnum_v2f64_nnan(<2 x double> %x, <2 x double> %y) { 26395883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v2f64_nnan: 26405883ad34SMatt Arsenault; GFX8: ; %bb.0: 26415883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 26425883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5] 26435883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7] 26445883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 26455883ad34SMatt Arsenault; 26465883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v2f64_nnan: 26475883ad34SMatt Arsenault; GFX9: ; %bb.0: 26485883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 26495883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5] 26505883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7] 26515883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 26525883ad34SMatt Arsenault; 26535883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v2f64_nnan: 26545883ad34SMatt Arsenault; GFX10: ; %bb.0: 26555883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 26565883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5] 26575883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7] 26585883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 26595883ad34SMatt Arsenault; 26605883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v2f64_nnan: 26615883ad34SMatt Arsenault; GFX11: ; %bb.0: 26625883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 26635883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[0:1], v[0:1], v[4:5] 26645883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[2:3], v[2:3], v[6:7] 26655883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 26665883ad34SMatt Arsenault; 26675883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v2f64_nnan: 26685883ad34SMatt Arsenault; GFX12: ; %bb.0: 26695883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 26705883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 26715883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 26725883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 26735883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 26745883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[0:1], v[0:1], v[4:5] 26755883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[2:3], v[2:3], v[6:7] 26765883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 26775883ad34SMatt Arsenault %result = call nnan <2 x double> @llvm.minimumnum.v2f64(<2 x double> %x, <2 x double> %y) 26785883ad34SMatt Arsenault ret <2 x double> %result 26795883ad34SMatt Arsenault} 26805883ad34SMatt Arsenault 26815883ad34SMatt Arsenaultdefine <3 x double> @v_minimumnum_v3f64(<3 x double> %x, <3 x double> %y) { 26825883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v3f64: 26835883ad34SMatt Arsenault; GFX8: ; %bb.0: 26845883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 26855883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7] 26865883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 26875883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[8:9], v[8:9], v[8:9] 26885883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 26895883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[10:11], v[10:11], v[10:11] 26905883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5] 26915883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7] 26925883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9] 26935883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11] 26945883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 26955883ad34SMatt Arsenault; 26965883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v3f64: 26975883ad34SMatt Arsenault; GFX9: ; %bb.0: 26985883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 26995883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7] 27005883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 27015883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[8:9], v[8:9], v[8:9] 27025883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 27035883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[10:11], v[10:11], v[10:11] 27045883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5] 27055883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7] 27065883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9] 27075883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11] 27085883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 27095883ad34SMatt Arsenault; 27105883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v3f64: 27115883ad34SMatt Arsenault; GFX10: ; %bb.0: 27125883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 27135883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7] 27145883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 27155883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[8:9], v[8:9], v[8:9] 27165883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 27175883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[10:11], v[10:11], v[10:11] 27185883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5] 27195883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7] 27205883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9] 27215883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11] 27225883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 27235883ad34SMatt Arsenault; 27245883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v3f64: 27255883ad34SMatt Arsenault; GFX11: ; %bb.0: 27265883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 27275883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7] 27285883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 27295883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[8:9], v[8:9], v[8:9] 27305883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 27315883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[10:11], v[10:11], v[10:11] 27325883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5] 27335883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7] 27345883ad34SMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3) 27355883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9] 27365883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11] 27375883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 27385883ad34SMatt Arsenault; 27395883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v3f64: 27405883ad34SMatt Arsenault; GFX12: ; %bb.0: 27415883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 27425883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 27435883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 27445883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 27455883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 27465883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[6:7], v[6:7], v[6:7] 27475883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[0:1], v[0:1], v[0:1] 27485883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[8:9], v[8:9], v[8:9] 27495883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[2:3], v[2:3], v[2:3] 27505883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[10:11], v[10:11], v[10:11] 27515883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[4:5], v[4:5], v[4:5] 27525883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[0:1], v[0:1], v[6:7] 27535883ad34SMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3) 27545883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[2:3], v[2:3], v[8:9] 27555883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[4:5], v[4:5], v[10:11] 27565883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 27575883ad34SMatt Arsenault %result = call <3 x double> @llvm.minimumnum.v3f64(<3 x double> %x, <3 x double> %y) 27585883ad34SMatt Arsenault ret <3 x double> %result 27595883ad34SMatt Arsenault} 27605883ad34SMatt Arsenault 27615883ad34SMatt Arsenaultdefine <3 x double> @v_minimumnum_v3f64_nnan(<3 x double> %x, <3 x double> %y) { 27625883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v3f64_nnan: 27635883ad34SMatt Arsenault; GFX8: ; %bb.0: 27645883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 27655883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7] 27665883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9] 27675883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11] 27685883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 27695883ad34SMatt Arsenault; 27705883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v3f64_nnan: 27715883ad34SMatt Arsenault; GFX9: ; %bb.0: 27725883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 27735883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7] 27745883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9] 27755883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11] 27765883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 27775883ad34SMatt Arsenault; 27785883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v3f64_nnan: 27795883ad34SMatt Arsenault; GFX10: ; %bb.0: 27805883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 27815883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7] 27825883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9] 27835883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11] 27845883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 27855883ad34SMatt Arsenault; 27865883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v3f64_nnan: 27875883ad34SMatt Arsenault; GFX11: ; %bb.0: 27885883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 27895883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[0:1], v[0:1], v[6:7] 27905883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[2:3], v[2:3], v[8:9] 27915883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[4:5], v[4:5], v[10:11] 27925883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 27935883ad34SMatt Arsenault; 27945883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v3f64_nnan: 27955883ad34SMatt Arsenault; GFX12: ; %bb.0: 27965883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 27975883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 27985883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 27995883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 28005883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 28015883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[0:1], v[0:1], v[6:7] 28025883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[2:3], v[2:3], v[8:9] 28035883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[4:5], v[4:5], v[10:11] 28045883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 28055883ad34SMatt Arsenault %result = call nnan <3 x double> @llvm.minimumnum.v3f64(<3 x double> %x, <3 x double> %y) 28065883ad34SMatt Arsenault ret <3 x double> %result 28075883ad34SMatt Arsenault} 28085883ad34SMatt Arsenault 28095883ad34SMatt Arsenaultdefine <4 x double> @v_minimumnum_v4f64(<4 x double> %x, <4 x double> %y) { 28105883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v4f64: 28115883ad34SMatt Arsenault; GFX8: ; %bb.0: 28125883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 28135883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[8:9], v[8:9], v[8:9] 28145883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 28155883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[10:11], v[10:11], v[10:11] 28165883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 28175883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[12:13], v[12:13], v[12:13] 28185883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5] 28195883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[14:15], v[14:15], v[14:15] 28205883ad34SMatt Arsenault; GFX8-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7] 28215883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9] 28225883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11] 28235883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13] 28245883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15] 28255883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 28265883ad34SMatt Arsenault; 28275883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v4f64: 28285883ad34SMatt Arsenault; GFX9: ; %bb.0: 28295883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 28305883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[8:9], v[8:9], v[8:9] 28315883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 28325883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[10:11], v[10:11], v[10:11] 28335883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 28345883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[12:13], v[12:13], v[12:13] 28355883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5] 28365883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[14:15], v[14:15], v[14:15] 28375883ad34SMatt Arsenault; GFX9-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7] 28385883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9] 28395883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11] 28405883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13] 28415883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15] 28425883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 28435883ad34SMatt Arsenault; 28445883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v4f64: 28455883ad34SMatt Arsenault; GFX10: ; %bb.0: 28465883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 28475883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[8:9], v[8:9], v[8:9] 28485883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 28495883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[10:11], v[10:11], v[10:11] 28505883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 28515883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[12:13], v[12:13], v[12:13] 28525883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5] 28535883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[14:15], v[14:15], v[14:15] 28545883ad34SMatt Arsenault; GFX10-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7] 28555883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9] 28565883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11] 28575883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13] 28585883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15] 28595883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 28605883ad34SMatt Arsenault; 28615883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v4f64: 28625883ad34SMatt Arsenault; GFX11: ; %bb.0: 28635883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 28645883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[8:9], v[8:9], v[8:9] 28655883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[0:1], v[0:1], v[0:1] 28665883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[10:11], v[10:11], v[10:11] 28675883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[2:3], v[2:3], v[2:3] 28685883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[12:13], v[12:13], v[12:13] 28695883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[4:5], v[4:5], v[4:5] 28705883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[14:15], v[14:15], v[14:15] 28715883ad34SMatt Arsenault; GFX11-NEXT: v_max_f64 v[6:7], v[6:7], v[6:7] 28725883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9] 28735883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11] 28745883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13] 28755883ad34SMatt Arsenault; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_4) 28765883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15] 28775883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 28785883ad34SMatt Arsenault; 28795883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v4f64: 28805883ad34SMatt Arsenault; GFX12: ; %bb.0: 28815883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 28825883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 28835883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 28845883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 28855883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 28865883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[8:9], v[8:9], v[8:9] 28875883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[0:1], v[0:1], v[0:1] 28885883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[10:11], v[10:11], v[10:11] 28895883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[2:3], v[2:3], v[2:3] 28905883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[12:13], v[12:13], v[12:13] 28915883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[4:5], v[4:5], v[4:5] 28925883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[14:15], v[14:15], v[14:15] 28935883ad34SMatt Arsenault; GFX12-NEXT: v_max_num_f64_e32 v[6:7], v[6:7], v[6:7] 28945883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[0:1], v[0:1], v[8:9] 28955883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[2:3], v[2:3], v[10:11] 28965883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[4:5], v[4:5], v[12:13] 28975883ad34SMatt Arsenault; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_4) 28985883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[6:7], v[6:7], v[14:15] 28995883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 29005883ad34SMatt Arsenault %result = call <4 x double> @llvm.minimumnum.v4f64(<4 x double> %x, <4 x double> %y) 29015883ad34SMatt Arsenault ret <4 x double> %result 29025883ad34SMatt Arsenault} 29035883ad34SMatt Arsenault 29045883ad34SMatt Arsenaultdefine <4 x double> @v_minimumnum_v4f64_nnan(<4 x double> %x, <4 x double> %y) { 29055883ad34SMatt Arsenault; GFX8-LABEL: v_minimumnum_v4f64_nnan: 29065883ad34SMatt Arsenault; GFX8: ; %bb.0: 29075883ad34SMatt Arsenault; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 29085883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9] 29095883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11] 29105883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13] 29115883ad34SMatt Arsenault; GFX8-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15] 29125883ad34SMatt Arsenault; GFX8-NEXT: s_setpc_b64 s[30:31] 29135883ad34SMatt Arsenault; 29145883ad34SMatt Arsenault; GFX9-LABEL: v_minimumnum_v4f64_nnan: 29155883ad34SMatt Arsenault; GFX9: ; %bb.0: 29165883ad34SMatt Arsenault; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 29175883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9] 29185883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11] 29195883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13] 29205883ad34SMatt Arsenault; GFX9-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15] 29215883ad34SMatt Arsenault; GFX9-NEXT: s_setpc_b64 s[30:31] 29225883ad34SMatt Arsenault; 29235883ad34SMatt Arsenault; GFX10-LABEL: v_minimumnum_v4f64_nnan: 29245883ad34SMatt Arsenault; GFX10: ; %bb.0: 29255883ad34SMatt Arsenault; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 29265883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9] 29275883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11] 29285883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13] 29295883ad34SMatt Arsenault; GFX10-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15] 29305883ad34SMatt Arsenault; GFX10-NEXT: s_setpc_b64 s[30:31] 29315883ad34SMatt Arsenault; 29325883ad34SMatt Arsenault; GFX11-LABEL: v_minimumnum_v4f64_nnan: 29335883ad34SMatt Arsenault; GFX11: ; %bb.0: 29345883ad34SMatt Arsenault; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 29355883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[0:1], v[0:1], v[8:9] 29365883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[2:3], v[2:3], v[10:11] 29375883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[4:5], v[4:5], v[12:13] 29385883ad34SMatt Arsenault; GFX11-NEXT: v_min_f64 v[6:7], v[6:7], v[14:15] 29395883ad34SMatt Arsenault; GFX11-NEXT: s_setpc_b64 s[30:31] 29405883ad34SMatt Arsenault; 29415883ad34SMatt Arsenault; GFX12-LABEL: v_minimumnum_v4f64_nnan: 29425883ad34SMatt Arsenault; GFX12: ; %bb.0: 29435883ad34SMatt Arsenault; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0 29445883ad34SMatt Arsenault; GFX12-NEXT: s_wait_expcnt 0x0 29455883ad34SMatt Arsenault; GFX12-NEXT: s_wait_samplecnt 0x0 29465883ad34SMatt Arsenault; GFX12-NEXT: s_wait_bvhcnt 0x0 29475883ad34SMatt Arsenault; GFX12-NEXT: s_wait_kmcnt 0x0 29485883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[0:1], v[0:1], v[8:9] 29495883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[2:3], v[2:3], v[10:11] 29505883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[4:5], v[4:5], v[12:13] 29515883ad34SMatt Arsenault; GFX12-NEXT: v_min_num_f64_e32 v[6:7], v[6:7], v[14:15] 29525883ad34SMatt Arsenault; GFX12-NEXT: s_setpc_b64 s[30:31] 29535883ad34SMatt Arsenault %result = call nnan <4 x double> @llvm.minimumnum.v4f64(<4 x double> %x, <4 x double> %y) 29545883ad34SMatt Arsenault ret <4 x double> %result 29555883ad34SMatt Arsenault} 2956