brintos

brintos / llvm-project-archived public Read only

0
0
Text · 44.3 KiB · 22f0957 Raw
1180 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-- -mcpu=tahiti < %s | FileCheck -enable-var-scope -check-prefixes=SI %s3; RUN: llc -mtriple=amdgcn-- -mcpu=fiji -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=VI %s4; RUN: llc -mtriple=amdgcn-- -mcpu=gfx900 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=GFX9 %s5; RUN: llc -mtriple=amdgcn-- -mcpu=gfx1010 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=GFX10PLUS,GFX10 %s6; RUN: llc -mtriple=amdgcn-- -mcpu=gfx1100 -mattr=+real-true16 -amdgpu-enable-delay-alu=0 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=GFX10PLUS,GFX11,GFX11-TRUE16 %s7; RUN: llc -mtriple=amdgcn-- -mcpu=gfx1100 -mattr=-real-true16 -amdgpu-enable-delay-alu=0 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=GFX10PLUS,GFX11,GFX11-FAKE16 %s8 9declare half @llvm.minnum.f16(half %a, half %b)10declare <2 x half> @llvm.minnum.v2f16(<2 x half> %a, <2 x half> %b)11declare <3 x half> @llvm.minnum.v3f16(<3 x half> %a, <3 x half> %b)12declare <4 x half> @llvm.minnum.v4f16(<4 x half> %a, <4 x half> %b)13 14define amdgpu_kernel void @minnum_f16_ieee(15; SI-LABEL: minnum_f16_ieee:16; SI:       ; %bb.0: ; %entry17; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x918; SI-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd19; SI-NEXT:    s_mov_b32 s7, 0xf00020; SI-NEXT:    s_mov_b32 s6, -121; SI-NEXT:    s_mov_b32 s14, s622; SI-NEXT:    s_waitcnt lgkmcnt(0)23; SI-NEXT:    s_mov_b32 s12, s224; SI-NEXT:    s_mov_b32 s13, s325; SI-NEXT:    s_mov_b32 s15, s726; SI-NEXT:    s_mov_b32 s10, s627; SI-NEXT:    s_mov_b32 s11, s728; SI-NEXT:    buffer_load_ushort v0, off, s[12:15], 0 glc29; SI-NEXT:    s_waitcnt vmcnt(0)30; SI-NEXT:    buffer_load_ushort v1, off, s[8:11], 0 glc31; SI-NEXT:    s_waitcnt vmcnt(0)32; SI-NEXT:    s_mov_b32 s4, s033; SI-NEXT:    s_mov_b32 s5, s134; SI-NEXT:    v_cvt_f32_f16_e32 v0, v035; SI-NEXT:    v_cvt_f32_f16_e32 v1, v136; SI-NEXT:    v_min_f32_e32 v0, v0, v137; SI-NEXT:    v_cvt_f16_f32_e32 v0, v038; SI-NEXT:    buffer_store_short v0, off, s[4:7], 039; SI-NEXT:    s_endpgm40;41; VI-LABEL: minnum_f16_ieee:42; VI:       ; %bb.0: ; %entry43; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2444; VI-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x3445; VI-NEXT:    s_mov_b32 s7, 0xf00046; VI-NEXT:    s_mov_b32 s6, -147; VI-NEXT:    s_mov_b32 s14, s648; VI-NEXT:    s_waitcnt lgkmcnt(0)49; VI-NEXT:    s_mov_b32 s12, s250; VI-NEXT:    s_mov_b32 s13, s351; VI-NEXT:    s_mov_b32 s15, s752; VI-NEXT:    s_mov_b32 s10, s653; VI-NEXT:    s_mov_b32 s11, s754; VI-NEXT:    buffer_load_ushort v0, off, s[12:15], 0 glc55; VI-NEXT:    s_waitcnt vmcnt(0)56; VI-NEXT:    buffer_load_ushort v1, off, s[8:11], 0 glc57; VI-NEXT:    s_waitcnt vmcnt(0)58; VI-NEXT:    s_mov_b32 s4, s059; VI-NEXT:    s_mov_b32 s5, s160; VI-NEXT:    v_max_f16_e32 v0, v0, v061; VI-NEXT:    v_max_f16_e32 v1, v1, v162; VI-NEXT:    v_min_f16_e32 v0, v0, v163; VI-NEXT:    buffer_store_short v0, off, s[4:7], 064; VI-NEXT:    s_endpgm65;66; GFX9-LABEL: minnum_f16_ieee:67; GFX9:       ; %bb.0: ; %entry68; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2469; GFX9-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x3470; GFX9-NEXT:    s_mov_b32 s7, 0xf00071; GFX9-NEXT:    s_mov_b32 s6, -172; GFX9-NEXT:    s_mov_b32 s14, s673; GFX9-NEXT:    s_waitcnt lgkmcnt(0)74; GFX9-NEXT:    s_mov_b32 s12, s275; GFX9-NEXT:    s_mov_b32 s13, s376; GFX9-NEXT:    s_mov_b32 s15, s777; GFX9-NEXT:    s_mov_b32 s10, s678; GFX9-NEXT:    s_mov_b32 s11, s779; GFX9-NEXT:    buffer_load_ushort v0, off, s[12:15], 0 glc80; GFX9-NEXT:    s_waitcnt vmcnt(0)81; GFX9-NEXT:    buffer_load_ushort v1, off, s[8:11], 0 glc82; GFX9-NEXT:    s_waitcnt vmcnt(0)83; GFX9-NEXT:    s_mov_b32 s4, s084; GFX9-NEXT:    s_mov_b32 s5, s185; GFX9-NEXT:    v_max_f16_e32 v0, v0, v086; GFX9-NEXT:    v_max_f16_e32 v1, v1, v187; GFX9-NEXT:    v_min_f16_e32 v0, v0, v188; GFX9-NEXT:    buffer_store_short v0, off, s[4:7], 089; GFX9-NEXT:    s_endpgm90;91; GFX10-LABEL: minnum_f16_ieee:92; GFX10:       ; %bb.0: ; %entry93; GFX10-NEXT:    s_clause 0x194; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2495; GFX10-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x3496; GFX10-NEXT:    s_mov_b32 s6, -197; GFX10-NEXT:    s_mov_b32 s7, 0x3101600098; GFX10-NEXT:    s_mov_b32 s14, s699; GFX10-NEXT:    s_mov_b32 s15, s7100; GFX10-NEXT:    s_mov_b32 s10, s6101; GFX10-NEXT:    s_mov_b32 s11, s7102; GFX10-NEXT:    s_waitcnt lgkmcnt(0)103; GFX10-NEXT:    s_mov_b32 s12, s2104; GFX10-NEXT:    s_mov_b32 s13, s3105; GFX10-NEXT:    buffer_load_ushort v0, off, s[12:15], 0 glc dlc106; GFX10-NEXT:    s_waitcnt vmcnt(0)107; GFX10-NEXT:    buffer_load_ushort v1, off, s[8:11], 0 glc dlc108; GFX10-NEXT:    s_waitcnt vmcnt(0)109; GFX10-NEXT:    s_mov_b32 s4, s0110; GFX10-NEXT:    s_mov_b32 s5, s1111; GFX10-NEXT:    v_max_f16_e32 v0, v0, v0112; GFX10-NEXT:    v_max_f16_e32 v1, v1, v1113; GFX10-NEXT:    v_min_f16_e32 v0, v0, v1114; GFX10-NEXT:    buffer_store_short v0, off, s[4:7], 0115; GFX10-NEXT:    s_endpgm116;117; GFX11-TRUE16-LABEL: minnum_f16_ieee:118; GFX11-TRUE16:       ; %bb.0: ; %entry119; GFX11-TRUE16-NEXT:    s_clause 0x1120; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24121; GFX11-TRUE16-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34122; GFX11-TRUE16-NEXT:    s_mov_b32 s10, -1123; GFX11-TRUE16-NEXT:    s_mov_b32 s11, 0x31016000124; GFX11-TRUE16-NEXT:    s_mov_b32 s14, s10125; GFX11-TRUE16-NEXT:    s_mov_b32 s15, s11126; GFX11-TRUE16-NEXT:    s_mov_b32 s6, s10127; GFX11-TRUE16-NEXT:    s_mov_b32 s7, s11128; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)129; GFX11-TRUE16-NEXT:    s_mov_b32 s12, s2130; GFX11-TRUE16-NEXT:    s_mov_b32 s13, s3131; GFX11-TRUE16-NEXT:    buffer_load_u16 v0, off, s[12:15], 0 glc dlc132; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)133; GFX11-TRUE16-NEXT:    buffer_load_u16 v1, off, s[4:7], 0 glc dlc134; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)135; GFX11-TRUE16-NEXT:    s_mov_b32 s8, s0136; GFX11-TRUE16-NEXT:    s_mov_b32 s9, s1137; GFX11-TRUE16-NEXT:    v_max_f16_e32 v0.l, v0.l, v0.l138; GFX11-TRUE16-NEXT:    v_max_f16_e32 v0.h, v1.l, v1.l139; GFX11-TRUE16-NEXT:    v_min_f16_e32 v0.l, v0.l, v0.h140; GFX11-TRUE16-NEXT:    buffer_store_b16 v0, off, s[8:11], 0141; GFX11-TRUE16-NEXT:    s_endpgm142;143; GFX11-FAKE16-LABEL: minnum_f16_ieee:144; GFX11-FAKE16:       ; %bb.0: ; %entry145; GFX11-FAKE16-NEXT:    s_clause 0x1146; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24147; GFX11-FAKE16-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34148; GFX11-FAKE16-NEXT:    s_mov_b32 s10, -1149; GFX11-FAKE16-NEXT:    s_mov_b32 s11, 0x31016000150; GFX11-FAKE16-NEXT:    s_mov_b32 s14, s10151; GFX11-FAKE16-NEXT:    s_mov_b32 s15, s11152; GFX11-FAKE16-NEXT:    s_mov_b32 s6, s10153; GFX11-FAKE16-NEXT:    s_mov_b32 s7, s11154; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)155; GFX11-FAKE16-NEXT:    s_mov_b32 s12, s2156; GFX11-FAKE16-NEXT:    s_mov_b32 s13, s3157; GFX11-FAKE16-NEXT:    buffer_load_u16 v0, off, s[12:15], 0 glc dlc158; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)159; GFX11-FAKE16-NEXT:    buffer_load_u16 v1, off, s[4:7], 0 glc dlc160; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)161; GFX11-FAKE16-NEXT:    s_mov_b32 s8, s0162; GFX11-FAKE16-NEXT:    s_mov_b32 s9, s1163; GFX11-FAKE16-NEXT:    v_max_f16_e32 v0, v0, v0164; GFX11-FAKE16-NEXT:    v_max_f16_e32 v1, v1, v1165; GFX11-FAKE16-NEXT:    v_min_f16_e32 v0, v0, v1166; GFX11-FAKE16-NEXT:    buffer_store_b16 v0, off, s[8:11], 0167; GFX11-FAKE16-NEXT:    s_endpgm168    ptr addrspace(1) %r,169    ptr addrspace(1) %a,170    ptr addrspace(1) %b) #0 {171entry:172  %a.val = load volatile half, ptr addrspace(1) %a173  %b.val = load volatile half, ptr addrspace(1) %b174  %r.val = call half @llvm.minnum.f16(half %a.val, half %b.val)175  store half %r.val, ptr addrspace(1) %r176  ret void177}178 179define amdgpu_ps half @minnum_f16_no_ieee(half %a, half %b) #0 {180; SI-LABEL: minnum_f16_no_ieee:181; SI:       ; %bb.0:182; SI-NEXT:    v_cvt_f16_f32_e32 v1, v1183; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0184; SI-NEXT:    v_cvt_f32_f16_e32 v1, v1185; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0186; SI-NEXT:    v_min_f32_e32 v0, v0, v1187; SI-NEXT:    ; return to shader part epilog188;189; VI-LABEL: minnum_f16_no_ieee:190; VI:       ; %bb.0:191; VI-NEXT:    v_min_f16_e32 v0, v0, v1192; VI-NEXT:    ; return to shader part epilog193;194; GFX9-LABEL: minnum_f16_no_ieee:195; GFX9:       ; %bb.0:196; GFX9-NEXT:    v_min_f16_e32 v0, v0, v1197; GFX9-NEXT:    ; return to shader part epilog198;199; GFX10-LABEL: minnum_f16_no_ieee:200; GFX10:       ; %bb.0:201; GFX10-NEXT:    v_min_f16_e32 v0, v0, v1202; GFX10-NEXT:    ; return to shader part epilog203;204; GFX11-TRUE16-LABEL: minnum_f16_no_ieee:205; GFX11-TRUE16:       ; %bb.0:206; GFX11-TRUE16-NEXT:    v_min_f16_e32 v0.l, v0.l, v1.l207; GFX11-TRUE16-NEXT:    ; return to shader part epilog208;209; GFX11-FAKE16-LABEL: minnum_f16_no_ieee:210; GFX11-FAKE16:       ; %bb.0:211; GFX11-FAKE16-NEXT:    v_min_f16_e32 v0, v0, v1212; GFX11-FAKE16-NEXT:    ; return to shader part epilog213  %r.val = call half @llvm.minnum.f16(half %a, half %b)214  ret half %r.val215}216 217define amdgpu_kernel void @minnum_f16_imm_a(218; SI-LABEL: minnum_f16_imm_a:219; SI:       ; %bb.0: ; %entry220; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9221; SI-NEXT:    s_mov_b32 s7, 0xf000222; SI-NEXT:    s_mov_b32 s6, -1223; SI-NEXT:    s_mov_b32 s10, s6224; SI-NEXT:    s_mov_b32 s11, s7225; SI-NEXT:    s_waitcnt lgkmcnt(0)226; SI-NEXT:    s_mov_b32 s8, s2227; SI-NEXT:    s_mov_b32 s9, s3228; SI-NEXT:    buffer_load_ushort v0, off, s[8:11], 0229; SI-NEXT:    s_mov_b32 s4, s0230; SI-NEXT:    s_mov_b32 s5, s1231; SI-NEXT:    s_waitcnt vmcnt(0)232; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0233; SI-NEXT:    v_min_f32_e32 v0, 0x40400000, v0234; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0235; SI-NEXT:    buffer_store_short v0, off, s[4:7], 0236; SI-NEXT:    s_endpgm237;238; VI-LABEL: minnum_f16_imm_a:239; VI:       ; %bb.0: ; %entry240; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24241; VI-NEXT:    s_mov_b32 s7, 0xf000242; VI-NEXT:    s_mov_b32 s6, -1243; VI-NEXT:    s_mov_b32 s10, s6244; VI-NEXT:    s_mov_b32 s11, s7245; VI-NEXT:    s_waitcnt lgkmcnt(0)246; VI-NEXT:    s_mov_b32 s8, s2247; VI-NEXT:    s_mov_b32 s9, s3248; VI-NEXT:    buffer_load_ushort v0, off, s[8:11], 0249; VI-NEXT:    s_mov_b32 s4, s0250; VI-NEXT:    s_mov_b32 s5, s1251; VI-NEXT:    s_waitcnt vmcnt(0)252; VI-NEXT:    v_max_f16_e32 v0, v0, v0253; VI-NEXT:    v_min_f16_e32 v0, 0x4200, v0254; VI-NEXT:    buffer_store_short v0, off, s[4:7], 0255; VI-NEXT:    s_endpgm256;257; GFX9-LABEL: minnum_f16_imm_a:258; GFX9:       ; %bb.0: ; %entry259; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24260; GFX9-NEXT:    s_mov_b32 s7, 0xf000261; GFX9-NEXT:    s_mov_b32 s6, -1262; GFX9-NEXT:    s_mov_b32 s10, s6263; GFX9-NEXT:    s_mov_b32 s11, s7264; GFX9-NEXT:    s_waitcnt lgkmcnt(0)265; GFX9-NEXT:    s_mov_b32 s8, s2266; GFX9-NEXT:    s_mov_b32 s9, s3267; GFX9-NEXT:    buffer_load_ushort v0, off, s[8:11], 0268; GFX9-NEXT:    s_mov_b32 s4, s0269; GFX9-NEXT:    s_mov_b32 s5, s1270; GFX9-NEXT:    s_waitcnt vmcnt(0)271; GFX9-NEXT:    v_max_f16_e32 v0, v0, v0272; GFX9-NEXT:    v_min_f16_e32 v0, 0x4200, v0273; GFX9-NEXT:    buffer_store_short v0, off, s[4:7], 0274; GFX9-NEXT:    s_endpgm275;276; GFX10-LABEL: minnum_f16_imm_a:277; GFX10:       ; %bb.0: ; %entry278; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24279; GFX10-NEXT:    s_mov_b32 s6, -1280; GFX10-NEXT:    s_mov_b32 s7, 0x31016000281; GFX10-NEXT:    s_mov_b32 s10, s6282; GFX10-NEXT:    s_mov_b32 s11, s7283; GFX10-NEXT:    s_waitcnt lgkmcnt(0)284; GFX10-NEXT:    s_mov_b32 s8, s2285; GFX10-NEXT:    s_mov_b32 s9, s3286; GFX10-NEXT:    s_mov_b32 s4, s0287; GFX10-NEXT:    buffer_load_ushort v0, off, s[8:11], 0288; GFX10-NEXT:    s_mov_b32 s5, s1289; GFX10-NEXT:    s_waitcnt vmcnt(0)290; GFX10-NEXT:    v_max_f16_e32 v0, v0, v0291; GFX10-NEXT:    v_min_f16_e32 v0, 0x4200, v0292; GFX10-NEXT:    buffer_store_short v0, off, s[4:7], 0293; GFX10-NEXT:    s_endpgm294;295; GFX11-TRUE16-LABEL: minnum_f16_imm_a:296; GFX11-TRUE16:       ; %bb.0: ; %entry297; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24298; GFX11-TRUE16-NEXT:    s_mov_b32 s6, -1299; GFX11-TRUE16-NEXT:    s_mov_b32 s7, 0x31016000300; GFX11-TRUE16-NEXT:    s_mov_b32 s10, s6301; GFX11-TRUE16-NEXT:    s_mov_b32 s11, s7302; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)303; GFX11-TRUE16-NEXT:    s_mov_b32 s8, s2304; GFX11-TRUE16-NEXT:    s_mov_b32 s9, s3305; GFX11-TRUE16-NEXT:    s_mov_b32 s4, s0306; GFX11-TRUE16-NEXT:    buffer_load_u16 v0, off, s[8:11], 0307; GFX11-TRUE16-NEXT:    s_mov_b32 s5, s1308; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)309; GFX11-TRUE16-NEXT:    v_max_f16_e32 v0.l, v0.l, v0.l310; GFX11-TRUE16-NEXT:    v_min_f16_e32 v0.l, 0x4200, v0.l311; GFX11-TRUE16-NEXT:    buffer_store_b16 v0, off, s[4:7], 0312; GFX11-TRUE16-NEXT:    s_endpgm313;314; GFX11-FAKE16-LABEL: minnum_f16_imm_a:315; GFX11-FAKE16:       ; %bb.0: ; %entry316; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24317; GFX11-FAKE16-NEXT:    s_mov_b32 s6, -1318; GFX11-FAKE16-NEXT:    s_mov_b32 s7, 0x31016000319; GFX11-FAKE16-NEXT:    s_mov_b32 s10, s6320; GFX11-FAKE16-NEXT:    s_mov_b32 s11, s7321; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)322; GFX11-FAKE16-NEXT:    s_mov_b32 s8, s2323; GFX11-FAKE16-NEXT:    s_mov_b32 s9, s3324; GFX11-FAKE16-NEXT:    s_mov_b32 s4, s0325; GFX11-FAKE16-NEXT:    buffer_load_u16 v0, off, s[8:11], 0326; GFX11-FAKE16-NEXT:    s_mov_b32 s5, s1327; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)328; GFX11-FAKE16-NEXT:    v_max_f16_e32 v0, v0, v0329; GFX11-FAKE16-NEXT:    v_min_f16_e32 v0, 0x4200, v0330; GFX11-FAKE16-NEXT:    buffer_store_b16 v0, off, s[4:7], 0331; GFX11-FAKE16-NEXT:    s_endpgm332    ptr addrspace(1) %r,333    ptr addrspace(1) %b) #0 {334entry:335  %b.val = load half, ptr addrspace(1) %b336  %r.val = call half @llvm.minnum.f16(half 3.0, half %b.val)337  store half %r.val, ptr addrspace(1) %r338  ret void339}340 341define amdgpu_kernel void @minnum_f16_imm_b(342; SI-LABEL: minnum_f16_imm_b:343; SI:       ; %bb.0: ; %entry344; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9345; SI-NEXT:    s_mov_b32 s7, 0xf000346; SI-NEXT:    s_mov_b32 s6, -1347; SI-NEXT:    s_mov_b32 s10, s6348; SI-NEXT:    s_mov_b32 s11, s7349; SI-NEXT:    s_waitcnt lgkmcnt(0)350; SI-NEXT:    s_mov_b32 s8, s2351; SI-NEXT:    s_mov_b32 s9, s3352; SI-NEXT:    buffer_load_ushort v0, off, s[8:11], 0353; SI-NEXT:    s_mov_b32 s4, s0354; SI-NEXT:    s_mov_b32 s5, s1355; SI-NEXT:    s_waitcnt vmcnt(0)356; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0357; SI-NEXT:    v_min_f32_e32 v0, 4.0, v0358; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0359; SI-NEXT:    buffer_store_short v0, off, s[4:7], 0360; SI-NEXT:    s_endpgm361;362; VI-LABEL: minnum_f16_imm_b:363; VI:       ; %bb.0: ; %entry364; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24365; VI-NEXT:    s_mov_b32 s7, 0xf000366; VI-NEXT:    s_mov_b32 s6, -1367; VI-NEXT:    s_mov_b32 s10, s6368; VI-NEXT:    s_mov_b32 s11, s7369; VI-NEXT:    s_waitcnt lgkmcnt(0)370; VI-NEXT:    s_mov_b32 s8, s2371; VI-NEXT:    s_mov_b32 s9, s3372; VI-NEXT:    buffer_load_ushort v0, off, s[8:11], 0373; VI-NEXT:    s_mov_b32 s4, s0374; VI-NEXT:    s_mov_b32 s5, s1375; VI-NEXT:    s_waitcnt vmcnt(0)376; VI-NEXT:    v_max_f16_e32 v0, v0, v0377; VI-NEXT:    v_min_f16_e32 v0, 4.0, v0378; VI-NEXT:    buffer_store_short v0, off, s[4:7], 0379; VI-NEXT:    s_endpgm380;381; GFX9-LABEL: minnum_f16_imm_b:382; GFX9:       ; %bb.0: ; %entry383; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24384; GFX9-NEXT:    s_mov_b32 s7, 0xf000385; GFX9-NEXT:    s_mov_b32 s6, -1386; GFX9-NEXT:    s_mov_b32 s10, s6387; GFX9-NEXT:    s_mov_b32 s11, s7388; GFX9-NEXT:    s_waitcnt lgkmcnt(0)389; GFX9-NEXT:    s_mov_b32 s8, s2390; GFX9-NEXT:    s_mov_b32 s9, s3391; GFX9-NEXT:    buffer_load_ushort v0, off, s[8:11], 0392; GFX9-NEXT:    s_mov_b32 s4, s0393; GFX9-NEXT:    s_mov_b32 s5, s1394; GFX9-NEXT:    s_waitcnt vmcnt(0)395; GFX9-NEXT:    v_max_f16_e32 v0, v0, v0396; GFX9-NEXT:    v_min_f16_e32 v0, 4.0, v0397; GFX9-NEXT:    buffer_store_short v0, off, s[4:7], 0398; GFX9-NEXT:    s_endpgm399;400; GFX10-LABEL: minnum_f16_imm_b:401; GFX10:       ; %bb.0: ; %entry402; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24403; GFX10-NEXT:    s_mov_b32 s6, -1404; GFX10-NEXT:    s_mov_b32 s7, 0x31016000405; GFX10-NEXT:    s_mov_b32 s10, s6406; GFX10-NEXT:    s_mov_b32 s11, s7407; GFX10-NEXT:    s_waitcnt lgkmcnt(0)408; GFX10-NEXT:    s_mov_b32 s8, s2409; GFX10-NEXT:    s_mov_b32 s9, s3410; GFX10-NEXT:    s_mov_b32 s4, s0411; GFX10-NEXT:    buffer_load_ushort v0, off, s[8:11], 0412; GFX10-NEXT:    s_mov_b32 s5, s1413; GFX10-NEXT:    s_waitcnt vmcnt(0)414; GFX10-NEXT:    v_max_f16_e32 v0, v0, v0415; GFX10-NEXT:    v_min_f16_e32 v0, 4.0, v0416; GFX10-NEXT:    buffer_store_short v0, off, s[4:7], 0417; GFX10-NEXT:    s_endpgm418;419; GFX11-TRUE16-LABEL: minnum_f16_imm_b:420; GFX11-TRUE16:       ; %bb.0: ; %entry421; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24422; GFX11-TRUE16-NEXT:    s_mov_b32 s6, -1423; GFX11-TRUE16-NEXT:    s_mov_b32 s7, 0x31016000424; GFX11-TRUE16-NEXT:    s_mov_b32 s10, s6425; GFX11-TRUE16-NEXT:    s_mov_b32 s11, s7426; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)427; GFX11-TRUE16-NEXT:    s_mov_b32 s8, s2428; GFX11-TRUE16-NEXT:    s_mov_b32 s9, s3429; GFX11-TRUE16-NEXT:    s_mov_b32 s4, s0430; GFX11-TRUE16-NEXT:    buffer_load_u16 v0, off, s[8:11], 0431; GFX11-TRUE16-NEXT:    s_mov_b32 s5, s1432; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)433; GFX11-TRUE16-NEXT:    v_max_f16_e32 v0.l, v0.l, v0.l434; GFX11-TRUE16-NEXT:    v_min_f16_e32 v0.l, 4.0, v0.l435; GFX11-TRUE16-NEXT:    buffer_store_b16 v0, off, s[4:7], 0436; GFX11-TRUE16-NEXT:    s_endpgm437;438; GFX11-FAKE16-LABEL: minnum_f16_imm_b:439; GFX11-FAKE16:       ; %bb.0: ; %entry440; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24441; GFX11-FAKE16-NEXT:    s_mov_b32 s6, -1442; GFX11-FAKE16-NEXT:    s_mov_b32 s7, 0x31016000443; GFX11-FAKE16-NEXT:    s_mov_b32 s10, s6444; GFX11-FAKE16-NEXT:    s_mov_b32 s11, s7445; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)446; GFX11-FAKE16-NEXT:    s_mov_b32 s8, s2447; GFX11-FAKE16-NEXT:    s_mov_b32 s9, s3448; GFX11-FAKE16-NEXT:    s_mov_b32 s4, s0449; GFX11-FAKE16-NEXT:    buffer_load_u16 v0, off, s[8:11], 0450; GFX11-FAKE16-NEXT:    s_mov_b32 s5, s1451; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)452; GFX11-FAKE16-NEXT:    v_max_f16_e32 v0, v0, v0453; GFX11-FAKE16-NEXT:    v_min_f16_e32 v0, 4.0, v0454; GFX11-FAKE16-NEXT:    buffer_store_b16 v0, off, s[4:7], 0455; GFX11-FAKE16-NEXT:    s_endpgm456    ptr addrspace(1) %r,457    ptr addrspace(1) %a) #0 {458entry:459  %a.val = load half, ptr addrspace(1) %a460  %r.val = call half @llvm.minnum.f16(half %a.val, half 4.0)461  store half %r.val, ptr addrspace(1) %r462  ret void463}464 465define amdgpu_kernel void @minnum_v2f16_ieee(466; SI-LABEL: minnum_v2f16_ieee:467; SI:       ; %bb.0: ; %entry468; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9469; SI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0xd470; SI-NEXT:    s_waitcnt lgkmcnt(0)471; SI-NEXT:    s_load_dword s2, s[2:3], 0x0472; SI-NEXT:    s_load_dword s4, s[4:5], 0x0473; SI-NEXT:    s_mov_b32 s3, 0xf000474; SI-NEXT:    s_waitcnt lgkmcnt(0)475; SI-NEXT:    s_lshr_b32 s5, s2, 16476; SI-NEXT:    s_lshr_b32 s6, s4, 16477; SI-NEXT:    v_cvt_f32_f16_e32 v0, s5478; SI-NEXT:    v_cvt_f32_f16_e32 v1, s6479; SI-NEXT:    v_cvt_f32_f16_e32 v2, s2480; SI-NEXT:    v_cvt_f32_f16_e32 v3, s4481; SI-NEXT:    s_mov_b32 s2, -1482; SI-NEXT:    v_min_f32_e32 v0, v0, v1483; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0484; SI-NEXT:    v_min_f32_e32 v1, v2, v3485; SI-NEXT:    v_cvt_f16_f32_e32 v1, v1486; SI-NEXT:    v_lshlrev_b32_e32 v0, 16, v0487; SI-NEXT:    v_or_b32_e32 v0, v1, v0488; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0489; SI-NEXT:    s_endpgm490;491; VI-LABEL: minnum_v2f16_ieee:492; VI:       ; %bb.0: ; %entry493; VI-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x34494; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24495; VI-NEXT:    s_mov_b32 s7, 0xf000496; VI-NEXT:    s_mov_b32 s6, -1497; VI-NEXT:    s_waitcnt lgkmcnt(0)498; VI-NEXT:    s_load_dword s8, s[8:9], 0x0499; VI-NEXT:    s_load_dword s2, s[2:3], 0x0500; VI-NEXT:    s_mov_b32 s4, s0501; VI-NEXT:    s_mov_b32 s5, s1502; VI-NEXT:    s_waitcnt lgkmcnt(0)503; VI-NEXT:    v_max_f16_e64 v0, s8, s8504; VI-NEXT:    v_max_f16_e64 v1, s2, s2505; VI-NEXT:    s_lshr_b32 s0, s8, 16506; VI-NEXT:    v_min_f16_e32 v0, v1, v0507; VI-NEXT:    v_max_f16_e64 v1, s0, s0508; VI-NEXT:    s_lshr_b32 s0, s2, 16509; VI-NEXT:    v_max_f16_e64 v2, s0, s0510; VI-NEXT:    v_min_f16_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD511; VI-NEXT:    v_or_b32_e32 v0, v0, v1512; VI-NEXT:    buffer_store_dword v0, off, s[4:7], 0513; VI-NEXT:    s_endpgm514;515; GFX9-LABEL: minnum_v2f16_ieee:516; GFX9:       ; %bb.0: ; %entry517; GFX9-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x34518; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24519; GFX9-NEXT:    s_mov_b32 s7, 0xf000520; GFX9-NEXT:    s_mov_b32 s6, -1521; GFX9-NEXT:    s_waitcnt lgkmcnt(0)522; GFX9-NEXT:    s_load_dword s10, s[8:9], 0x0523; GFX9-NEXT:    s_load_dword s11, s[2:3], 0x0524; GFX9-NEXT:    s_mov_b32 s4, s0525; GFX9-NEXT:    s_mov_b32 s5, s1526; GFX9-NEXT:    s_waitcnt lgkmcnt(0)527; GFX9-NEXT:    v_pk_max_f16 v0, s10, s10528; GFX9-NEXT:    v_pk_max_f16 v1, s11, s11529; GFX9-NEXT:    v_pk_min_f16 v0, v1, v0530; GFX9-NEXT:    buffer_store_dword v0, off, s[4:7], 0531; GFX9-NEXT:    s_endpgm532;533; GFX10-LABEL: minnum_v2f16_ieee:534; GFX10:       ; %bb.0: ; %entry535; GFX10-NEXT:    s_clause 0x1536; GFX10-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34537; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24538; GFX10-NEXT:    s_waitcnt lgkmcnt(0)539; GFX10-NEXT:    s_load_dword s4, s[6:7], 0x0540; GFX10-NEXT:    s_load_dword s5, s[2:3], 0x0541; GFX10-NEXT:    s_mov_b32 s3, 0x31016000542; GFX10-NEXT:    s_mov_b32 s2, -1543; GFX10-NEXT:    s_waitcnt lgkmcnt(0)544; GFX10-NEXT:    v_pk_max_f16 v0, s4, s4545; GFX10-NEXT:    v_pk_max_f16 v1, s5, s5546; GFX10-NEXT:    v_pk_min_f16 v0, v1, v0547; GFX10-NEXT:    buffer_store_dword v0, off, s[0:3], 0548; GFX10-NEXT:    s_endpgm549;550; GFX11-LABEL: minnum_v2f16_ieee:551; GFX11:       ; %bb.0: ; %entry552; GFX11-NEXT:    s_clause 0x1553; GFX11-NEXT:    s_load_b64 s[6:7], s[4:5], 0x34554; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24555; GFX11-NEXT:    s_waitcnt lgkmcnt(0)556; GFX11-NEXT:    s_load_b32 s4, s[6:7], 0x0557; GFX11-NEXT:    s_load_b32 s2, s[2:3], 0x0558; GFX11-NEXT:    s_mov_b32 s3, 0x31016000559; GFX11-NEXT:    s_waitcnt lgkmcnt(0)560; GFX11-NEXT:    v_pk_max_f16 v0, s4, s4561; GFX11-NEXT:    v_pk_max_f16 v1, s2, s2562; GFX11-NEXT:    s_mov_b32 s2, -1563; GFX11-NEXT:    v_pk_min_f16 v0, v1, v0564; GFX11-NEXT:    buffer_store_b32 v0, off, s[0:3], 0565; GFX11-NEXT:    s_endpgm566    ptr addrspace(1) %r,567    ptr addrspace(1) %a,568    ptr addrspace(1) %b) #0 {569entry:570  %a.val = load <2 x half>, ptr addrspace(1) %a571  %b.val = load <2 x half>, ptr addrspace(1) %b572  %r.val = call <2 x half> @llvm.minnum.v2f16(<2 x half> %a.val, <2 x half> %b.val)573  store <2 x half> %r.val, ptr addrspace(1) %r574  ret void575}576 577define amdgpu_ps <2 x half> @minnum_v2f16_no_ieee(<2 x half> %a, <2 x half> %b) #0 {578; SI-LABEL: minnum_v2f16_no_ieee:579; SI:       ; %bb.0:580; SI-NEXT:    v_cvt_f16_f32_e32 v3, v3581; SI-NEXT:    v_cvt_f16_f32_e32 v2, v2582; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0583; SI-NEXT:    v_cvt_f16_f32_e32 v1, v1584; SI-NEXT:    v_cvt_f32_f16_e32 v3, v3585; SI-NEXT:    v_cvt_f32_f16_e32 v2, v2586; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0587; SI-NEXT:    v_cvt_f32_f16_e32 v1, v1588; SI-NEXT:    v_min_f32_e32 v0, v0, v2589; SI-NEXT:    v_min_f32_e32 v1, v1, v3590; SI-NEXT:    ; return to shader part epilog591;592; VI-LABEL: minnum_v2f16_no_ieee:593; VI:       ; %bb.0:594; VI-NEXT:    v_min_f16_sdwa v2, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1595; VI-NEXT:    v_min_f16_e32 v0, v0, v1596; VI-NEXT:    v_or_b32_e32 v0, v0, v2597; VI-NEXT:    ; return to shader part epilog598;599; GFX9-LABEL: minnum_v2f16_no_ieee:600; GFX9:       ; %bb.0:601; GFX9-NEXT:    v_pk_min_f16 v0, v0, v1602; GFX9-NEXT:    ; return to shader part epilog603;604; GFX10PLUS-LABEL: minnum_v2f16_no_ieee:605; GFX10PLUS:       ; %bb.0:606; GFX10PLUS-NEXT:    v_pk_min_f16 v0, v0, v1607; GFX10PLUS-NEXT:    ; return to shader part epilog608  %r.val = call <2 x half> @llvm.minnum.v2f16(<2 x half> %a, <2 x half> %b)609  ret <2 x half> %r.val610}611 612define amdgpu_kernel void @minnum_v2f16_imm_a(613; SI-LABEL: minnum_v2f16_imm_a:614; SI:       ; %bb.0: ; %entry615; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9616; SI-NEXT:    s_waitcnt lgkmcnt(0)617; SI-NEXT:    s_load_dword s2, s[2:3], 0x0618; SI-NEXT:    s_waitcnt lgkmcnt(0)619; SI-NEXT:    s_lshr_b32 s3, s2, 16620; SI-NEXT:    v_cvt_f32_f16_e32 v0, s3621; SI-NEXT:    v_cvt_f32_f16_e32 v1, s2622; SI-NEXT:    s_mov_b32 s3, 0xf000623; SI-NEXT:    s_mov_b32 s2, -1624; SI-NEXT:    v_min_f32_e32 v0, 4.0, v0625; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0626; SI-NEXT:    v_min_f32_e32 v1, 0x40400000, v1627; SI-NEXT:    v_cvt_f16_f32_e32 v1, v1628; SI-NEXT:    v_lshlrev_b32_e32 v0, 16, v0629; SI-NEXT:    v_or_b32_e32 v0, v1, v0630; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0631; SI-NEXT:    s_endpgm632;633; VI-LABEL: minnum_v2f16_imm_a:634; VI:       ; %bb.0: ; %entry635; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24636; VI-NEXT:    v_mov_b32_e32 v2, 0x4400637; VI-NEXT:    s_waitcnt lgkmcnt(0)638; VI-NEXT:    s_load_dword s4, s[2:3], 0x0639; VI-NEXT:    s_mov_b32 s3, 0xf000640; VI-NEXT:    s_mov_b32 s2, -1641; VI-NEXT:    s_waitcnt lgkmcnt(0)642; VI-NEXT:    v_max_f16_e64 v0, s4, s4643; VI-NEXT:    s_lshr_b32 s4, s4, 16644; VI-NEXT:    v_max_f16_e64 v1, s4, s4645; VI-NEXT:    v_min_f16_e32 v0, 0x4200, v0646; VI-NEXT:    v_min_f16_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD647; VI-NEXT:    v_or_b32_e32 v0, v0, v1648; VI-NEXT:    buffer_store_dword v0, off, s[0:3], 0649; VI-NEXT:    s_endpgm650;651; GFX9-LABEL: minnum_v2f16_imm_a:652; GFX9:       ; %bb.0: ; %entry653; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24654; GFX9-NEXT:    s_waitcnt lgkmcnt(0)655; GFX9-NEXT:    s_load_dword s4, s[2:3], 0x0656; GFX9-NEXT:    s_mov_b32 s3, 0xf000657; GFX9-NEXT:    s_mov_b32 s2, -1658; GFX9-NEXT:    s_waitcnt lgkmcnt(0)659; GFX9-NEXT:    v_pk_max_f16 v0, s4, s4660; GFX9-NEXT:    s_mov_b32 s4, 0x44004200661; GFX9-NEXT:    v_pk_min_f16 v0, v0, s4662; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], 0663; GFX9-NEXT:    s_endpgm664;665; GFX10-LABEL: minnum_v2f16_imm_a:666; GFX10:       ; %bb.0: ; %entry667; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24668; GFX10-NEXT:    s_waitcnt lgkmcnt(0)669; GFX10-NEXT:    s_load_dword s2, s[2:3], 0x0670; GFX10-NEXT:    s_mov_b32 s3, 0x31016000671; GFX10-NEXT:    s_waitcnt lgkmcnt(0)672; GFX10-NEXT:    v_pk_max_f16 v0, s2, s2673; GFX10-NEXT:    s_mov_b32 s2, -1674; GFX10-NEXT:    v_pk_min_f16 v0, 0x44004200, v0675; GFX10-NEXT:    buffer_store_dword v0, off, s[0:3], 0676; GFX10-NEXT:    s_endpgm677;678; GFX11-LABEL: minnum_v2f16_imm_a:679; GFX11:       ; %bb.0: ; %entry680; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24681; GFX11-NEXT:    s_waitcnt lgkmcnt(0)682; GFX11-NEXT:    s_load_b32 s2, s[2:3], 0x0683; GFX11-NEXT:    s_mov_b32 s3, 0x31016000684; GFX11-NEXT:    s_waitcnt lgkmcnt(0)685; GFX11-NEXT:    v_pk_max_f16 v0, s2, s2686; GFX11-NEXT:    s_mov_b32 s2, -1687; GFX11-NEXT:    v_pk_min_f16 v0, 0x44004200, v0688; GFX11-NEXT:    buffer_store_b32 v0, off, s[0:3], 0689; GFX11-NEXT:    s_endpgm690    ptr addrspace(1) %r,691    ptr addrspace(1) %b) #0 {692entry:693  %b.val = load <2 x half>, ptr addrspace(1) %b694  %r.val = call <2 x half> @llvm.minnum.v2f16(<2 x half> <half 3.0, half 4.0>, <2 x half> %b.val)695  store <2 x half> %r.val, ptr addrspace(1) %r696  ret void697}698 699define amdgpu_kernel void @minnum_v2f16_imm_b(700; SI-LABEL: minnum_v2f16_imm_b:701; SI:       ; %bb.0: ; %entry702; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9703; SI-NEXT:    s_waitcnt lgkmcnt(0)704; SI-NEXT:    s_load_dword s2, s[2:3], 0x0705; SI-NEXT:    s_waitcnt lgkmcnt(0)706; SI-NEXT:    s_lshr_b32 s3, s2, 16707; SI-NEXT:    v_cvt_f32_f16_e32 v0, s3708; SI-NEXT:    v_cvt_f32_f16_e32 v1, s2709; SI-NEXT:    s_mov_b32 s3, 0xf000710; SI-NEXT:    s_mov_b32 s2, -1711; SI-NEXT:    v_min_f32_e32 v0, 0x40400000, v0712; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0713; SI-NEXT:    v_min_f32_e32 v1, 4.0, v1714; SI-NEXT:    v_cvt_f16_f32_e32 v1, v1715; SI-NEXT:    v_lshlrev_b32_e32 v0, 16, v0716; SI-NEXT:    v_or_b32_e32 v0, v1, v0717; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0718; SI-NEXT:    s_endpgm719;720; VI-LABEL: minnum_v2f16_imm_b:721; VI:       ; %bb.0: ; %entry722; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24723; VI-NEXT:    v_mov_b32_e32 v2, 0x4200724; VI-NEXT:    s_waitcnt lgkmcnt(0)725; VI-NEXT:    s_load_dword s4, s[2:3], 0x0726; VI-NEXT:    s_mov_b32 s3, 0xf000727; VI-NEXT:    s_mov_b32 s2, -1728; VI-NEXT:    s_waitcnt lgkmcnt(0)729; VI-NEXT:    v_max_f16_e64 v0, s4, s4730; VI-NEXT:    s_lshr_b32 s4, s4, 16731; VI-NEXT:    v_max_f16_e64 v1, s4, s4732; VI-NEXT:    v_min_f16_e32 v0, 4.0, v0733; VI-NEXT:    v_min_f16_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD734; VI-NEXT:    v_or_b32_e32 v0, v0, v1735; VI-NEXT:    buffer_store_dword v0, off, s[0:3], 0736; VI-NEXT:    s_endpgm737;738; GFX9-LABEL: minnum_v2f16_imm_b:739; GFX9:       ; %bb.0: ; %entry740; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24741; GFX9-NEXT:    s_waitcnt lgkmcnt(0)742; GFX9-NEXT:    s_load_dword s4, s[2:3], 0x0743; GFX9-NEXT:    s_mov_b32 s3, 0xf000744; GFX9-NEXT:    s_mov_b32 s2, -1745; GFX9-NEXT:    s_waitcnt lgkmcnt(0)746; GFX9-NEXT:    v_pk_max_f16 v0, s4, s4747; GFX9-NEXT:    s_mov_b32 s4, 0x42004400748; GFX9-NEXT:    v_pk_min_f16 v0, v0, s4749; GFX9-NEXT:    buffer_store_dword v0, off, s[0:3], 0750; GFX9-NEXT:    s_endpgm751;752; GFX10-LABEL: minnum_v2f16_imm_b:753; GFX10:       ; %bb.0: ; %entry754; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24755; GFX10-NEXT:    s_waitcnt lgkmcnt(0)756; GFX10-NEXT:    s_load_dword s2, s[2:3], 0x0757; GFX10-NEXT:    s_mov_b32 s3, 0x31016000758; GFX10-NEXT:    s_waitcnt lgkmcnt(0)759; GFX10-NEXT:    v_pk_max_f16 v0, s2, s2760; GFX10-NEXT:    s_mov_b32 s2, -1761; GFX10-NEXT:    v_pk_min_f16 v0, 0x42004400, v0762; GFX10-NEXT:    buffer_store_dword v0, off, s[0:3], 0763; GFX10-NEXT:    s_endpgm764;765; GFX11-LABEL: minnum_v2f16_imm_b:766; GFX11:       ; %bb.0: ; %entry767; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24768; GFX11-NEXT:    s_waitcnt lgkmcnt(0)769; GFX11-NEXT:    s_load_b32 s2, s[2:3], 0x0770; GFX11-NEXT:    s_mov_b32 s3, 0x31016000771; GFX11-NEXT:    s_waitcnt lgkmcnt(0)772; GFX11-NEXT:    v_pk_max_f16 v0, s2, s2773; GFX11-NEXT:    s_mov_b32 s2, -1774; GFX11-NEXT:    v_pk_min_f16 v0, 0x42004400, v0775; GFX11-NEXT:    buffer_store_b32 v0, off, s[0:3], 0776; GFX11-NEXT:    s_endpgm777    ptr addrspace(1) %r,778    ptr addrspace(1) %a) #0 {779entry:780  %a.val = load <2 x half>, ptr addrspace(1) %a781  %r.val = call <2 x half> @llvm.minnum.v2f16(<2 x half> %a.val, <2 x half> <half 4.0, half 3.0>)782  store <2 x half> %r.val, ptr addrspace(1) %r783  ret void784}785 786; FIXME: Scalarize with undef half787define amdgpu_kernel void @minnum_v3f16(788; SI-LABEL: minnum_v3f16:789; SI:       ; %bb.0: ; %entry790; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9791; SI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0xd792; SI-NEXT:    s_waitcnt lgkmcnt(0)793; SI-NEXT:    s_load_dwordx2 s[6:7], s[2:3], 0x0794; SI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0795; SI-NEXT:    s_mov_b32 s3, 0xf000796; SI-NEXT:    s_mov_b32 s2, -1797; SI-NEXT:    s_waitcnt lgkmcnt(0)798; SI-NEXT:    v_cvt_f32_f16_e32 v0, s7799; SI-NEXT:    s_lshr_b32 s7, s6, 16800; SI-NEXT:    s_lshr_b32 s8, s4, 16801; SI-NEXT:    v_cvt_f32_f16_e32 v1, s7802; SI-NEXT:    v_cvt_f32_f16_e32 v2, s8803; SI-NEXT:    v_cvt_f32_f16_e32 v3, s6804; SI-NEXT:    v_cvt_f32_f16_e32 v4, s4805; SI-NEXT:    v_cvt_f32_f16_e32 v5, s5806; SI-NEXT:    v_min_f32_e32 v1, v1, v2807; SI-NEXT:    v_cvt_f16_f32_e32 v1, v1808; SI-NEXT:    v_min_f32_e32 v2, v3, v4809; SI-NEXT:    v_min_f32_e32 v0, v0, v5810; SI-NEXT:    v_cvt_f16_f32_e32 v2, v2811; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0812; SI-NEXT:    v_lshlrev_b32_e32 v1, 16, v1813; SI-NEXT:    v_or_b32_e32 v1, v2, v1814; SI-NEXT:    buffer_store_short v0, off, s[0:3], 0 offset:4815; SI-NEXT:    buffer_store_dword v1, off, s[0:3], 0816; SI-NEXT:    s_endpgm817;818; VI-LABEL: minnum_v3f16:819; VI:       ; %bb.0: ; %entry820; VI-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x34821; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24822; VI-NEXT:    s_mov_b32 s7, 0xf000823; VI-NEXT:    s_mov_b32 s6, -1824; VI-NEXT:    s_waitcnt lgkmcnt(0)825; VI-NEXT:    s_load_dwordx2 s[8:9], s[8:9], 0x0826; VI-NEXT:    s_load_dwordx2 s[2:3], s[2:3], 0x0827; VI-NEXT:    s_mov_b32 s4, s0828; VI-NEXT:    s_mov_b32 s5, s1829; VI-NEXT:    s_waitcnt lgkmcnt(0)830; VI-NEXT:    v_max_f16_e64 v0, s8, s8831; VI-NEXT:    v_max_f16_e64 v1, s2, s2832; VI-NEXT:    s_lshr_b32 s0, s8, 16833; VI-NEXT:    v_min_f16_e32 v0, v1, v0834; VI-NEXT:    v_max_f16_e64 v1, s0, s0835; VI-NEXT:    s_lshr_b32 s0, s2, 16836; VI-NEXT:    v_max_f16_e64 v2, s0, s0837; VI-NEXT:    v_min_f16_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD838; VI-NEXT:    v_or_b32_e32 v0, v0, v1839; VI-NEXT:    v_max_f16_e64 v1, s9, s9840; VI-NEXT:    v_max_f16_e64 v2, s3, s3841; VI-NEXT:    v_min_f16_e32 v1, v2, v1842; VI-NEXT:    buffer_store_short v1, off, s[4:7], 0 offset:4843; VI-NEXT:    buffer_store_dword v0, off, s[4:7], 0844; VI-NEXT:    s_endpgm845;846; GFX9-LABEL: minnum_v3f16:847; GFX9:       ; %bb.0: ; %entry848; GFX9-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x34849; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24850; GFX9-NEXT:    s_mov_b32 s7, 0xf000851; GFX9-NEXT:    s_mov_b32 s6, -1852; GFX9-NEXT:    s_waitcnt lgkmcnt(0)853; GFX9-NEXT:    s_load_dwordx2 s[10:11], s[8:9], 0x0854; GFX9-NEXT:    s_load_dwordx2 s[12:13], s[2:3], 0x0855; GFX9-NEXT:    s_mov_b32 s4, s0856; GFX9-NEXT:    s_mov_b32 s5, s1857; GFX9-NEXT:    s_waitcnt lgkmcnt(0)858; GFX9-NEXT:    v_pk_max_f16 v0, s10, s10859; GFX9-NEXT:    v_pk_max_f16 v1, s12, s12860; GFX9-NEXT:    v_pk_max_f16 v2, s11, s11861; GFX9-NEXT:    v_pk_min_f16 v0, v1, v0862; GFX9-NEXT:    v_pk_max_f16 v1, s13, s13863; GFX9-NEXT:    v_pk_min_f16 v1, v1, v2864; GFX9-NEXT:    buffer_store_short v1, off, s[4:7], 0 offset:4865; GFX9-NEXT:    buffer_store_dword v0, off, s[4:7], 0866; GFX9-NEXT:    s_endpgm867;868; GFX10-LABEL: minnum_v3f16:869; GFX10:       ; %bb.0: ; %entry870; GFX10-NEXT:    s_clause 0x1871; GFX10-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34872; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24873; GFX10-NEXT:    s_waitcnt lgkmcnt(0)874; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x0875; GFX10-NEXT:    s_load_dwordx2 s[8:9], s[2:3], 0x0876; GFX10-NEXT:    s_mov_b32 s3, 0x31016000877; GFX10-NEXT:    s_mov_b32 s2, -1878; GFX10-NEXT:    s_waitcnt lgkmcnt(0)879; GFX10-NEXT:    v_pk_max_f16 v1, s5, s5880; GFX10-NEXT:    v_pk_max_f16 v2, s9, s9881; GFX10-NEXT:    v_pk_max_f16 v0, s4, s4882; GFX10-NEXT:    v_pk_max_f16 v3, s8, s8883; GFX10-NEXT:    v_pk_min_f16 v1, v2, v1884; GFX10-NEXT:    v_pk_min_f16 v0, v3, v0885; GFX10-NEXT:    buffer_store_short v1, off, s[0:3], 0 offset:4886; GFX10-NEXT:    buffer_store_dword v0, off, s[0:3], 0887; GFX10-NEXT:    s_endpgm888;889; GFX11-LABEL: minnum_v3f16:890; GFX11:       ; %bb.0: ; %entry891; GFX11-NEXT:    s_clause 0x1892; GFX11-NEXT:    s_load_b64 s[6:7], s[4:5], 0x34893; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24894; GFX11-NEXT:    s_waitcnt lgkmcnt(0)895; GFX11-NEXT:    s_load_b64 s[4:5], s[6:7], 0x0896; GFX11-NEXT:    s_load_b64 s[2:3], s[2:3], 0x0897; GFX11-NEXT:    s_waitcnt lgkmcnt(0)898; GFX11-NEXT:    v_pk_max_f16 v1, s5, s5899; GFX11-NEXT:    v_pk_max_f16 v2, s3, s3900; GFX11-NEXT:    v_pk_max_f16 v0, s4, s4901; GFX11-NEXT:    v_pk_max_f16 v3, s2, s2902; GFX11-NEXT:    s_mov_b32 s3, 0x31016000903; GFX11-NEXT:    s_mov_b32 s2, -1904; GFX11-NEXT:    v_pk_min_f16 v1, v2, v1905; GFX11-NEXT:    v_pk_min_f16 v0, v3, v0906; GFX11-NEXT:    s_clause 0x1907; GFX11-NEXT:    buffer_store_b16 v1, off, s[0:3], 0 offset:4908; GFX11-NEXT:    buffer_store_b32 v0, off, s[0:3], 0909; GFX11-NEXT:    s_endpgm910    ptr addrspace(1) %r,911    ptr addrspace(1) %a,912    ptr addrspace(1) %b) #0 {913entry:914  %a.val = load <3 x half>, ptr addrspace(1) %a915  %b.val = load <3 x half>, ptr addrspace(1) %b916  %r.val = call <3 x half> @llvm.minnum.v3f16(<3 x half> %a.val, <3 x half> %b.val)917  store <3 x half> %r.val, ptr addrspace(1) %r918  ret void919}920 921define amdgpu_kernel void @minnum_v4f16(922; SI-LABEL: minnum_v4f16:923; SI:       ; %bb.0: ; %entry924; SI-NEXT:    s_load_dwordx4 s[8:11], s[4:5], 0x9925; SI-NEXT:    s_mov_b32 s3, 0xf000926; SI-NEXT:    s_mov_b32 s2, -1927; SI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0xd928; SI-NEXT:    s_waitcnt lgkmcnt(0)929; SI-NEXT:    s_load_dwordx2 s[6:7], s[10:11], 0x0930; SI-NEXT:    s_mov_b32 s0, s8931; SI-NEXT:    s_mov_b32 s1, s9932; SI-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0933; SI-NEXT:    s_waitcnt lgkmcnt(0)934; SI-NEXT:    v_cvt_f32_f16_e32 v0, s6935; SI-NEXT:    s_lshr_b32 s6, s6, 16936; SI-NEXT:    v_cvt_f32_f16_e32 v2, s6937; SI-NEXT:    s_lshr_b32 s6, s7, 16938; SI-NEXT:    v_cvt_f32_f16_e32 v3, s6939; SI-NEXT:    v_cvt_f32_f16_e32 v4, s4940; SI-NEXT:    s_lshr_b32 s6, s5, 16941; SI-NEXT:    s_lshr_b32 s4, s4, 16942; SI-NEXT:    v_cvt_f32_f16_e32 v5, s6943; SI-NEXT:    v_cvt_f32_f16_e32 v7, s4944; SI-NEXT:    v_cvt_f32_f16_e32 v1, s7945; SI-NEXT:    v_cvt_f32_f16_e32 v6, s5946; SI-NEXT:    v_min_f32_e32 v3, v3, v5947; SI-NEXT:    v_min_f32_e32 v2, v2, v7948; SI-NEXT:    v_cvt_f16_f32_e32 v3, v3949; SI-NEXT:    v_min_f32_e32 v1, v1, v6950; SI-NEXT:    v_cvt_f16_f32_e32 v2, v2951; SI-NEXT:    v_min_f32_e32 v0, v0, v4952; SI-NEXT:    v_cvt_f16_f32_e32 v1, v1953; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0954; SI-NEXT:    v_lshlrev_b32_e32 v3, 16, v3955; SI-NEXT:    v_lshlrev_b32_e32 v2, 16, v2956; SI-NEXT:    v_or_b32_e32 v1, v1, v3957; SI-NEXT:    v_or_b32_e32 v0, v0, v2958; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0959; SI-NEXT:    s_endpgm960;961; VI-LABEL: minnum_v4f16:962; VI:       ; %bb.0: ; %entry963; VI-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x34964; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24965; VI-NEXT:    s_mov_b32 s7, 0xf000966; VI-NEXT:    s_mov_b32 s6, -1967; VI-NEXT:    s_waitcnt lgkmcnt(0)968; VI-NEXT:    s_load_dwordx2 s[8:9], s[8:9], 0x0969; VI-NEXT:    s_load_dwordx2 s[2:3], s[2:3], 0x0970; VI-NEXT:    s_mov_b32 s4, s0971; VI-NEXT:    s_mov_b32 s5, s1972; VI-NEXT:    s_waitcnt lgkmcnt(0)973; VI-NEXT:    v_max_f16_e64 v0, s9, s9974; VI-NEXT:    v_max_f16_e64 v1, s3, s3975; VI-NEXT:    s_lshr_b32 s0, s9, 16976; VI-NEXT:    v_min_f16_e32 v0, v1, v0977; VI-NEXT:    v_max_f16_e64 v1, s0, s0978; VI-NEXT:    s_lshr_b32 s0, s3, 16979; VI-NEXT:    v_max_f16_e64 v2, s0, s0980; VI-NEXT:    v_min_f16_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD981; VI-NEXT:    v_or_b32_e32 v1, v0, v1982; VI-NEXT:    v_max_f16_e64 v0, s8, s8983; VI-NEXT:    v_max_f16_e64 v2, s2, s2984; VI-NEXT:    s_lshr_b32 s0, s8, 16985; VI-NEXT:    v_min_f16_e32 v0, v2, v0986; VI-NEXT:    v_max_f16_e64 v2, s0, s0987; VI-NEXT:    s_lshr_b32 s0, s2, 16988; VI-NEXT:    v_max_f16_e64 v3, s0, s0989; VI-NEXT:    v_min_f16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD990; VI-NEXT:    v_or_b32_e32 v0, v0, v2991; VI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0992; VI-NEXT:    s_endpgm993;994; GFX9-LABEL: minnum_v4f16:995; GFX9:       ; %bb.0: ; %entry996; GFX9-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x34997; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24998; GFX9-NEXT:    s_mov_b32 s7, 0xf000999; GFX9-NEXT:    s_mov_b32 s6, -11000; GFX9-NEXT:    s_waitcnt lgkmcnt(0)1001; GFX9-NEXT:    s_load_dwordx2 s[10:11], s[8:9], 0x01002; GFX9-NEXT:    s_load_dwordx2 s[12:13], s[2:3], 0x01003; GFX9-NEXT:    s_mov_b32 s4, s01004; GFX9-NEXT:    s_mov_b32 s5, s11005; GFX9-NEXT:    s_waitcnt lgkmcnt(0)1006; GFX9-NEXT:    v_pk_max_f16 v0, s11, s111007; GFX9-NEXT:    v_pk_max_f16 v1, s13, s131008; GFX9-NEXT:    v_pk_max_f16 v2, s10, s101009; GFX9-NEXT:    v_pk_min_f16 v1, v1, v01010; GFX9-NEXT:    v_pk_max_f16 v0, s12, s121011; GFX9-NEXT:    v_pk_min_f16 v0, v0, v21012; GFX9-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 01013; GFX9-NEXT:    s_endpgm1014;1015; GFX10-LABEL: minnum_v4f16:1016; GFX10:       ; %bb.0: ; %entry1017; GFX10-NEXT:    s_clause 0x11018; GFX10-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x341019; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241020; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1021; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x01022; GFX10-NEXT:    s_load_dwordx2 s[8:9], s[2:3], 0x01023; GFX10-NEXT:    s_mov_b32 s3, 0x310160001024; GFX10-NEXT:    s_mov_b32 s2, -11025; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1026; GFX10-NEXT:    v_pk_max_f16 v0, s5, s51027; GFX10-NEXT:    v_pk_max_f16 v1, s9, s91028; GFX10-NEXT:    v_pk_max_f16 v2, s4, s41029; GFX10-NEXT:    v_pk_max_f16 v3, s8, s81030; GFX10-NEXT:    v_pk_min_f16 v1, v1, v01031; GFX10-NEXT:    v_pk_min_f16 v0, v3, v21032; GFX10-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 01033; GFX10-NEXT:    s_endpgm1034;1035; GFX11-LABEL: minnum_v4f16:1036; GFX11:       ; %bb.0: ; %entry1037; GFX11-NEXT:    s_clause 0x11038; GFX11-NEXT:    s_load_b64 s[6:7], s[4:5], 0x341039; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241040; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1041; GFX11-NEXT:    s_load_b64 s[4:5], s[6:7], 0x01042; GFX11-NEXT:    s_load_b64 s[2:3], s[2:3], 0x01043; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1044; GFX11-NEXT:    v_pk_max_f16 v0, s5, s51045; GFX11-NEXT:    v_pk_max_f16 v1, s3, s31046; GFX11-NEXT:    v_pk_max_f16 v2, s4, s41047; GFX11-NEXT:    v_pk_max_f16 v3, s2, s21048; GFX11-NEXT:    s_mov_b32 s3, 0x310160001049; GFX11-NEXT:    s_mov_b32 s2, -11050; GFX11-NEXT:    v_pk_min_f16 v1, v1, v01051; GFX11-NEXT:    v_pk_min_f16 v0, v3, v21052; GFX11-NEXT:    buffer_store_b64 v[0:1], off, s[0:3], 01053; GFX11-NEXT:    s_endpgm1054    ptr addrspace(1) %r,1055    ptr addrspace(1) %a,1056    ptr addrspace(1) %b) #0 {1057entry:1058  %a.val = load <4 x half>, ptr addrspace(1) %a1059  %b.val = load <4 x half>, ptr addrspace(1) %b1060  %r.val = call <4 x half> @llvm.minnum.v4f16(<4 x half> %a.val, <4 x half> %b.val)1061  store <4 x half> %r.val, ptr addrspace(1) %r1062  ret void1063}1064 1065define amdgpu_kernel void @fmin_v4f16_imm_a(1066; SI-LABEL: fmin_v4f16_imm_a:1067; SI:       ; %bb.0: ; %entry1068; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91069; SI-NEXT:    s_waitcnt lgkmcnt(0)1070; SI-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x01071; SI-NEXT:    s_mov_b32 s3, 0xf0001072; SI-NEXT:    s_mov_b32 s2, -11073; SI-NEXT:    s_waitcnt lgkmcnt(0)1074; SI-NEXT:    v_cvt_f32_f16_e32 v1, s51075; SI-NEXT:    s_lshr_b32 s5, s5, 161076; SI-NEXT:    v_cvt_f32_f16_e32 v0, s41077; SI-NEXT:    s_lshr_b32 s4, s4, 161078; SI-NEXT:    v_cvt_f32_f16_e32 v2, s51079; SI-NEXT:    v_cvt_f32_f16_e32 v3, s41080; SI-NEXT:    v_min_f32_e32 v1, 0x40400000, v11081; SI-NEXT:    v_min_f32_e32 v0, 0x41000000, v01082; SI-NEXT:    v_min_f32_e32 v2, 4.0, v21083; SI-NEXT:    v_cvt_f16_f32_e32 v2, v21084; SI-NEXT:    v_min_f32_e32 v3, 2.0, v31085; SI-NEXT:    v_cvt_f16_f32_e32 v1, v11086; SI-NEXT:    v_cvt_f16_f32_e32 v3, v31087; SI-NEXT:    v_cvt_f16_f32_e32 v0, v01088; SI-NEXT:    v_lshlrev_b32_e32 v2, 16, v21089; SI-NEXT:    v_or_b32_e32 v1, v1, v21090; SI-NEXT:    v_lshlrev_b32_e32 v2, 16, v31091; SI-NEXT:    v_or_b32_e32 v0, v0, v21092; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 01093; SI-NEXT:    s_endpgm1094;1095; VI-LABEL: fmin_v4f16_imm_a:1096; VI:       ; %bb.0: ; %entry1097; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241098; VI-NEXT:    v_mov_b32_e32 v0, 0x44001099; VI-NEXT:    s_mov_b32 s7, 0xf0001100; VI-NEXT:    s_mov_b32 s6, -11101; VI-NEXT:    s_waitcnt lgkmcnt(0)1102; VI-NEXT:    s_load_dwordx2 s[2:3], s[2:3], 0x01103; VI-NEXT:    s_mov_b32 s4, s01104; VI-NEXT:    s_mov_b32 s5, s11105; VI-NEXT:    s_waitcnt lgkmcnt(0)1106; VI-NEXT:    s_lshr_b32 s0, s3, 161107; VI-NEXT:    v_max_f16_e64 v1, s3, s31108; VI-NEXT:    v_max_f16_e64 v3, s0, s01109; VI-NEXT:    v_max_f16_e64 v2, s2, s21110; VI-NEXT:    v_min_f16_e32 v1, 0x4200, v11111; VI-NEXT:    v_min_f16_sdwa v0, v3, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1112; VI-NEXT:    s_lshr_b32 s0, s2, 161113; VI-NEXT:    v_or_b32_e32 v1, v1, v01114; VI-NEXT:    v_min_f16_e32 v0, 0x4800, v21115; VI-NEXT:    v_max_f16_e64 v2, s0, s01116; VI-NEXT:    v_mov_b32_e32 v3, 0x40001117; VI-NEXT:    v_min_f16_sdwa v2, v2, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1118; VI-NEXT:    v_or_b32_e32 v0, v0, v21119; VI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 01120; VI-NEXT:    s_endpgm1121;1122; GFX9-LABEL: fmin_v4f16_imm_a:1123; GFX9:       ; %bb.0: ; %entry1124; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241125; GFX9-NEXT:    s_mov_b32 s8, 0x440042001126; GFX9-NEXT:    s_mov_b32 s9, 0x400048001127; GFX9-NEXT:    s_mov_b32 s7, 0xf0001128; GFX9-NEXT:    s_mov_b32 s6, -11129; GFX9-NEXT:    s_waitcnt lgkmcnt(0)1130; GFX9-NEXT:    s_load_dwordx2 s[2:3], s[2:3], 0x01131; GFX9-NEXT:    s_mov_b32 s4, s01132; GFX9-NEXT:    s_mov_b32 s5, s11133; GFX9-NEXT:    s_waitcnt lgkmcnt(0)1134; GFX9-NEXT:    v_pk_max_f16 v0, s3, s31135; GFX9-NEXT:    v_pk_max_f16 v2, s2, s21136; GFX9-NEXT:    v_pk_min_f16 v1, v0, s81137; GFX9-NEXT:    v_pk_min_f16 v0, v2, s91138; GFX9-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 01139; GFX9-NEXT:    s_endpgm1140;1141; GFX10-LABEL: fmin_v4f16_imm_a:1142; GFX10:       ; %bb.0: ; %entry1143; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241144; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1145; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[2:3], 0x01146; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1147; GFX10-NEXT:    v_pk_max_f16 v0, s3, s31148; GFX10-NEXT:    v_pk_max_f16 v2, s2, s21149; GFX10-NEXT:    s_mov_b32 s3, 0x310160001150; GFX10-NEXT:    s_mov_b32 s2, -11151; GFX10-NEXT:    v_pk_min_f16 v1, 0x44004200, v01152; GFX10-NEXT:    v_pk_min_f16 v0, 0x40004800, v21153; GFX10-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 01154; GFX10-NEXT:    s_endpgm1155;1156; GFX11-LABEL: fmin_v4f16_imm_a:1157; GFX11:       ; %bb.0: ; %entry1158; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241159; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1160; GFX11-NEXT:    s_load_b64 s[2:3], s[2:3], 0x01161; GFX11-NEXT:    s_waitcnt lgkmcnt(0)1162; GFX11-NEXT:    v_pk_max_f16 v0, s3, s31163; GFX11-NEXT:    v_pk_max_f16 v2, s2, s21164; GFX11-NEXT:    s_mov_b32 s3, 0x310160001165; GFX11-NEXT:    s_mov_b32 s2, -11166; GFX11-NEXT:    v_pk_min_f16 v1, 0x44004200, v01167; GFX11-NEXT:    v_pk_min_f16 v0, 0x40004800, v21168; GFX11-NEXT:    buffer_store_b64 v[0:1], off, s[0:3], 01169; GFX11-NEXT:    s_endpgm1170    ptr addrspace(1) %r,1171    ptr addrspace(1) %b) #0 {1172entry:1173  %b.val = load <4 x half>, ptr addrspace(1) %b1174  %r.val = call <4 x half> @llvm.minnum.v4f16(<4 x half> <half 8.0, half 2.0, half 3.0, half 4.0>, <4 x half> %b.val)1175  store <4 x half> %r.val, ptr addrspace(1) %r1176  ret void1177}1178 1179attributes #0 = { "denormal-fp-math-f32"="preserve-sign,preserve-sign" }1180