998 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=tahiti -denormal-fp-math=preserve-sign -denormal-fp-math-f32=preserve-sign < %s | FileCheck --check-prefixes=SI %s3; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=fiji -denormal-fp-math=preserve-sign -denormal-fp-math-f32=preserve-sign -mattr=-flat-for-global < %s | FileCheck --check-prefixes=VI-FLUSH %s4; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=tahiti -denormal-fp-math=ieee -denormal-fp-math-f32=preserve-sign < %s | FileCheck --check-prefixes=SI %s5; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=fiji -denormal-fp-math=ieee -denormal-fp-math-f32=preserve-sign -mattr=-flat-for-global < %s | FileCheck --check-prefixes=VI-DENORM %s6; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1010 -denormal-fp-math=preserve-sign -denormal-fp-math-f32=preserve-sign -mattr=-flat-for-global < %s | FileCheck --check-prefixes=GFX10-FLUSH %s7; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1010 -denormal-fp-math=ieee -denormal-fp-math-f32=preserve-sign -mattr=-flat-for-global < %s | FileCheck --check-prefixes=GFX10-DENORM %s8; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -denormal-fp-math=preserve-sign -denormal-fp-math-f32=preserve-sign -mattr=-flat-for-global < %s | FileCheck --check-prefixes=GFX11-FLUSH,GFX11-FLUSH-TRUE16 %s9; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -denormal-fp-math=preserve-sign -denormal-fp-math-f32=preserve-sign -mattr=-flat-for-global < %s | FileCheck --check-prefixes=GFX11-FLUSH,GFX11-FLUSH-FAKE16 %s10; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -denormal-fp-math=ieee -denormal-fp-math-f32=preserve-sign -mattr=-flat-for-global < %s | FileCheck --check-prefixes=GFX11-DENORM,GFX11-DENORM-TRUE16 %s11; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -denormal-fp-math=ieee -denormal-fp-math-f32=preserve-sign -mattr=-flat-for-global < %s | FileCheck --check-prefixes=GFX11-DENORM,GFX11-DENORM-FAKE16 %s12 13declare half @llvm.fmuladd.f16(half %a, half %b, half %c)14declare <2 x half> @llvm.fmuladd.v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c)15 16define amdgpu_kernel void @fmuladd_f16(17; SI-LABEL: fmuladd_f16:18; SI: ; %bb.0:19; SI-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x920; SI-NEXT: s_mov_b32 s11, 0xf00021; SI-NEXT: s_mov_b32 s10, -122; SI-NEXT: s_mov_b32 s14, s1023; SI-NEXT: s_mov_b32 s15, s1124; SI-NEXT: s_waitcnt lgkmcnt(0)25; SI-NEXT: s_mov_b32 s12, s226; SI-NEXT: s_mov_b32 s13, s327; SI-NEXT: s_mov_b32 s16, s428; SI-NEXT: s_mov_b32 s17, s529; SI-NEXT: s_mov_b32 s18, s1030; SI-NEXT: s_mov_b32 s19, s1131; SI-NEXT: s_mov_b32 s4, s632; SI-NEXT: s_mov_b32 s5, s733; SI-NEXT: s_mov_b32 s6, s1034; SI-NEXT: s_mov_b32 s7, s1135; SI-NEXT: buffer_load_ushort v0, off, s[12:15], 036; SI-NEXT: buffer_load_ushort v1, off, s[16:19], 037; SI-NEXT: buffer_load_ushort v2, off, s[4:7], 038; SI-NEXT: s_mov_b32 s8, s039; SI-NEXT: s_mov_b32 s9, s140; SI-NEXT: s_waitcnt vmcnt(2)41; SI-NEXT: v_cvt_f32_f16_e32 v0, v042; SI-NEXT: s_waitcnt vmcnt(1)43; SI-NEXT: v_cvt_f32_f16_e32 v1, v144; SI-NEXT: s_waitcnt vmcnt(0)45; SI-NEXT: v_cvt_f32_f16_e32 v2, v246; SI-NEXT: v_mac_f32_e32 v2, v0, v147; SI-NEXT: v_cvt_f16_f32_e32 v0, v248; SI-NEXT: buffer_store_short v0, off, s[8:11], 049; SI-NEXT: s_endpgm50;51; VI-FLUSH-LABEL: fmuladd_f16:52; VI-FLUSH: ; %bb.0:53; VI-FLUSH-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x2454; VI-FLUSH-NEXT: s_mov_b32 s11, 0xf00055; VI-FLUSH-NEXT: s_mov_b32 s10, -156; VI-FLUSH-NEXT: s_mov_b32 s14, s1057; VI-FLUSH-NEXT: s_mov_b32 s15, s1158; VI-FLUSH-NEXT: s_waitcnt lgkmcnt(0)59; VI-FLUSH-NEXT: s_mov_b32 s12, s260; VI-FLUSH-NEXT: s_mov_b32 s13, s361; VI-FLUSH-NEXT: s_mov_b32 s16, s462; VI-FLUSH-NEXT: s_mov_b32 s17, s563; VI-FLUSH-NEXT: s_mov_b32 s18, s1064; VI-FLUSH-NEXT: s_mov_b32 s19, s1165; VI-FLUSH-NEXT: s_mov_b32 s4, s666; VI-FLUSH-NEXT: s_mov_b32 s5, s767; VI-FLUSH-NEXT: s_mov_b32 s6, s1068; VI-FLUSH-NEXT: s_mov_b32 s7, s1169; VI-FLUSH-NEXT: buffer_load_ushort v0, off, s[12:15], 070; VI-FLUSH-NEXT: buffer_load_ushort v1, off, s[16:19], 071; VI-FLUSH-NEXT: buffer_load_ushort v2, off, s[4:7], 072; VI-FLUSH-NEXT: s_mov_b32 s8, s073; VI-FLUSH-NEXT: s_mov_b32 s9, s174; VI-FLUSH-NEXT: s_waitcnt vmcnt(0)75; VI-FLUSH-NEXT: v_mac_f16_e32 v2, v0, v176; VI-FLUSH-NEXT: buffer_store_short v2, off, s[8:11], 077; VI-FLUSH-NEXT: s_endpgm78;79; VI-DENORM-LABEL: fmuladd_f16:80; VI-DENORM: ; %bb.0:81; VI-DENORM-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x2482; VI-DENORM-NEXT: s_mov_b32 s11, 0xf00083; VI-DENORM-NEXT: s_mov_b32 s10, -184; VI-DENORM-NEXT: s_mov_b32 s14, s1085; VI-DENORM-NEXT: s_mov_b32 s15, s1186; VI-DENORM-NEXT: s_waitcnt lgkmcnt(0)87; VI-DENORM-NEXT: s_mov_b32 s12, s288; VI-DENORM-NEXT: s_mov_b32 s13, s389; VI-DENORM-NEXT: s_mov_b32 s16, s490; VI-DENORM-NEXT: s_mov_b32 s17, s591; VI-DENORM-NEXT: s_mov_b32 s18, s1092; VI-DENORM-NEXT: s_mov_b32 s19, s1193; VI-DENORM-NEXT: s_mov_b32 s4, s694; VI-DENORM-NEXT: s_mov_b32 s5, s795; VI-DENORM-NEXT: s_mov_b32 s6, s1096; VI-DENORM-NEXT: s_mov_b32 s7, s1197; VI-DENORM-NEXT: buffer_load_ushort v0, off, s[12:15], 098; VI-DENORM-NEXT: buffer_load_ushort v1, off, s[16:19], 099; VI-DENORM-NEXT: buffer_load_ushort v2, off, s[4:7], 0100; VI-DENORM-NEXT: s_mov_b32 s8, s0101; VI-DENORM-NEXT: s_mov_b32 s9, s1102; VI-DENORM-NEXT: s_waitcnt vmcnt(0)103; VI-DENORM-NEXT: v_fma_f16 v0, v0, v1, v2104; VI-DENORM-NEXT: buffer_store_short v0, off, s[8:11], 0105; VI-DENORM-NEXT: s_endpgm106;107; GFX10-FLUSH-LABEL: fmuladd_f16:108; GFX10-FLUSH: ; %bb.0:109; GFX10-FLUSH-NEXT: s_load_dwordx8 s[8:15], s[4:5], 0x24110; GFX10-FLUSH-NEXT: s_mov_b32 s2, -1111; GFX10-FLUSH-NEXT: s_mov_b32 s3, 0x31016000112; GFX10-FLUSH-NEXT: s_mov_b32 s6, s2113; GFX10-FLUSH-NEXT: s_mov_b32 s7, s3114; GFX10-FLUSH-NEXT: s_mov_b32 s18, s2115; GFX10-FLUSH-NEXT: s_mov_b32 s19, s3116; GFX10-FLUSH-NEXT: s_waitcnt lgkmcnt(0)117; GFX10-FLUSH-NEXT: s_mov_b32 s4, s10118; GFX10-FLUSH-NEXT: s_mov_b32 s5, s11119; GFX10-FLUSH-NEXT: s_mov_b32 s16, s12120; GFX10-FLUSH-NEXT: s_mov_b32 s17, s13121; GFX10-FLUSH-NEXT: buffer_load_ushort v0, off, s[4:7], 0122; GFX10-FLUSH-NEXT: buffer_load_ushort v1, off, s[16:19], 0123; GFX10-FLUSH-NEXT: s_mov_b32 s12, s14124; GFX10-FLUSH-NEXT: s_mov_b32 s13, s15125; GFX10-FLUSH-NEXT: s_mov_b32 s14, s2126; GFX10-FLUSH-NEXT: s_mov_b32 s15, s3127; GFX10-FLUSH-NEXT: s_mov_b32 s0, s8128; GFX10-FLUSH-NEXT: buffer_load_ushort v2, off, s[12:15], 0129; GFX10-FLUSH-NEXT: s_mov_b32 s1, s9130; GFX10-FLUSH-NEXT: s_waitcnt vmcnt(1)131; GFX10-FLUSH-NEXT: v_mul_f16_e32 v0, v0, v1132; GFX10-FLUSH-NEXT: s_waitcnt vmcnt(0)133; GFX10-FLUSH-NEXT: v_add_f16_e32 v0, v0, v2134; GFX10-FLUSH-NEXT: buffer_store_short v0, off, s[0:3], 0135; GFX10-FLUSH-NEXT: s_endpgm136;137; GFX10-DENORM-LABEL: fmuladd_f16:138; GFX10-DENORM: ; %bb.0:139; GFX10-DENORM-NEXT: s_load_dwordx8 s[8:15], s[4:5], 0x24140; GFX10-DENORM-NEXT: s_mov_b32 s2, -1141; GFX10-DENORM-NEXT: s_mov_b32 s3, 0x31016000142; GFX10-DENORM-NEXT: s_mov_b32 s6, s2143; GFX10-DENORM-NEXT: s_mov_b32 s7, s3144; GFX10-DENORM-NEXT: s_mov_b32 s18, s2145; GFX10-DENORM-NEXT: s_mov_b32 s19, s3146; GFX10-DENORM-NEXT: s_mov_b32 s22, s2147; GFX10-DENORM-NEXT: s_mov_b32 s23, s3148; GFX10-DENORM-NEXT: s_waitcnt lgkmcnt(0)149; GFX10-DENORM-NEXT: s_mov_b32 s4, s10150; GFX10-DENORM-NEXT: s_mov_b32 s5, s11151; GFX10-DENORM-NEXT: s_mov_b32 s16, s12152; GFX10-DENORM-NEXT: s_mov_b32 s17, s13153; GFX10-DENORM-NEXT: s_mov_b32 s20, s14154; GFX10-DENORM-NEXT: s_mov_b32 s21, s15155; GFX10-DENORM-NEXT: buffer_load_ushort v0, off, s[4:7], 0156; GFX10-DENORM-NEXT: buffer_load_ushort v1, off, s[16:19], 0157; GFX10-DENORM-NEXT: buffer_load_ushort v2, off, s[20:23], 0158; GFX10-DENORM-NEXT: s_mov_b32 s0, s8159; GFX10-DENORM-NEXT: s_mov_b32 s1, s9160; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0)161; GFX10-DENORM-NEXT: v_fmac_f16_e32 v2, v0, v1162; GFX10-DENORM-NEXT: buffer_store_short v2, off, s[0:3], 0163; GFX10-DENORM-NEXT: s_endpgm164;165; GFX11-FLUSH-TRUE16-LABEL: fmuladd_f16:166; GFX11-FLUSH-TRUE16: ; %bb.0:167; GFX11-FLUSH-TRUE16-NEXT: s_load_b256 s[0:7], s[4:5], 0x24168; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s10, -1169; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s11, 0x31016000170; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s14, s10171; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s15, s11172; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s18, s10173; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s19, s11174; GFX11-FLUSH-TRUE16-NEXT: s_waitcnt lgkmcnt(0)175; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s12, s2176; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s13, s3177; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s16, s4178; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s17, s5179; GFX11-FLUSH-TRUE16-NEXT: buffer_load_u16 v0, off, s[12:15], 0180; GFX11-FLUSH-TRUE16-NEXT: buffer_load_u16 v1, off, s[16:19], 0181; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s12, s6182; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s13, s7183; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s8, s0184; GFX11-FLUSH-TRUE16-NEXT: buffer_load_u16 v2, off, s[12:15], 0185; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s9, s1186; GFX11-FLUSH-TRUE16-NEXT: s_waitcnt vmcnt(1)187; GFX11-FLUSH-TRUE16-NEXT: v_mul_f16_e32 v0.l, v0.l, v1.l188; GFX11-FLUSH-TRUE16-NEXT: s_waitcnt vmcnt(0)189; GFX11-FLUSH-TRUE16-NEXT: v_mov_b16_e32 v1.l, v2.l190; GFX11-FLUSH-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)191; GFX11-FLUSH-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v1.l192; GFX11-FLUSH-TRUE16-NEXT: buffer_store_b16 v0, off, s[8:11], 0193; GFX11-FLUSH-TRUE16-NEXT: s_endpgm194;195; GFX11-FLUSH-FAKE16-LABEL: fmuladd_f16:196; GFX11-FLUSH-FAKE16: ; %bb.0:197; GFX11-FLUSH-FAKE16-NEXT: s_load_b256 s[0:7], s[4:5], 0x24198; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s10, -1199; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s11, 0x31016000200; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s14, s10201; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s15, s11202; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s18, s10203; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s19, s11204; GFX11-FLUSH-FAKE16-NEXT: s_waitcnt lgkmcnt(0)205; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s12, s2206; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s13, s3207; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s16, s4208; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s17, s5209; GFX11-FLUSH-FAKE16-NEXT: buffer_load_u16 v0, off, s[12:15], 0210; GFX11-FLUSH-FAKE16-NEXT: buffer_load_u16 v1, off, s[16:19], 0211; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s4, s6212; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s5, s7213; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s6, s10214; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s7, s11215; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s8, s0216; GFX11-FLUSH-FAKE16-NEXT: buffer_load_u16 v2, off, s[4:7], 0217; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s9, s1218; GFX11-FLUSH-FAKE16-NEXT: s_waitcnt vmcnt(1)219; GFX11-FLUSH-FAKE16-NEXT: v_mul_f16_e32 v0, v0, v1220; GFX11-FLUSH-FAKE16-NEXT: s_waitcnt vmcnt(0)221; GFX11-FLUSH-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)222; GFX11-FLUSH-FAKE16-NEXT: v_add_f16_e32 v0, v0, v2223; GFX11-FLUSH-FAKE16-NEXT: buffer_store_b16 v0, off, s[8:11], 0224; GFX11-FLUSH-FAKE16-NEXT: s_endpgm225;226; GFX11-DENORM-TRUE16-LABEL: fmuladd_f16:227; GFX11-DENORM-TRUE16: ; %bb.0:228; GFX11-DENORM-TRUE16-NEXT: s_load_b256 s[0:7], s[4:5], 0x24229; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s10, -1230; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s11, 0x31016000231; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s14, s10232; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s15, s11233; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s18, s10234; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s19, s11235; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s22, s10236; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s23, s11237; GFX11-DENORM-TRUE16-NEXT: s_waitcnt lgkmcnt(0)238; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s12, s2239; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s13, s3240; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s16, s4241; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s17, s5242; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s20, s6243; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s21, s7244; GFX11-DENORM-TRUE16-NEXT: buffer_load_u16 v0, off, s[12:15], 0245; GFX11-DENORM-TRUE16-NEXT: buffer_load_u16 v1, off, s[16:19], 0246; GFX11-DENORM-TRUE16-NEXT: buffer_load_u16 v2, off, s[20:23], 0247; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s8, s0248; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s9, s1249; GFX11-DENORM-TRUE16-NEXT: s_waitcnt vmcnt(0)250; GFX11-DENORM-TRUE16-NEXT: v_fmac_f16_e32 v2.l, v0.l, v1.l251; GFX11-DENORM-TRUE16-NEXT: buffer_store_b16 v2, off, s[8:11], 0252; GFX11-DENORM-TRUE16-NEXT: s_endpgm253;254; GFX11-DENORM-FAKE16-LABEL: fmuladd_f16:255; GFX11-DENORM-FAKE16: ; %bb.0:256; GFX11-DENORM-FAKE16-NEXT: s_load_b256 s[0:7], s[4:5], 0x24257; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s10, -1258; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s11, 0x31016000259; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s14, s10260; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s15, s11261; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s18, s10262; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s19, s11263; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s22, s10264; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s23, s11265; GFX11-DENORM-FAKE16-NEXT: s_waitcnt lgkmcnt(0)266; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s12, s2267; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s13, s3268; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s16, s4269; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s17, s5270; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s20, s6271; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s21, s7272; GFX11-DENORM-FAKE16-NEXT: buffer_load_u16 v0, off, s[12:15], 0273; GFX11-DENORM-FAKE16-NEXT: buffer_load_u16 v1, off, s[16:19], 0274; GFX11-DENORM-FAKE16-NEXT: buffer_load_u16 v2, off, s[20:23], 0275; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s8, s0276; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s9, s1277; GFX11-DENORM-FAKE16-NEXT: s_waitcnt vmcnt(0)278; GFX11-DENORM-FAKE16-NEXT: v_fmac_f16_e32 v2, v0, v1279; GFX11-DENORM-FAKE16-NEXT: buffer_store_b16 v2, off, s[8:11], 0280; GFX11-DENORM-FAKE16-NEXT: s_endpgm281 ptr addrspace(1) %r,282 ptr addrspace(1) %a,283 ptr addrspace(1) %b,284 ptr addrspace(1) %c) {285 %a.val = load half, ptr addrspace(1) %a286 %b.val = load half, ptr addrspace(1) %b287 %c.val = load half, ptr addrspace(1) %c288 %r.val = call half @llvm.fmuladd.f16(half %a.val, half %b.val, half %c.val)289 store half %r.val, ptr addrspace(1) %r290 ret void291}292 293define amdgpu_kernel void @fmuladd_f16_imm_a(294; SI-LABEL: fmuladd_f16_imm_a:295; SI: ; %bb.0:296; SI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9297; SI-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0xd298; SI-NEXT: s_mov_b32 s7, 0xf000299; SI-NEXT: s_mov_b32 s6, -1300; SI-NEXT: s_mov_b32 s14, s6301; SI-NEXT: s_waitcnt lgkmcnt(0)302; SI-NEXT: s_mov_b32 s12, s2303; SI-NEXT: s_mov_b32 s13, s3304; SI-NEXT: s_mov_b32 s15, s7305; SI-NEXT: s_mov_b32 s10, s6306; SI-NEXT: s_mov_b32 s11, s7307; SI-NEXT: buffer_load_ushort v0, off, s[12:15], 0 glc308; SI-NEXT: s_waitcnt vmcnt(0)309; SI-NEXT: buffer_load_ushort v1, off, s[8:11], 0 glc310; SI-NEXT: s_waitcnt vmcnt(0)311; SI-NEXT: s_mov_b32 s4, s0312; SI-NEXT: s_mov_b32 s5, s1313; SI-NEXT: v_cvt_f32_f16_e32 v0, v0314; SI-NEXT: v_cvt_f32_f16_e32 v1, v1315; SI-NEXT: v_madmk_f32 v0, v0, 0x40400000, v1316; SI-NEXT: v_cvt_f16_f32_e32 v0, v0317; SI-NEXT: buffer_store_short v0, off, s[4:7], 0318; SI-NEXT: s_endpgm319;320; VI-FLUSH-LABEL: fmuladd_f16_imm_a:321; VI-FLUSH: ; %bb.0:322; VI-FLUSH-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24323; VI-FLUSH-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x34324; VI-FLUSH-NEXT: s_mov_b32 s7, 0xf000325; VI-FLUSH-NEXT: s_mov_b32 s6, -1326; VI-FLUSH-NEXT: s_mov_b32 s14, s6327; VI-FLUSH-NEXT: s_waitcnt lgkmcnt(0)328; VI-FLUSH-NEXT: s_mov_b32 s12, s2329; VI-FLUSH-NEXT: s_mov_b32 s13, s3330; VI-FLUSH-NEXT: s_mov_b32 s15, s7331; VI-FLUSH-NEXT: s_mov_b32 s10, s6332; VI-FLUSH-NEXT: s_mov_b32 s11, s7333; VI-FLUSH-NEXT: buffer_load_ushort v0, off, s[12:15], 0 glc334; VI-FLUSH-NEXT: s_waitcnt vmcnt(0)335; VI-FLUSH-NEXT: buffer_load_ushort v1, off, s[8:11], 0 glc336; VI-FLUSH-NEXT: s_waitcnt vmcnt(0)337; VI-FLUSH-NEXT: s_mov_b32 s4, s0338; VI-FLUSH-NEXT: s_mov_b32 s5, s1339; VI-FLUSH-NEXT: v_madmk_f16 v0, v0, 0x4200, v1340; VI-FLUSH-NEXT: buffer_store_short v0, off, s[4:7], 0341; VI-FLUSH-NEXT: s_endpgm342;343; VI-DENORM-LABEL: fmuladd_f16_imm_a:344; VI-DENORM: ; %bb.0:345; VI-DENORM-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24346; VI-DENORM-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x34347; VI-DENORM-NEXT: s_mov_b32 s7, 0xf000348; VI-DENORM-NEXT: s_mov_b32 s6, -1349; VI-DENORM-NEXT: s_mov_b32 s14, s6350; VI-DENORM-NEXT: s_waitcnt lgkmcnt(0)351; VI-DENORM-NEXT: s_mov_b32 s12, s2352; VI-DENORM-NEXT: s_mov_b32 s13, s3353; VI-DENORM-NEXT: s_mov_b32 s15, s7354; VI-DENORM-NEXT: s_mov_b32 s10, s6355; VI-DENORM-NEXT: s_mov_b32 s11, s7356; VI-DENORM-NEXT: buffer_load_ushort v0, off, s[12:15], 0 glc357; VI-DENORM-NEXT: s_waitcnt vmcnt(0)358; VI-DENORM-NEXT: buffer_load_ushort v1, off, s[8:11], 0 glc359; VI-DENORM-NEXT: s_waitcnt vmcnt(0)360; VI-DENORM-NEXT: s_mov_b32 s4, s0361; VI-DENORM-NEXT: s_movk_i32 s0, 0x4200362; VI-DENORM-NEXT: s_mov_b32 s5, s1363; VI-DENORM-NEXT: v_fma_f16 v0, v0, s0, v1364; VI-DENORM-NEXT: buffer_store_short v0, off, s[4:7], 0365; VI-DENORM-NEXT: s_endpgm366;367; GFX10-FLUSH-LABEL: fmuladd_f16_imm_a:368; GFX10-FLUSH: ; %bb.0:369; GFX10-FLUSH-NEXT: s_clause 0x1370; GFX10-FLUSH-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24371; GFX10-FLUSH-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x34372; GFX10-FLUSH-NEXT: s_mov_b32 s6, -1373; GFX10-FLUSH-NEXT: s_mov_b32 s7, 0x31016000374; GFX10-FLUSH-NEXT: s_mov_b32 s14, s6375; GFX10-FLUSH-NEXT: s_mov_b32 s15, s7376; GFX10-FLUSH-NEXT: s_mov_b32 s10, s6377; GFX10-FLUSH-NEXT: s_mov_b32 s11, s7378; GFX10-FLUSH-NEXT: s_waitcnt lgkmcnt(0)379; GFX10-FLUSH-NEXT: s_mov_b32 s12, s2380; GFX10-FLUSH-NEXT: s_mov_b32 s13, s3381; GFX10-FLUSH-NEXT: s_mov_b32 s4, s0382; GFX10-FLUSH-NEXT: buffer_load_ushort v0, off, s[12:15], 0 glc dlc383; GFX10-FLUSH-NEXT: s_waitcnt vmcnt(0)384; GFX10-FLUSH-NEXT: buffer_load_ushort v1, off, s[8:11], 0 glc dlc385; GFX10-FLUSH-NEXT: s_waitcnt vmcnt(0)386; GFX10-FLUSH-NEXT: s_mov_b32 s5, s1387; GFX10-FLUSH-NEXT: v_mul_f16_e32 v0, 0x4200, v0388; GFX10-FLUSH-NEXT: v_add_f16_e32 v0, v0, v1389; GFX10-FLUSH-NEXT: buffer_store_short v0, off, s[4:7], 0390; GFX10-FLUSH-NEXT: s_endpgm391;392; GFX10-DENORM-LABEL: fmuladd_f16_imm_a:393; GFX10-DENORM: ; %bb.0:394; GFX10-DENORM-NEXT: s_clause 0x1395; GFX10-DENORM-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24396; GFX10-DENORM-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x34397; GFX10-DENORM-NEXT: s_mov_b32 s6, -1398; GFX10-DENORM-NEXT: s_mov_b32 s7, 0x31016000399; GFX10-DENORM-NEXT: s_mov_b32 s14, s6400; GFX10-DENORM-NEXT: s_mov_b32 s15, s7401; GFX10-DENORM-NEXT: s_mov_b32 s10, s6402; GFX10-DENORM-NEXT: s_mov_b32 s11, s7403; GFX10-DENORM-NEXT: s_waitcnt lgkmcnt(0)404; GFX10-DENORM-NEXT: s_mov_b32 s12, s2405; GFX10-DENORM-NEXT: s_mov_b32 s13, s3406; GFX10-DENORM-NEXT: buffer_load_ushort v0, off, s[12:15], 0 glc dlc407; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0)408; GFX10-DENORM-NEXT: buffer_load_ushort v1, off, s[8:11], 0 glc dlc409; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0)410; GFX10-DENORM-NEXT: s_mov_b32 s4, s0411; GFX10-DENORM-NEXT: s_mov_b32 s5, s1412; GFX10-DENORM-NEXT: v_fmamk_f16 v0, v0, 0x4200, v1413; GFX10-DENORM-NEXT: buffer_store_short v0, off, s[4:7], 0414; GFX10-DENORM-NEXT: s_endpgm415;416; GFX11-FLUSH-TRUE16-LABEL: fmuladd_f16_imm_a:417; GFX11-FLUSH-TRUE16: ; %bb.0:418; GFX11-FLUSH-TRUE16-NEXT: s_clause 0x1419; GFX11-FLUSH-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24420; GFX11-FLUSH-TRUE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x34421; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s10, -1422; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s11, 0x31016000423; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s14, s10424; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s15, s11425; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s6, s10426; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s7, s11427; GFX11-FLUSH-TRUE16-NEXT: s_waitcnt lgkmcnt(0)428; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s12, s2429; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s13, s3430; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s8, s0431; GFX11-FLUSH-TRUE16-NEXT: buffer_load_u16 v0, off, s[12:15], 0 glc dlc432; GFX11-FLUSH-TRUE16-NEXT: s_waitcnt vmcnt(0)433; GFX11-FLUSH-TRUE16-NEXT: buffer_load_u16 v1, off, s[4:7], 0 glc dlc434; GFX11-FLUSH-TRUE16-NEXT: s_waitcnt vmcnt(0)435; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s9, s1436; GFX11-FLUSH-TRUE16-NEXT: v_mul_f16_e32 v0.l, 0x4200, v0.l437; GFX11-FLUSH-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)438; GFX11-FLUSH-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v1.l439; GFX11-FLUSH-TRUE16-NEXT: buffer_store_b16 v0, off, s[8:11], 0440; GFX11-FLUSH-TRUE16-NEXT: s_endpgm441;442; GFX11-FLUSH-FAKE16-LABEL: fmuladd_f16_imm_a:443; GFX11-FLUSH-FAKE16: ; %bb.0:444; GFX11-FLUSH-FAKE16-NEXT: s_clause 0x1445; GFX11-FLUSH-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24446; GFX11-FLUSH-FAKE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x34447; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s10, -1448; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s11, 0x31016000449; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s14, s10450; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s15, s11451; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s6, s10452; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s7, s11453; GFX11-FLUSH-FAKE16-NEXT: s_waitcnt lgkmcnt(0)454; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s12, s2455; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s13, s3456; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s8, s0457; GFX11-FLUSH-FAKE16-NEXT: buffer_load_u16 v0, off, s[12:15], 0 glc dlc458; GFX11-FLUSH-FAKE16-NEXT: s_waitcnt vmcnt(0)459; GFX11-FLUSH-FAKE16-NEXT: buffer_load_u16 v1, off, s[4:7], 0 glc dlc460; GFX11-FLUSH-FAKE16-NEXT: s_waitcnt vmcnt(0)461; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s9, s1462; GFX11-FLUSH-FAKE16-NEXT: v_mul_f16_e32 v0, 0x4200, v0463; GFX11-FLUSH-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)464; GFX11-FLUSH-FAKE16-NEXT: v_add_f16_e32 v0, v0, v1465; GFX11-FLUSH-FAKE16-NEXT: buffer_store_b16 v0, off, s[8:11], 0466; GFX11-FLUSH-FAKE16-NEXT: s_endpgm467;468; GFX11-DENORM-TRUE16-LABEL: fmuladd_f16_imm_a:469; GFX11-DENORM-TRUE16: ; %bb.0:470; GFX11-DENORM-TRUE16-NEXT: s_clause 0x1471; GFX11-DENORM-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24472; GFX11-DENORM-TRUE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x34473; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s10, -1474; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s11, 0x31016000475; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s14, s10476; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s15, s11477; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s6, s10478; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s7, s11479; GFX11-DENORM-TRUE16-NEXT: s_waitcnt lgkmcnt(0)480; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s12, s2481; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s13, s3482; GFX11-DENORM-TRUE16-NEXT: buffer_load_u16 v0, off, s[12:15], 0 glc dlc483; GFX11-DENORM-TRUE16-NEXT: s_waitcnt vmcnt(0)484; GFX11-DENORM-TRUE16-NEXT: buffer_load_u16 v1, off, s[4:7], 0 glc dlc485; GFX11-DENORM-TRUE16-NEXT: s_waitcnt vmcnt(0)486; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s8, s0487; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s9, s1488; GFX11-DENORM-TRUE16-NEXT: v_fmac_f16_e32 v1.l, 0x4200, v0.l489; GFX11-DENORM-TRUE16-NEXT: buffer_store_b16 v1, off, s[8:11], 0490; GFX11-DENORM-TRUE16-NEXT: s_endpgm491;492; GFX11-DENORM-FAKE16-LABEL: fmuladd_f16_imm_a:493; GFX11-DENORM-FAKE16: ; %bb.0:494; GFX11-DENORM-FAKE16-NEXT: s_clause 0x1495; GFX11-DENORM-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24496; GFX11-DENORM-FAKE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x34497; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s10, -1498; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s11, 0x31016000499; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s14, s10500; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s15, s11501; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s6, s10502; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s7, s11503; GFX11-DENORM-FAKE16-NEXT: s_waitcnt lgkmcnt(0)504; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s12, s2505; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s13, s3506; GFX11-DENORM-FAKE16-NEXT: buffer_load_u16 v0, off, s[12:15], 0 glc dlc507; GFX11-DENORM-FAKE16-NEXT: s_waitcnt vmcnt(0)508; GFX11-DENORM-FAKE16-NEXT: buffer_load_u16 v1, off, s[4:7], 0 glc dlc509; GFX11-DENORM-FAKE16-NEXT: s_waitcnt vmcnt(0)510; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s8, s0511; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s9, s1512; GFX11-DENORM-FAKE16-NEXT: v_fmac_f16_e32 v1, 0x4200, v0513; GFX11-DENORM-FAKE16-NEXT: buffer_store_b16 v1, off, s[8:11], 0514; GFX11-DENORM-FAKE16-NEXT: s_endpgm515 ptr addrspace(1) %r,516 ptr addrspace(1) %b,517 ptr addrspace(1) %c) {518 %b.val = load volatile half, ptr addrspace(1) %b519 %c.val = load volatile half, ptr addrspace(1) %c520 %r.val = call half @llvm.fmuladd.f16(half 3.0, half %b.val, half %c.val)521 store half %r.val, ptr addrspace(1) %r522 ret void523}524 525define amdgpu_kernel void @fmuladd_f16_imm_b(526; SI-LABEL: fmuladd_f16_imm_b:527; SI: ; %bb.0:528; SI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9529; SI-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0xd530; SI-NEXT: s_mov_b32 s7, 0xf000531; SI-NEXT: s_mov_b32 s6, -1532; SI-NEXT: s_mov_b32 s14, s6533; SI-NEXT: s_waitcnt lgkmcnt(0)534; SI-NEXT: s_mov_b32 s12, s2535; SI-NEXT: s_mov_b32 s13, s3536; SI-NEXT: s_mov_b32 s15, s7537; SI-NEXT: s_mov_b32 s10, s6538; SI-NEXT: s_mov_b32 s11, s7539; SI-NEXT: buffer_load_ushort v0, off, s[12:15], 0 glc540; SI-NEXT: s_waitcnt vmcnt(0)541; SI-NEXT: buffer_load_ushort v1, off, s[8:11], 0 glc542; SI-NEXT: s_waitcnt vmcnt(0)543; SI-NEXT: s_mov_b32 s4, s0544; SI-NEXT: s_mov_b32 s5, s1545; SI-NEXT: v_cvt_f32_f16_e32 v0, v0546; SI-NEXT: v_cvt_f32_f16_e32 v1, v1547; SI-NEXT: v_madmk_f32 v0, v0, 0x40400000, v1548; SI-NEXT: v_cvt_f16_f32_e32 v0, v0549; SI-NEXT: buffer_store_short v0, off, s[4:7], 0550; SI-NEXT: s_endpgm551;552; VI-FLUSH-LABEL: fmuladd_f16_imm_b:553; VI-FLUSH: ; %bb.0:554; VI-FLUSH-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24555; VI-FLUSH-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x34556; VI-FLUSH-NEXT: s_mov_b32 s7, 0xf000557; VI-FLUSH-NEXT: s_mov_b32 s6, -1558; VI-FLUSH-NEXT: s_mov_b32 s14, s6559; VI-FLUSH-NEXT: s_waitcnt lgkmcnt(0)560; VI-FLUSH-NEXT: s_mov_b32 s12, s2561; VI-FLUSH-NEXT: s_mov_b32 s13, s3562; VI-FLUSH-NEXT: s_mov_b32 s15, s7563; VI-FLUSH-NEXT: s_mov_b32 s10, s6564; VI-FLUSH-NEXT: s_mov_b32 s11, s7565; VI-FLUSH-NEXT: buffer_load_ushort v0, off, s[12:15], 0 glc566; VI-FLUSH-NEXT: s_waitcnt vmcnt(0)567; VI-FLUSH-NEXT: buffer_load_ushort v1, off, s[8:11], 0 glc568; VI-FLUSH-NEXT: s_waitcnt vmcnt(0)569; VI-FLUSH-NEXT: s_mov_b32 s4, s0570; VI-FLUSH-NEXT: s_mov_b32 s5, s1571; VI-FLUSH-NEXT: v_madmk_f16 v0, v0, 0x4200, v1572; VI-FLUSH-NEXT: buffer_store_short v0, off, s[4:7], 0573; VI-FLUSH-NEXT: s_endpgm574;575; VI-DENORM-LABEL: fmuladd_f16_imm_b:576; VI-DENORM: ; %bb.0:577; VI-DENORM-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24578; VI-DENORM-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x34579; VI-DENORM-NEXT: s_mov_b32 s7, 0xf000580; VI-DENORM-NEXT: s_mov_b32 s6, -1581; VI-DENORM-NEXT: s_mov_b32 s14, s6582; VI-DENORM-NEXT: s_waitcnt lgkmcnt(0)583; VI-DENORM-NEXT: s_mov_b32 s12, s2584; VI-DENORM-NEXT: s_mov_b32 s13, s3585; VI-DENORM-NEXT: s_mov_b32 s15, s7586; VI-DENORM-NEXT: s_mov_b32 s10, s6587; VI-DENORM-NEXT: s_mov_b32 s11, s7588; VI-DENORM-NEXT: buffer_load_ushort v0, off, s[12:15], 0 glc589; VI-DENORM-NEXT: s_waitcnt vmcnt(0)590; VI-DENORM-NEXT: buffer_load_ushort v1, off, s[8:11], 0 glc591; VI-DENORM-NEXT: s_waitcnt vmcnt(0)592; VI-DENORM-NEXT: s_mov_b32 s4, s0593; VI-DENORM-NEXT: s_movk_i32 s0, 0x4200594; VI-DENORM-NEXT: s_mov_b32 s5, s1595; VI-DENORM-NEXT: v_fma_f16 v0, v0, s0, v1596; VI-DENORM-NEXT: buffer_store_short v0, off, s[4:7], 0597; VI-DENORM-NEXT: s_endpgm598;599; GFX10-FLUSH-LABEL: fmuladd_f16_imm_b:600; GFX10-FLUSH: ; %bb.0:601; GFX10-FLUSH-NEXT: s_clause 0x1602; GFX10-FLUSH-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24603; GFX10-FLUSH-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x34604; GFX10-FLUSH-NEXT: s_mov_b32 s6, -1605; GFX10-FLUSH-NEXT: s_mov_b32 s7, 0x31016000606; GFX10-FLUSH-NEXT: s_mov_b32 s14, s6607; GFX10-FLUSH-NEXT: s_mov_b32 s15, s7608; GFX10-FLUSH-NEXT: s_mov_b32 s10, s6609; GFX10-FLUSH-NEXT: s_mov_b32 s11, s7610; GFX10-FLUSH-NEXT: s_waitcnt lgkmcnt(0)611; GFX10-FLUSH-NEXT: s_mov_b32 s12, s2612; GFX10-FLUSH-NEXT: s_mov_b32 s13, s3613; GFX10-FLUSH-NEXT: s_mov_b32 s4, s0614; GFX10-FLUSH-NEXT: buffer_load_ushort v0, off, s[12:15], 0 glc dlc615; GFX10-FLUSH-NEXT: s_waitcnt vmcnt(0)616; GFX10-FLUSH-NEXT: buffer_load_ushort v1, off, s[8:11], 0 glc dlc617; GFX10-FLUSH-NEXT: s_waitcnt vmcnt(0)618; GFX10-FLUSH-NEXT: s_mov_b32 s5, s1619; GFX10-FLUSH-NEXT: v_mul_f16_e32 v0, 0x4200, v0620; GFX10-FLUSH-NEXT: v_add_f16_e32 v0, v0, v1621; GFX10-FLUSH-NEXT: buffer_store_short v0, off, s[4:7], 0622; GFX10-FLUSH-NEXT: s_endpgm623;624; GFX10-DENORM-LABEL: fmuladd_f16_imm_b:625; GFX10-DENORM: ; %bb.0:626; GFX10-DENORM-NEXT: s_clause 0x1627; GFX10-DENORM-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24628; GFX10-DENORM-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x34629; GFX10-DENORM-NEXT: s_mov_b32 s6, -1630; GFX10-DENORM-NEXT: s_mov_b32 s7, 0x31016000631; GFX10-DENORM-NEXT: s_mov_b32 s14, s6632; GFX10-DENORM-NEXT: s_mov_b32 s15, s7633; GFX10-DENORM-NEXT: s_mov_b32 s10, s6634; GFX10-DENORM-NEXT: s_mov_b32 s11, s7635; GFX10-DENORM-NEXT: s_waitcnt lgkmcnt(0)636; GFX10-DENORM-NEXT: s_mov_b32 s12, s2637; GFX10-DENORM-NEXT: s_mov_b32 s13, s3638; GFX10-DENORM-NEXT: buffer_load_ushort v0, off, s[12:15], 0 glc dlc639; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0)640; GFX10-DENORM-NEXT: buffer_load_ushort v1, off, s[8:11], 0 glc dlc641; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0)642; GFX10-DENORM-NEXT: s_mov_b32 s4, s0643; GFX10-DENORM-NEXT: s_mov_b32 s5, s1644; GFX10-DENORM-NEXT: v_fmamk_f16 v0, v0, 0x4200, v1645; GFX10-DENORM-NEXT: buffer_store_short v0, off, s[4:7], 0646; GFX10-DENORM-NEXT: s_endpgm647;648; GFX11-FLUSH-TRUE16-LABEL: fmuladd_f16_imm_b:649; GFX11-FLUSH-TRUE16: ; %bb.0:650; GFX11-FLUSH-TRUE16-NEXT: s_clause 0x1651; GFX11-FLUSH-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24652; GFX11-FLUSH-TRUE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x34653; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s10, -1654; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s11, 0x31016000655; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s14, s10656; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s15, s11657; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s6, s10658; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s7, s11659; GFX11-FLUSH-TRUE16-NEXT: s_waitcnt lgkmcnt(0)660; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s12, s2661; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s13, s3662; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s8, s0663; GFX11-FLUSH-TRUE16-NEXT: buffer_load_u16 v0, off, s[12:15], 0 glc dlc664; GFX11-FLUSH-TRUE16-NEXT: s_waitcnt vmcnt(0)665; GFX11-FLUSH-TRUE16-NEXT: buffer_load_u16 v1, off, s[4:7], 0 glc dlc666; GFX11-FLUSH-TRUE16-NEXT: s_waitcnt vmcnt(0)667; GFX11-FLUSH-TRUE16-NEXT: s_mov_b32 s9, s1668; GFX11-FLUSH-TRUE16-NEXT: v_mul_f16_e32 v0.l, 0x4200, v0.l669; GFX11-FLUSH-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)670; GFX11-FLUSH-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v1.l671; GFX11-FLUSH-TRUE16-NEXT: buffer_store_b16 v0, off, s[8:11], 0672; GFX11-FLUSH-TRUE16-NEXT: s_endpgm673;674; GFX11-FLUSH-FAKE16-LABEL: fmuladd_f16_imm_b:675; GFX11-FLUSH-FAKE16: ; %bb.0:676; GFX11-FLUSH-FAKE16-NEXT: s_clause 0x1677; GFX11-FLUSH-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24678; GFX11-FLUSH-FAKE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x34679; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s10, -1680; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s11, 0x31016000681; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s14, s10682; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s15, s11683; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s6, s10684; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s7, s11685; GFX11-FLUSH-FAKE16-NEXT: s_waitcnt lgkmcnt(0)686; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s12, s2687; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s13, s3688; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s8, s0689; GFX11-FLUSH-FAKE16-NEXT: buffer_load_u16 v0, off, s[12:15], 0 glc dlc690; GFX11-FLUSH-FAKE16-NEXT: s_waitcnt vmcnt(0)691; GFX11-FLUSH-FAKE16-NEXT: buffer_load_u16 v1, off, s[4:7], 0 glc dlc692; GFX11-FLUSH-FAKE16-NEXT: s_waitcnt vmcnt(0)693; GFX11-FLUSH-FAKE16-NEXT: s_mov_b32 s9, s1694; GFX11-FLUSH-FAKE16-NEXT: v_mul_f16_e32 v0, 0x4200, v0695; GFX11-FLUSH-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)696; GFX11-FLUSH-FAKE16-NEXT: v_add_f16_e32 v0, v0, v1697; GFX11-FLUSH-FAKE16-NEXT: buffer_store_b16 v0, off, s[8:11], 0698; GFX11-FLUSH-FAKE16-NEXT: s_endpgm699;700; GFX11-DENORM-TRUE16-LABEL: fmuladd_f16_imm_b:701; GFX11-DENORM-TRUE16: ; %bb.0:702; GFX11-DENORM-TRUE16-NEXT: s_clause 0x1703; GFX11-DENORM-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24704; GFX11-DENORM-TRUE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x34705; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s10, -1706; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s11, 0x31016000707; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s14, s10708; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s15, s11709; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s6, s10710; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s7, s11711; GFX11-DENORM-TRUE16-NEXT: s_waitcnt lgkmcnt(0)712; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s12, s2713; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s13, s3714; GFX11-DENORM-TRUE16-NEXT: buffer_load_u16 v0, off, s[12:15], 0 glc dlc715; GFX11-DENORM-TRUE16-NEXT: s_waitcnt vmcnt(0)716; GFX11-DENORM-TRUE16-NEXT: buffer_load_u16 v1, off, s[4:7], 0 glc dlc717; GFX11-DENORM-TRUE16-NEXT: s_waitcnt vmcnt(0)718; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s8, s0719; GFX11-DENORM-TRUE16-NEXT: s_mov_b32 s9, s1720; GFX11-DENORM-TRUE16-NEXT: v_fmac_f16_e32 v1.l, 0x4200, v0.l721; GFX11-DENORM-TRUE16-NEXT: buffer_store_b16 v1, off, s[8:11], 0722; GFX11-DENORM-TRUE16-NEXT: s_endpgm723;724; GFX11-DENORM-FAKE16-LABEL: fmuladd_f16_imm_b:725; GFX11-DENORM-FAKE16: ; %bb.0:726; GFX11-DENORM-FAKE16-NEXT: s_clause 0x1727; GFX11-DENORM-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24728; GFX11-DENORM-FAKE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x34729; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s10, -1730; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s11, 0x31016000731; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s14, s10732; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s15, s11733; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s6, s10734; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s7, s11735; GFX11-DENORM-FAKE16-NEXT: s_waitcnt lgkmcnt(0)736; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s12, s2737; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s13, s3738; GFX11-DENORM-FAKE16-NEXT: buffer_load_u16 v0, off, s[12:15], 0 glc dlc739; GFX11-DENORM-FAKE16-NEXT: s_waitcnt vmcnt(0)740; GFX11-DENORM-FAKE16-NEXT: buffer_load_u16 v1, off, s[4:7], 0 glc dlc741; GFX11-DENORM-FAKE16-NEXT: s_waitcnt vmcnt(0)742; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s8, s0743; GFX11-DENORM-FAKE16-NEXT: s_mov_b32 s9, s1744; GFX11-DENORM-FAKE16-NEXT: v_fmac_f16_e32 v1, 0x4200, v0745; GFX11-DENORM-FAKE16-NEXT: buffer_store_b16 v1, off, s[8:11], 0746; GFX11-DENORM-FAKE16-NEXT: s_endpgm747 ptr addrspace(1) %r,748 ptr addrspace(1) %a,749 ptr addrspace(1) %c) {750 %a.val = load volatile half, ptr addrspace(1) %a751 %c.val = load volatile half, ptr addrspace(1) %c752 %r.val = call half @llvm.fmuladd.f16(half %a.val, half 3.0, half %c.val)753 store half %r.val, ptr addrspace(1) %r754 ret void755}756 757define amdgpu_kernel void @fmuladd_v2f16(758; SI-LABEL: fmuladd_v2f16:759; SI: ; %bb.0:760; SI-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x9761; SI-NEXT: s_mov_b32 s11, 0xf000762; SI-NEXT: s_mov_b32 s10, -1763; SI-NEXT: s_mov_b32 s14, s10764; SI-NEXT: s_mov_b32 s15, s11765; SI-NEXT: s_waitcnt lgkmcnt(0)766; SI-NEXT: s_mov_b32 s12, s2767; SI-NEXT: s_mov_b32 s13, s3768; SI-NEXT: s_mov_b32 s16, s4769; SI-NEXT: s_mov_b32 s17, s5770; SI-NEXT: s_mov_b32 s18, s10771; SI-NEXT: s_mov_b32 s19, s11772; SI-NEXT: s_mov_b32 s4, s6773; SI-NEXT: s_mov_b32 s5, s7774; SI-NEXT: s_mov_b32 s6, s10775; SI-NEXT: buffer_load_dword v0, off, s[12:15], 0776; SI-NEXT: s_mov_b32 s7, s11777; SI-NEXT: buffer_load_dword v1, off, s[16:19], 0778; SI-NEXT: buffer_load_dword v2, off, s[4:7], 0779; SI-NEXT: s_mov_b32 s8, s0780; SI-NEXT: s_mov_b32 s9, s1781; SI-NEXT: s_waitcnt vmcnt(2)782; SI-NEXT: v_cvt_f32_f16_e32 v3, v0783; SI-NEXT: v_lshrrev_b32_e32 v0, 16, v0784; SI-NEXT: s_waitcnt vmcnt(1)785; SI-NEXT: v_lshrrev_b32_e32 v4, 16, v1786; SI-NEXT: s_waitcnt vmcnt(0)787; SI-NEXT: v_lshrrev_b32_e32 v5, 16, v2788; SI-NEXT: v_cvt_f32_f16_e32 v0, v0789; SI-NEXT: v_cvt_f32_f16_e32 v4, v4790; SI-NEXT: v_cvt_f32_f16_e32 v5, v5791; SI-NEXT: v_cvt_f32_f16_e32 v1, v1792; SI-NEXT: v_cvt_f32_f16_e32 v2, v2793; SI-NEXT: v_mac_f32_e32 v5, v0, v4794; SI-NEXT: v_cvt_f16_f32_e32 v0, v5795; SI-NEXT: v_mac_f32_e32 v2, v3, v1796; SI-NEXT: v_cvt_f16_f32_e32 v1, v2797; SI-NEXT: v_lshlrev_b32_e32 v0, 16, v0798; SI-NEXT: v_or_b32_e32 v0, v1, v0799; SI-NEXT: buffer_store_dword v0, off, s[8:11], 0800; SI-NEXT: s_endpgm801;802; VI-FLUSH-LABEL: fmuladd_v2f16:803; VI-FLUSH: ; %bb.0:804; VI-FLUSH-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x24805; VI-FLUSH-NEXT: s_mov_b32 s11, 0xf000806; VI-FLUSH-NEXT: s_mov_b32 s10, -1807; VI-FLUSH-NEXT: s_mov_b32 s14, s10808; VI-FLUSH-NEXT: s_mov_b32 s15, s11809; VI-FLUSH-NEXT: s_waitcnt lgkmcnt(0)810; VI-FLUSH-NEXT: s_mov_b32 s12, s2811; VI-FLUSH-NEXT: s_mov_b32 s13, s3812; VI-FLUSH-NEXT: s_mov_b32 s16, s4813; VI-FLUSH-NEXT: s_mov_b32 s17, s5814; VI-FLUSH-NEXT: s_mov_b32 s18, s10815; VI-FLUSH-NEXT: s_mov_b32 s19, s11816; VI-FLUSH-NEXT: s_mov_b32 s4, s6817; VI-FLUSH-NEXT: s_mov_b32 s5, s7818; VI-FLUSH-NEXT: s_mov_b32 s6, s10819; VI-FLUSH-NEXT: s_mov_b32 s7, s11820; VI-FLUSH-NEXT: buffer_load_dword v0, off, s[12:15], 0821; VI-FLUSH-NEXT: buffer_load_dword v1, off, s[4:7], 0822; VI-FLUSH-NEXT: buffer_load_dword v2, off, s[16:19], 0823; VI-FLUSH-NEXT: s_mov_b32 s8, s0824; VI-FLUSH-NEXT: s_mov_b32 s9, s1825; VI-FLUSH-NEXT: s_waitcnt vmcnt(1)826; VI-FLUSH-NEXT: v_lshrrev_b32_e32 v3, 16, v1827; VI-FLUSH-NEXT: s_waitcnt vmcnt(0)828; VI-FLUSH-NEXT: v_mac_f16_sdwa v3, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1829; VI-FLUSH-NEXT: v_lshlrev_b32_e32 v3, 16, v3830; VI-FLUSH-NEXT: v_mac_f16_e32 v1, v0, v2831; VI-FLUSH-NEXT: v_or_b32_e32 v0, v1, v3832; VI-FLUSH-NEXT: buffer_store_dword v0, off, s[8:11], 0833; VI-FLUSH-NEXT: s_endpgm834;835; VI-DENORM-LABEL: fmuladd_v2f16:836; VI-DENORM: ; %bb.0:837; VI-DENORM-NEXT: s_load_dwordx8 s[0:7], s[4:5], 0x24838; VI-DENORM-NEXT: s_mov_b32 s11, 0xf000839; VI-DENORM-NEXT: s_mov_b32 s10, -1840; VI-DENORM-NEXT: s_mov_b32 s14, s10841; VI-DENORM-NEXT: s_mov_b32 s15, s11842; VI-DENORM-NEXT: s_waitcnt lgkmcnt(0)843; VI-DENORM-NEXT: s_mov_b32 s16, s4844; VI-DENORM-NEXT: s_mov_b32 s17, s5845; VI-DENORM-NEXT: s_mov_b32 s4, s6846; VI-DENORM-NEXT: s_mov_b32 s5, s7847; VI-DENORM-NEXT: s_mov_b32 s6, s10848; VI-DENORM-NEXT: s_mov_b32 s7, s11849; VI-DENORM-NEXT: s_mov_b32 s12, s2850; VI-DENORM-NEXT: s_mov_b32 s13, s3851; VI-DENORM-NEXT: s_mov_b32 s18, s10852; VI-DENORM-NEXT: s_mov_b32 s19, s11853; VI-DENORM-NEXT: buffer_load_dword v0, off, s[4:7], 0854; VI-DENORM-NEXT: buffer_load_dword v1, off, s[16:19], 0855; VI-DENORM-NEXT: buffer_load_dword v2, off, s[12:15], 0856; VI-DENORM-NEXT: s_mov_b32 s8, s0857; VI-DENORM-NEXT: s_mov_b32 s9, s1858; VI-DENORM-NEXT: s_waitcnt vmcnt(2)859; VI-DENORM-NEXT: v_lshrrev_b32_e32 v3, 16, v0860; VI-DENORM-NEXT: s_waitcnt vmcnt(1)861; VI-DENORM-NEXT: v_lshrrev_b32_e32 v4, 16, v1862; VI-DENORM-NEXT: s_waitcnt vmcnt(0)863; VI-DENORM-NEXT: v_lshrrev_b32_e32 v5, 16, v2864; VI-DENORM-NEXT: v_fma_f16 v3, v5, v4, v3865; VI-DENORM-NEXT: v_lshlrev_b32_e32 v3, 16, v3866; VI-DENORM-NEXT: v_fma_f16 v0, v2, v1, v0867; VI-DENORM-NEXT: v_or_b32_e32 v0, v0, v3868; VI-DENORM-NEXT: buffer_store_dword v0, off, s[8:11], 0869; VI-DENORM-NEXT: s_endpgm870;871; GFX10-FLUSH-LABEL: fmuladd_v2f16:872; GFX10-FLUSH: ; %bb.0:873; GFX10-FLUSH-NEXT: s_load_dwordx8 s[8:15], s[4:5], 0x24874; GFX10-FLUSH-NEXT: s_mov_b32 s2, -1875; GFX10-FLUSH-NEXT: s_mov_b32 s3, 0x31016000876; GFX10-FLUSH-NEXT: s_mov_b32 s6, s2877; GFX10-FLUSH-NEXT: s_mov_b32 s7, s3878; GFX10-FLUSH-NEXT: s_mov_b32 s18, s2879; GFX10-FLUSH-NEXT: s_mov_b32 s19, s3880; GFX10-FLUSH-NEXT: s_waitcnt lgkmcnt(0)881; GFX10-FLUSH-NEXT: s_mov_b32 s4, s10882; GFX10-FLUSH-NEXT: s_mov_b32 s5, s11883; GFX10-FLUSH-NEXT: s_mov_b32 s16, s12884; GFX10-FLUSH-NEXT: s_mov_b32 s17, s13885; GFX10-FLUSH-NEXT: buffer_load_dword v0, off, s[4:7], 0886; GFX10-FLUSH-NEXT: buffer_load_dword v1, off, s[16:19], 0887; GFX10-FLUSH-NEXT: s_mov_b32 s12, s14888; GFX10-FLUSH-NEXT: s_mov_b32 s13, s15889; GFX10-FLUSH-NEXT: s_mov_b32 s14, s2890; GFX10-FLUSH-NEXT: s_mov_b32 s15, s3891; GFX10-FLUSH-NEXT: s_mov_b32 s0, s8892; GFX10-FLUSH-NEXT: buffer_load_dword v2, off, s[12:15], 0893; GFX10-FLUSH-NEXT: s_mov_b32 s1, s9894; GFX10-FLUSH-NEXT: s_waitcnt vmcnt(1)895; GFX10-FLUSH-NEXT: v_pk_mul_f16 v0, v0, v1896; GFX10-FLUSH-NEXT: s_waitcnt vmcnt(0)897; GFX10-FLUSH-NEXT: v_pk_add_f16 v0, v0, v2898; GFX10-FLUSH-NEXT: buffer_store_dword v0, off, s[0:3], 0899; GFX10-FLUSH-NEXT: s_endpgm900;901; GFX10-DENORM-LABEL: fmuladd_v2f16:902; GFX10-DENORM: ; %bb.0:903; GFX10-DENORM-NEXT: s_load_dwordx8 s[8:15], s[4:5], 0x24904; GFX10-DENORM-NEXT: s_mov_b32 s2, -1905; GFX10-DENORM-NEXT: s_mov_b32 s3, 0x31016000906; GFX10-DENORM-NEXT: s_mov_b32 s6, s2907; GFX10-DENORM-NEXT: s_mov_b32 s7, s3908; GFX10-DENORM-NEXT: s_mov_b32 s18, s2909; GFX10-DENORM-NEXT: s_mov_b32 s19, s3910; GFX10-DENORM-NEXT: s_mov_b32 s22, s2911; GFX10-DENORM-NEXT: s_mov_b32 s23, s3912; GFX10-DENORM-NEXT: s_waitcnt lgkmcnt(0)913; GFX10-DENORM-NEXT: s_mov_b32 s4, s10914; GFX10-DENORM-NEXT: s_mov_b32 s5, s11915; GFX10-DENORM-NEXT: s_mov_b32 s16, s12916; GFX10-DENORM-NEXT: s_mov_b32 s17, s13917; GFX10-DENORM-NEXT: s_mov_b32 s20, s14918; GFX10-DENORM-NEXT: s_mov_b32 s21, s15919; GFX10-DENORM-NEXT: buffer_load_dword v0, off, s[4:7], 0920; GFX10-DENORM-NEXT: buffer_load_dword v1, off, s[16:19], 0921; GFX10-DENORM-NEXT: buffer_load_dword v2, off, s[20:23], 0922; GFX10-DENORM-NEXT: s_mov_b32 s0, s8923; GFX10-DENORM-NEXT: s_mov_b32 s1, s9924; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0)925; GFX10-DENORM-NEXT: v_pk_fma_f16 v0, v0, v1, v2926; GFX10-DENORM-NEXT: buffer_store_dword v0, off, s[0:3], 0927; GFX10-DENORM-NEXT: s_endpgm928;929; GFX11-FLUSH-LABEL: fmuladd_v2f16:930; GFX11-FLUSH: ; %bb.0:931; GFX11-FLUSH-NEXT: s_load_b256 s[0:7], s[4:5], 0x24932; GFX11-FLUSH-NEXT: s_mov_b32 s10, -1933; GFX11-FLUSH-NEXT: s_mov_b32 s11, 0x31016000934; GFX11-FLUSH-NEXT: s_mov_b32 s14, s10935; GFX11-FLUSH-NEXT: s_mov_b32 s15, s11936; GFX11-FLUSH-NEXT: s_mov_b32 s18, s10937; GFX11-FLUSH-NEXT: s_mov_b32 s19, s11938; GFX11-FLUSH-NEXT: s_waitcnt lgkmcnt(0)939; GFX11-FLUSH-NEXT: s_mov_b32 s12, s2940; GFX11-FLUSH-NEXT: s_mov_b32 s13, s3941; GFX11-FLUSH-NEXT: s_mov_b32 s16, s4942; GFX11-FLUSH-NEXT: s_mov_b32 s17, s5943; GFX11-FLUSH-NEXT: buffer_load_b32 v0, off, s[12:15], 0944; GFX11-FLUSH-NEXT: buffer_load_b32 v1, off, s[16:19], 0945; GFX11-FLUSH-NEXT: s_mov_b32 s4, s6946; GFX11-FLUSH-NEXT: s_mov_b32 s5, s7947; GFX11-FLUSH-NEXT: s_mov_b32 s6, s10948; GFX11-FLUSH-NEXT: s_mov_b32 s7, s11949; GFX11-FLUSH-NEXT: s_mov_b32 s8, s0950; GFX11-FLUSH-NEXT: buffer_load_b32 v2, off, s[4:7], 0951; GFX11-FLUSH-NEXT: s_mov_b32 s9, s1952; GFX11-FLUSH-NEXT: s_waitcnt vmcnt(1)953; GFX11-FLUSH-NEXT: v_pk_mul_f16 v0, v0, v1954; GFX11-FLUSH-NEXT: s_waitcnt vmcnt(0)955; GFX11-FLUSH-NEXT: s_delay_alu instid0(VALU_DEP_1)956; GFX11-FLUSH-NEXT: v_pk_add_f16 v0, v0, v2957; GFX11-FLUSH-NEXT: buffer_store_b32 v0, off, s[8:11], 0958; GFX11-FLUSH-NEXT: s_endpgm959;960; GFX11-DENORM-LABEL: fmuladd_v2f16:961; GFX11-DENORM: ; %bb.0:962; GFX11-DENORM-NEXT: s_load_b256 s[0:7], s[4:5], 0x24963; GFX11-DENORM-NEXT: s_mov_b32 s10, -1964; GFX11-DENORM-NEXT: s_mov_b32 s11, 0x31016000965; GFX11-DENORM-NEXT: s_mov_b32 s14, s10966; GFX11-DENORM-NEXT: s_mov_b32 s15, s11967; GFX11-DENORM-NEXT: s_mov_b32 s18, s10968; GFX11-DENORM-NEXT: s_mov_b32 s19, s11969; GFX11-DENORM-NEXT: s_mov_b32 s22, s10970; GFX11-DENORM-NEXT: s_mov_b32 s23, s11971; GFX11-DENORM-NEXT: s_waitcnt lgkmcnt(0)972; GFX11-DENORM-NEXT: s_mov_b32 s12, s2973; GFX11-DENORM-NEXT: s_mov_b32 s13, s3974; GFX11-DENORM-NEXT: s_mov_b32 s16, s4975; GFX11-DENORM-NEXT: s_mov_b32 s17, s5976; GFX11-DENORM-NEXT: s_mov_b32 s20, s6977; GFX11-DENORM-NEXT: s_mov_b32 s21, s7978; GFX11-DENORM-NEXT: buffer_load_b32 v0, off, s[12:15], 0979; GFX11-DENORM-NEXT: buffer_load_b32 v1, off, s[16:19], 0980; GFX11-DENORM-NEXT: buffer_load_b32 v2, off, s[20:23], 0981; GFX11-DENORM-NEXT: s_mov_b32 s8, s0982; GFX11-DENORM-NEXT: s_mov_b32 s9, s1983; GFX11-DENORM-NEXT: s_waitcnt vmcnt(0)984; GFX11-DENORM-NEXT: v_pk_fma_f16 v0, v0, v1, v2985; GFX11-DENORM-NEXT: buffer_store_b32 v0, off, s[8:11], 0986; GFX11-DENORM-NEXT: s_endpgm987 ptr addrspace(1) %r,988 ptr addrspace(1) %a,989 ptr addrspace(1) %b,990 ptr addrspace(1) %c) {991 %a.val = load <2 x half>, ptr addrspace(1) %a992 %b.val = load <2 x half>, ptr addrspace(1) %b993 %c.val = load <2 x half>, ptr addrspace(1) %c994 %r.val = call <2 x half> @llvm.fmuladd.v2f16(<2 x half> %a.val, <2 x half> %b.val, <2 x half> %c.val)995 store <2 x half> %r.val, ptr addrspace(1) %r996 ret void997}998