brintos

brintos / llvm-project-archived public Read only

0
0
Text · 193.1 KiB · 51b6d17 Raw
3696 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=amdgcn -mcpu=fiji -denormal-fp-math=preserve-sign -denormal-fp-math-f32=ieee -fp-contract=on < %s | FileCheck -check-prefixes=VI-FLUSH %s3; RUN: llc -mtriple=amdgcn -mcpu=fiji -denormal-fp-math=preserve-sign -denormal-fp-math-f32=ieee -fp-contract=fast < %s | FileCheck -check-prefixes=VI-FLUSH %s4 5; RUN: llc -mtriple=amdgcn -mcpu=fiji -denormal-fp-math=ieee -denormal-fp-math-f32=ieee -fp-contract=on < %s | FileCheck -check-prefixes=VI-DENORM %s6; RUN: llc -mtriple=amdgcn -mcpu=fiji -denormal-fp-math=ieee -denormal-fp-math-f32=ieee -fp-contract=fast < %s | FileCheck -check-prefixes=VI-DENORM,VI-DENORM-CONTRACT %s7 8; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -denormal-fp-math=preserve-sign -denormal-fp-math-f32=ieee -fp-contract=on < %s | FileCheck -check-prefixes=GFX10-FLUSH %s9; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -denormal-fp-math=preserve-sign -denormal-fp-math-f32=ieee -fp-contract=fast < %s | FileCheck -check-prefixes=GFX10-FLUSH %s10; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -denormal-fp-math=ieee -denormal-fp-math-f32=ieee -fp-contract=on < %s | FileCheck -check-prefixes=GFX10-DENORM,GFX10-DENORM-STRICT %s11; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -denormal-fp-math=ieee -denormal-fp-math-f32=ieee -fp-contract=fast < %s | FileCheck -check-prefixes=GFX10-DENORM,GFX10-DENORM-CONTRACT %s12 13; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -denormal-fp-math=preserve-sign -denormal-fp-math-f32=ieee -fp-contract=on < %s | FileCheck -check-prefixes=GFX11-FLUSH-TRUE16 %s14; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -denormal-fp-math=preserve-sign -denormal-fp-math-f32=ieee -fp-contract=on < %s | FileCheck -check-prefixes=GFX11-FLUSH-FAKE16 %s15; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -denormal-fp-math=preserve-sign -denormal-fp-math-f32=ieee -fp-contract=fast < %s | FileCheck -check-prefixes=GFX11-FLUSH-TRUE16 %s16; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -denormal-fp-math=preserve-sign -denormal-fp-math-f32=ieee -fp-contract=fast < %s | FileCheck -check-prefixes=GFX11-FLUSH-FAKE16 %s17; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -denormal-fp-math=ieee -denormal-fp-math-f32=ieee -fp-contract=on < %s | FileCheck -check-prefixes=GFX11-DENORM-STRICT-TRUE16 %s18; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -denormal-fp-math=ieee -denormal-fp-math-f32=ieee -fp-contract=on < %s | FileCheck -check-prefixes=GFX11-DENORM-STRICT-FAKE16 %s19; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -denormal-fp-math=ieee -denormal-fp-math-f32=ieee -fp-contract=fast < %s | FileCheck -check-prefixes=GFX11-DENORM-CONTRACT-TRUE16 %s20; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -denormal-fp-math=ieee -denormal-fp-math-f32=ieee -fp-contract=fast < %s | FileCheck -check-prefixes=GFX11-DENORM-CONTRACT-FAKE16 %s21 22declare i32 @llvm.amdgcn.workitem.id.x() #123declare half @llvm.fmuladd.f16(half, half, half) #124declare half @llvm.fabs.f16(half) #125 26define amdgpu_kernel void @fmuladd_f16(ptr addrspace(1) %out, ptr addrspace(1) %in1,27; VI-FLUSH-LABEL: fmuladd_f16:28; VI-FLUSH:       ; %bb.0:29; VI-FLUSH-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x2430; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)31; VI-FLUSH-NEXT:    v_mov_b32_e32 v0, s232; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s333; VI-FLUSH-NEXT:    v_mov_b32_e32 v2, s434; VI-FLUSH-NEXT:    v_mov_b32_e32 v3, s535; VI-FLUSH-NEXT:    v_mov_b32_e32 v4, s636; VI-FLUSH-NEXT:    v_mov_b32_e32 v5, s737; VI-FLUSH-NEXT:    flat_load_ushort v6, v[0:1]38; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3]39; VI-FLUSH-NEXT:    flat_load_ushort v3, v[4:5]40; VI-FLUSH-NEXT:    v_mov_b32_e32 v0, s041; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s142; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)43; VI-FLUSH-NEXT:    v_mac_f16_e32 v3, v6, v244; VI-FLUSH-NEXT:    flat_store_short v[0:1], v345; VI-FLUSH-NEXT:    s_endpgm46;47; VI-DENORM-LABEL: fmuladd_f16:48; VI-DENORM:       ; %bb.0:49; VI-DENORM-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x2450; VI-DENORM-NEXT:    s_waitcnt lgkmcnt(0)51; VI-DENORM-NEXT:    v_mov_b32_e32 v0, s252; VI-DENORM-NEXT:    v_mov_b32_e32 v1, s353; VI-DENORM-NEXT:    v_mov_b32_e32 v2, s454; VI-DENORM-NEXT:    v_mov_b32_e32 v3, s555; VI-DENORM-NEXT:    v_mov_b32_e32 v4, s656; VI-DENORM-NEXT:    v_mov_b32_e32 v5, s757; VI-DENORM-NEXT:    flat_load_ushort v6, v[0:1]58; VI-DENORM-NEXT:    flat_load_ushort v2, v[2:3]59; VI-DENORM-NEXT:    flat_load_ushort v3, v[4:5]60; VI-DENORM-NEXT:    v_mov_b32_e32 v0, s061; VI-DENORM-NEXT:    v_mov_b32_e32 v1, s162; VI-DENORM-NEXT:    s_waitcnt vmcnt(0)63; VI-DENORM-NEXT:    v_fma_f16 v2, v6, v2, v364; VI-DENORM-NEXT:    flat_store_short v[0:1], v265; VI-DENORM-NEXT:    s_endpgm66;67; GFX10-FLUSH-LABEL: fmuladd_f16:68; GFX10-FLUSH:       ; %bb.0:69; GFX10-FLUSH-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x2470; GFX10-FLUSH-NEXT:    v_mov_b32_e32 v0, 071; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)72; GFX10-FLUSH-NEXT:    s_clause 0x273; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[10:11]74; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[12:13]75; GFX10-FLUSH-NEXT:    global_load_ushort v3, v0, s[14:15]76; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(1)77; GFX10-FLUSH-NEXT:    v_mul_f16_e32 v1, v1, v278; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)79; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v380; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[8:9]81; GFX10-FLUSH-NEXT:    s_endpgm82;83; GFX10-DENORM-LABEL: fmuladd_f16:84; GFX10-DENORM:       ; %bb.0:85; GFX10-DENORM-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x2486; GFX10-DENORM-NEXT:    v_mov_b32_e32 v0, 087; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)88; GFX10-DENORM-NEXT:    s_clause 0x289; GFX10-DENORM-NEXT:    global_load_ushort v1, v0, s[10:11]90; GFX10-DENORM-NEXT:    global_load_ushort v2, v0, s[12:13]91; GFX10-DENORM-NEXT:    global_load_ushort v3, v0, s[14:15]92; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)93; GFX10-DENORM-NEXT:    v_fmac_f16_e32 v3, v1, v294; GFX10-DENORM-NEXT:    global_store_short v0, v3, s[8:9]95; GFX10-DENORM-NEXT:    s_endpgm96;97; GFX11-FLUSH-TRUE16-LABEL: fmuladd_f16:98; GFX11-FLUSH-TRUE16:       ; %bb.0:99; GFX11-FLUSH-TRUE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24100; GFX11-FLUSH-TRUE16-NEXT:    v_mov_b32_e32 v2, 0101; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)102; GFX11-FLUSH-TRUE16-NEXT:    s_clause 0x2103; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3]104; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[4:5]105; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[6:7]106; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(1)107; GFX11-FLUSH-TRUE16-NEXT:    v_mul_f16_e32 v0.l, v0.l, v0.h108; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)109; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)110; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v1.l111; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]112; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm113;114; GFX11-FLUSH-FAKE16-LABEL: fmuladd_f16:115; GFX11-FLUSH-FAKE16:       ; %bb.0:116; GFX11-FLUSH-FAKE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24117; GFX11-FLUSH-FAKE16-NEXT:    v_mov_b32_e32 v0, 0118; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)119; GFX11-FLUSH-FAKE16-NEXT:    s_clause 0x2120; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]121; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[4:5]122; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v3, v0, s[6:7]123; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(1)124; GFX11-FLUSH-FAKE16-NEXT:    v_mul_f16_e32 v1, v1, v2125; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)126; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)127; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v3128; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]129; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm130;131; GFX11-DENORM-STRICT-TRUE16-LABEL: fmuladd_f16:132; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:133; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24134; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_mov_b32_e32 v2, 0135; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)136; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_clause 0x2137; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3]138; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[4:5]139; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[6:7]140; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)141; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_fmac_f16_e32 v1.l, v0.l, v0.h142; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_b16 v2, v1, s[0:1]143; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm144;145; GFX11-DENORM-STRICT-FAKE16-LABEL: fmuladd_f16:146; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:147; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24148; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_mov_b32_e32 v0, 0149; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)150; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_clause 0x2151; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]152; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[4:5]153; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v3, v0, s[6:7]154; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)155; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_fmac_f16_e32 v3, v1, v2156; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v3, s[0:1]157; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm158;159; GFX11-DENORM-CONTRACT-TRUE16-LABEL: fmuladd_f16:160; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:161; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24162; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_mov_b32_e32 v2, 0163; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)164; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_clause 0x2165; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3]166; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[4:5]167; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[6:7]168; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)169; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fmac_f16_e32 v1.l, v0.l, v0.h170; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_b16 v2, v1, s[0:1]171; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm172;173; GFX11-DENORM-CONTRACT-FAKE16-LABEL: fmuladd_f16:174; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:175; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24176; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_mov_b32_e32 v0, 0177; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)178; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_clause 0x2179; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]180; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[4:5]181; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v3, v0, s[6:7]182; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)183; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fmac_f16_e32 v3, v1, v2184; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v3, s[0:1]185; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm186                         ptr addrspace(1) %in2, ptr addrspace(1) %in3) #0 {187  %r0 = load half, ptr addrspace(1) %in1188  %r1 = load half, ptr addrspace(1) %in2189  %r2 = load half, ptr addrspace(1) %in3190  %r3 = tail call half @llvm.fmuladd.f16(half %r0, half %r1, half %r2)191  store half %r3, ptr addrspace(1) %out192  ret void193}194 195define amdgpu_kernel void @fmul_fadd_f16(ptr addrspace(1) %out, ptr addrspace(1) %in1,196; VI-FLUSH-LABEL: fmul_fadd_f16:197; VI-FLUSH:       ; %bb.0:198; VI-FLUSH-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x24199; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)200; VI-FLUSH-NEXT:    v_mov_b32_e32 v0, s2201; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s3202; VI-FLUSH-NEXT:    v_mov_b32_e32 v2, s4203; VI-FLUSH-NEXT:    v_mov_b32_e32 v3, s5204; VI-FLUSH-NEXT:    v_mov_b32_e32 v4, s6205; VI-FLUSH-NEXT:    v_mov_b32_e32 v5, s7206; VI-FLUSH-NEXT:    flat_load_ushort v6, v[0:1]207; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3]208; VI-FLUSH-NEXT:    flat_load_ushort v3, v[4:5]209; VI-FLUSH-NEXT:    v_mov_b32_e32 v0, s0210; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s1211; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)212; VI-FLUSH-NEXT:    v_mac_f16_e32 v3, v6, v2213; VI-FLUSH-NEXT:    flat_store_short v[0:1], v3214; VI-FLUSH-NEXT:    s_endpgm215;216; VI-DENORM-CONTRACT-LABEL: fmul_fadd_f16:217; VI-DENORM-CONTRACT:       ; %bb.0:218; VI-DENORM-CONTRACT-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x24219; VI-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)220; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v0, s2221; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s3222; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v2, s4223; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v3, s5224; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v4, s6225; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v5, s7226; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v6, v[0:1]227; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v2, v[2:3]228; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v3, v[4:5]229; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v0, s0230; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s1231; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)232; VI-DENORM-CONTRACT-NEXT:    v_fma_f16 v2, v6, v2, v3233; VI-DENORM-CONTRACT-NEXT:    flat_store_short v[0:1], v2234; VI-DENORM-CONTRACT-NEXT:    s_endpgm235;236; GFX10-FLUSH-LABEL: fmul_fadd_f16:237; GFX10-FLUSH:       ; %bb.0:238; GFX10-FLUSH-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24239; GFX10-FLUSH-NEXT:    v_mov_b32_e32 v0, 0240; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)241; GFX10-FLUSH-NEXT:    s_clause 0x2242; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[10:11]243; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[12:13]244; GFX10-FLUSH-NEXT:    global_load_ushort v3, v0, s[14:15]245; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(1)246; GFX10-FLUSH-NEXT:    v_mul_f16_e32 v1, v1, v2247; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)248; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v3249; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[8:9]250; GFX10-FLUSH-NEXT:    s_endpgm251;252; GFX10-DENORM-STRICT-LABEL: fmul_fadd_f16:253; GFX10-DENORM-STRICT:       ; %bb.0:254; GFX10-DENORM-STRICT-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24255; GFX10-DENORM-STRICT-NEXT:    v_mov_b32_e32 v0, 0256; GFX10-DENORM-STRICT-NEXT:    s_waitcnt lgkmcnt(0)257; GFX10-DENORM-STRICT-NEXT:    s_clause 0x2258; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v1, v0, s[10:11]259; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v2, v0, s[12:13]260; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v3, v0, s[14:15]261; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(1)262; GFX10-DENORM-STRICT-NEXT:    v_mul_f16_e32 v1, v1, v2263; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)264; GFX10-DENORM-STRICT-NEXT:    v_add_f16_e32 v1, v1, v3265; GFX10-DENORM-STRICT-NEXT:    global_store_short v0, v1, s[8:9]266; GFX10-DENORM-STRICT-NEXT:    s_endpgm267;268; GFX10-DENORM-CONTRACT-LABEL: fmul_fadd_f16:269; GFX10-DENORM-CONTRACT:       ; %bb.0:270; GFX10-DENORM-CONTRACT-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24271; GFX10-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v0, 0272; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)273; GFX10-DENORM-CONTRACT-NEXT:    s_clause 0x2274; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v1, v0, s[10:11]275; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v2, v0, s[12:13]276; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v3, v0, s[14:15]277; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)278; GFX10-DENORM-CONTRACT-NEXT:    v_fmac_f16_e32 v3, v1, v2279; GFX10-DENORM-CONTRACT-NEXT:    global_store_short v0, v3, s[8:9]280; GFX10-DENORM-CONTRACT-NEXT:    s_endpgm281;282; GFX11-FLUSH-TRUE16-LABEL: fmul_fadd_f16:283; GFX11-FLUSH-TRUE16:       ; %bb.0:284; GFX11-FLUSH-TRUE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24285; GFX11-FLUSH-TRUE16-NEXT:    v_mov_b32_e32 v2, 0286; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)287; GFX11-FLUSH-TRUE16-NEXT:    s_clause 0x2288; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3]289; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[4:5]290; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[6:7]291; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(1)292; GFX11-FLUSH-TRUE16-NEXT:    v_mul_f16_e32 v0.l, v0.l, v0.h293; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)294; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)295; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v1.l296; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]297; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm298;299; GFX11-FLUSH-FAKE16-LABEL: fmul_fadd_f16:300; GFX11-FLUSH-FAKE16:       ; %bb.0:301; GFX11-FLUSH-FAKE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24302; GFX11-FLUSH-FAKE16-NEXT:    v_mov_b32_e32 v0, 0303; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)304; GFX11-FLUSH-FAKE16-NEXT:    s_clause 0x2305; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]306; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[4:5]307; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v3, v0, s[6:7]308; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(1)309; GFX11-FLUSH-FAKE16-NEXT:    v_mul_f16_e32 v1, v1, v2310; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)311; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)312; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v3313; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]314; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm315;316; GFX11-DENORM-STRICT-TRUE16-LABEL: fmul_fadd_f16:317; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:318; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24319; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_mov_b32_e32 v2, 0320; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)321; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_clause 0x2322; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3]323; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[4:5]324; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[6:7]325; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(1)326; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_mul_f16_e32 v0.l, v0.l, v0.h327; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)328; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)329; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v1.l330; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]331; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm332;333; GFX11-DENORM-STRICT-FAKE16-LABEL: fmul_fadd_f16:334; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:335; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24336; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_mov_b32_e32 v0, 0337; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)338; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_clause 0x2339; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]340; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[4:5]341; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v3, v0, s[6:7]342; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(1)343; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_mul_f16_e32 v1, v1, v2344; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)345; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)346; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v3347; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]348; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm349;350; GFX11-DENORM-CONTRACT-TRUE16-LABEL: fmul_fadd_f16:351; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:352; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24353; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_mov_b32_e32 v2, 0354; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)355; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_clause 0x2356; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3]357; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[4:5]358; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[6:7]359; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)360; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fmac_f16_e32 v1.l, v0.l, v0.h361; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_b16 v2, v1, s[0:1]362; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm363;364; GFX11-DENORM-CONTRACT-FAKE16-LABEL: fmul_fadd_f16:365; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:366; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24367; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_mov_b32_e32 v0, 0368; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)369; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_clause 0x2370; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]371; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[4:5]372; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v3, v0, s[6:7]373; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)374; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fmac_f16_e32 v3, v1, v2375; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v3, s[0:1]376; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm377                         ptr addrspace(1) %in2, ptr addrspace(1) %in3) #0 {378  %r0 = load half, ptr addrspace(1) %in1379  %r1 = load half, ptr addrspace(1) %in2380  %r2 = load half, ptr addrspace(1) %in3381  %mul = fmul half %r0, %r1382  %add = fadd half %mul, %r2383  store half %add, ptr addrspace(1) %out384  ret void385}386 387define amdgpu_kernel void @fmul_fadd_contract_f16(ptr addrspace(1) %out, ptr addrspace(1) %in1,388; VI-FLUSH-LABEL: fmul_fadd_contract_f16:389; VI-FLUSH:       ; %bb.0:390; VI-FLUSH-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x24391; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)392; VI-FLUSH-NEXT:    v_mov_b32_e32 v0, s2393; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s3394; VI-FLUSH-NEXT:    v_mov_b32_e32 v2, s4395; VI-FLUSH-NEXT:    v_mov_b32_e32 v3, s5396; VI-FLUSH-NEXT:    v_mov_b32_e32 v4, s6397; VI-FLUSH-NEXT:    v_mov_b32_e32 v5, s7398; VI-FLUSH-NEXT:    flat_load_ushort v6, v[0:1]399; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3]400; VI-FLUSH-NEXT:    flat_load_ushort v3, v[4:5]401; VI-FLUSH-NEXT:    v_mov_b32_e32 v0, s0402; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s1403; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)404; VI-FLUSH-NEXT:    v_mac_f16_e32 v3, v6, v2405; VI-FLUSH-NEXT:    flat_store_short v[0:1], v3406; VI-FLUSH-NEXT:    s_endpgm407;408; VI-DENORM-LABEL: fmul_fadd_contract_f16:409; VI-DENORM:       ; %bb.0:410; VI-DENORM-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x24411; VI-DENORM-NEXT:    s_waitcnt lgkmcnt(0)412; VI-DENORM-NEXT:    v_mov_b32_e32 v0, s2413; VI-DENORM-NEXT:    v_mov_b32_e32 v1, s3414; VI-DENORM-NEXT:    v_mov_b32_e32 v2, s4415; VI-DENORM-NEXT:    v_mov_b32_e32 v3, s5416; VI-DENORM-NEXT:    v_mov_b32_e32 v4, s6417; VI-DENORM-NEXT:    v_mov_b32_e32 v5, s7418; VI-DENORM-NEXT:    flat_load_ushort v6, v[0:1]419; VI-DENORM-NEXT:    flat_load_ushort v2, v[2:3]420; VI-DENORM-NEXT:    flat_load_ushort v3, v[4:5]421; VI-DENORM-NEXT:    v_mov_b32_e32 v0, s0422; VI-DENORM-NEXT:    v_mov_b32_e32 v1, s1423; VI-DENORM-NEXT:    s_waitcnt vmcnt(0)424; VI-DENORM-NEXT:    v_fma_f16 v2, v6, v2, v3425; VI-DENORM-NEXT:    flat_store_short v[0:1], v2426; VI-DENORM-NEXT:    s_endpgm427;428; GFX10-FLUSH-LABEL: fmul_fadd_contract_f16:429; GFX10-FLUSH:       ; %bb.0:430; GFX10-FLUSH-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24431; GFX10-FLUSH-NEXT:    v_mov_b32_e32 v0, 0432; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)433; GFX10-FLUSH-NEXT:    s_clause 0x2434; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[10:11]435; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[12:13]436; GFX10-FLUSH-NEXT:    global_load_ushort v3, v0, s[14:15]437; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(1)438; GFX10-FLUSH-NEXT:    v_mul_f16_e32 v1, v1, v2439; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)440; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v3441; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[8:9]442; GFX10-FLUSH-NEXT:    s_endpgm443;444; GFX10-DENORM-LABEL: fmul_fadd_contract_f16:445; GFX10-DENORM:       ; %bb.0:446; GFX10-DENORM-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24447; GFX10-DENORM-NEXT:    v_mov_b32_e32 v0, 0448; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)449; GFX10-DENORM-NEXT:    s_clause 0x2450; GFX10-DENORM-NEXT:    global_load_ushort v1, v0, s[10:11]451; GFX10-DENORM-NEXT:    global_load_ushort v2, v0, s[12:13]452; GFX10-DENORM-NEXT:    global_load_ushort v3, v0, s[14:15]453; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)454; GFX10-DENORM-NEXT:    v_fmac_f16_e32 v3, v1, v2455; GFX10-DENORM-NEXT:    global_store_short v0, v3, s[8:9]456; GFX10-DENORM-NEXT:    s_endpgm457;458; GFX11-FLUSH-TRUE16-LABEL: fmul_fadd_contract_f16:459; GFX11-FLUSH-TRUE16:       ; %bb.0:460; GFX11-FLUSH-TRUE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24461; GFX11-FLUSH-TRUE16-NEXT:    v_mov_b32_e32 v2, 0462; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)463; GFX11-FLUSH-TRUE16-NEXT:    s_clause 0x2464; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3]465; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[4:5]466; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[6:7]467; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(1)468; GFX11-FLUSH-TRUE16-NEXT:    v_mul_f16_e32 v0.l, v0.l, v0.h469; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)470; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)471; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v1.l472; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]473; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm474;475; GFX11-FLUSH-FAKE16-LABEL: fmul_fadd_contract_f16:476; GFX11-FLUSH-FAKE16:       ; %bb.0:477; GFX11-FLUSH-FAKE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24478; GFX11-FLUSH-FAKE16-NEXT:    v_mov_b32_e32 v0, 0479; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)480; GFX11-FLUSH-FAKE16-NEXT:    s_clause 0x2481; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]482; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[4:5]483; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v3, v0, s[6:7]484; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(1)485; GFX11-FLUSH-FAKE16-NEXT:    v_mul_f16_e32 v1, v1, v2486; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)487; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)488; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v3489; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]490; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm491;492; GFX11-DENORM-STRICT-TRUE16-LABEL: fmul_fadd_contract_f16:493; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:494; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24495; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_mov_b32_e32 v2, 0496; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)497; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_clause 0x2498; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3]499; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[4:5]500; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[6:7]501; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)502; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_fmac_f16_e32 v1.l, v0.l, v0.h503; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_b16 v2, v1, s[0:1]504; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm505;506; GFX11-DENORM-STRICT-FAKE16-LABEL: fmul_fadd_contract_f16:507; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:508; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24509; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_mov_b32_e32 v0, 0510; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)511; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_clause 0x2512; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]513; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[4:5]514; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v3, v0, s[6:7]515; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)516; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_fmac_f16_e32 v3, v1, v2517; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v3, s[0:1]518; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm519;520; GFX11-DENORM-CONTRACT-TRUE16-LABEL: fmul_fadd_contract_f16:521; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:522; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24523; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_mov_b32_e32 v2, 0524; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)525; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_clause 0x2526; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3]527; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[4:5]528; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[6:7]529; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)530; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fmac_f16_e32 v1.l, v0.l, v0.h531; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_b16 v2, v1, s[0:1]532; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm533;534; GFX11-DENORM-CONTRACT-FAKE16-LABEL: fmul_fadd_contract_f16:535; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:536; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b256 s[0:7], s[4:5], 0x24537; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_mov_b32_e32 v0, 0538; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)539; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_clause 0x2540; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]541; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[4:5]542; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v3, v0, s[6:7]543; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)544; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fmac_f16_e32 v3, v1, v2545; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v3, s[0:1]546; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm547                         ptr addrspace(1) %in2, ptr addrspace(1) %in3) #0 {548  %r0 = load half, ptr addrspace(1) %in1549  %r1 = load half, ptr addrspace(1) %in2550  %r2 = load half, ptr addrspace(1) %in3551  %mul = fmul contract half %r0, %r1552  %add = fadd contract half %mul, %r2553  store half %add, ptr addrspace(1) %out554  ret void555}556 557define amdgpu_kernel void @fmuladd_2.0_a_b_f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {558; VI-FLUSH-LABEL: fmuladd_2.0_a_b_f16:559; VI-FLUSH:       ; %bb.0:560; VI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24561; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v0562; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)563; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s1564; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v0565; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc566; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v0567; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc568; VI-FLUSH-NEXT:    flat_load_ushort v4, v[0:1] glc569; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)570; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc571; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)572; VI-FLUSH-NEXT:    v_mac_f16_e32 v2, 2.0, v4573; VI-FLUSH-NEXT:    flat_store_short v[0:1], v2574; VI-FLUSH-NEXT:    s_endpgm575;576; VI-DENORM-LABEL: fmuladd_2.0_a_b_f16:577; VI-DENORM:       ; %bb.0:578; VI-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24579; VI-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 1, v0580; VI-DENORM-NEXT:    s_waitcnt lgkmcnt(0)581; VI-DENORM-NEXT:    v_mov_b32_e32 v1, s1582; VI-DENORM-NEXT:    v_add_u32_e32 v0, vcc, s0, v0583; VI-DENORM-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc584; VI-DENORM-NEXT:    v_add_u32_e32 v2, vcc, 2, v0585; VI-DENORM-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc586; VI-DENORM-NEXT:    flat_load_ushort v4, v[0:1] glc587; VI-DENORM-NEXT:    s_waitcnt vmcnt(0)588; VI-DENORM-NEXT:    flat_load_ushort v2, v[2:3] glc589; VI-DENORM-NEXT:    s_waitcnt vmcnt(0)590; VI-DENORM-NEXT:    v_fma_f16 v2, v4, 2.0, v2591; VI-DENORM-NEXT:    flat_store_short v[0:1], v2592; VI-DENORM-NEXT:    s_endpgm593;594; GFX10-FLUSH-LABEL: fmuladd_2.0_a_b_f16:595; GFX10-FLUSH:       ; %bb.0:596; GFX10-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24597; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v0598; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)599; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc600; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)601; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc602; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)603; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v1604; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v2605; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]606; GFX10-FLUSH-NEXT:    s_endpgm607;608; GFX10-DENORM-LABEL: fmuladd_2.0_a_b_f16:609; GFX10-DENORM:       ; %bb.0:610; GFX10-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24611; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 1, v0612; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)613; GFX10-DENORM-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc614; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)615; GFX10-DENORM-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc616; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)617; GFX10-DENORM-NEXT:    v_fmac_f16_e32 v2, 2.0, v1618; GFX10-DENORM-NEXT:    global_store_short v0, v2, s[0:1]619; GFX10-DENORM-NEXT:    s_endpgm620;621; GFX11-FLUSH-TRUE16-LABEL: fmuladd_2.0_a_b_f16:622; GFX11-FLUSH-TRUE16:       ; %bb.0:623; GFX11-FLUSH-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24624; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0625; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)626; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v0627; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)628; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc629; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)630; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc631; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)632; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.l633; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)634; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.h635; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]636; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm637;638; GFX11-FLUSH-FAKE16-LABEL: fmuladd_2.0_a_b_f16:639; GFX11-FLUSH-FAKE16:       ; %bb.0:640; GFX11-FLUSH-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24641; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0642; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)643; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v0644; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)645; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc646; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)647; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc648; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)649; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v1650; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)651; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v2652; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]653; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm654;655; GFX11-DENORM-STRICT-TRUE16-LABEL: fmuladd_2.0_a_b_f16:656; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:657; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24658; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0659; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)660; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v0661; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)662; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc663; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)664; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc665; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)666; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_fmac_f16_e32 v0.h, 2.0, v0.l667; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_d16_hi_b16 v1, v0, s[0:1]668; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm669;670; GFX11-DENORM-STRICT-FAKE16-LABEL: fmuladd_2.0_a_b_f16:671; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:672; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24673; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0674; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)675; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v0676; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)677; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc678; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)679; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc680; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)681; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_fmac_f16_e32 v2, 2.0, v1682; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v2, s[0:1]683; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm684;685; GFX11-DENORM-CONTRACT-TRUE16-LABEL: fmuladd_2.0_a_b_f16:686; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:687; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24688; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0689; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)690; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v0691; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)692; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc693; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)694; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc695; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)696; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fmac_f16_e32 v0.h, 2.0, v0.l697; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_d16_hi_b16 v1, v0, s[0:1]698; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm699;700; GFX11-DENORM-CONTRACT-FAKE16-LABEL: fmuladd_2.0_a_b_f16:701; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:702; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24703; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0704; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)705; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v0706; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)707; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc708; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)709; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc710; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)711; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fmac_f16_e32 v2, 2.0, v1712; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v2, s[0:1]713; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm714  %tid = call i32 @llvm.amdgcn.workitem.id.x()715  %gep.0 = getelementptr half, ptr addrspace(1) %out, i32 %tid716  %gep.1 = getelementptr half, ptr addrspace(1) %gep.0, i32 1717  %gep.out = getelementptr half, ptr addrspace(1) %out, i32 %tid718 719  %r1 = load volatile half, ptr addrspace(1) %gep.0720  %r2 = load volatile half, ptr addrspace(1) %gep.1721 722  %r3 = tail call half @llvm.fmuladd.f16(half 2.0, half %r1, half %r2)723  store half %r3, ptr addrspace(1) %gep.out724  ret void725}726 727define amdgpu_kernel void @fmuladd_a_2.0_b_f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {728; VI-FLUSH-LABEL: fmuladd_a_2.0_b_f16:729; VI-FLUSH:       ; %bb.0:730; VI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24731; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v0732; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)733; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s1734; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v0735; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc736; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v0737; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc738; VI-FLUSH-NEXT:    flat_load_ushort v4, v[0:1] glc739; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)740; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc741; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)742; VI-FLUSH-NEXT:    v_mac_f16_e32 v2, 2.0, v4743; VI-FLUSH-NEXT:    flat_store_short v[0:1], v2744; VI-FLUSH-NEXT:    s_endpgm745;746; VI-DENORM-LABEL: fmuladd_a_2.0_b_f16:747; VI-DENORM:       ; %bb.0:748; VI-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24749; VI-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 1, v0750; VI-DENORM-NEXT:    s_waitcnt lgkmcnt(0)751; VI-DENORM-NEXT:    v_mov_b32_e32 v1, s1752; VI-DENORM-NEXT:    v_add_u32_e32 v0, vcc, s0, v0753; VI-DENORM-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc754; VI-DENORM-NEXT:    v_add_u32_e32 v2, vcc, 2, v0755; VI-DENORM-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc756; VI-DENORM-NEXT:    flat_load_ushort v4, v[0:1] glc757; VI-DENORM-NEXT:    s_waitcnt vmcnt(0)758; VI-DENORM-NEXT:    flat_load_ushort v2, v[2:3] glc759; VI-DENORM-NEXT:    s_waitcnt vmcnt(0)760; VI-DENORM-NEXT:    v_fma_f16 v2, v4, 2.0, v2761; VI-DENORM-NEXT:    flat_store_short v[0:1], v2762; VI-DENORM-NEXT:    s_endpgm763;764; GFX10-FLUSH-LABEL: fmuladd_a_2.0_b_f16:765; GFX10-FLUSH:       ; %bb.0:766; GFX10-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24767; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v0768; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)769; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc770; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)771; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc772; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)773; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v1774; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v2775; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]776; GFX10-FLUSH-NEXT:    s_endpgm777;778; GFX10-DENORM-LABEL: fmuladd_a_2.0_b_f16:779; GFX10-DENORM:       ; %bb.0:780; GFX10-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24781; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 1, v0782; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)783; GFX10-DENORM-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc784; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)785; GFX10-DENORM-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc786; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)787; GFX10-DENORM-NEXT:    v_fmac_f16_e32 v2, 2.0, v1788; GFX10-DENORM-NEXT:    global_store_short v0, v2, s[0:1]789; GFX10-DENORM-NEXT:    s_endpgm790;791; GFX11-FLUSH-TRUE16-LABEL: fmuladd_a_2.0_b_f16:792; GFX11-FLUSH-TRUE16:       ; %bb.0:793; GFX11-FLUSH-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24794; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0795; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)796; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v0797; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)798; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc799; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)800; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc801; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)802; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.l803; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)804; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.h805; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]806; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm807;808; GFX11-FLUSH-FAKE16-LABEL: fmuladd_a_2.0_b_f16:809; GFX11-FLUSH-FAKE16:       ; %bb.0:810; GFX11-FLUSH-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24811; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0812; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)813; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v0814; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)815; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc816; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)817; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc818; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)819; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v1820; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)821; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v2822; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]823; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm824;825; GFX11-DENORM-STRICT-TRUE16-LABEL: fmuladd_a_2.0_b_f16:826; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:827; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24828; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0829; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)830; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v0831; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)832; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc833; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)834; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc835; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)836; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_fmac_f16_e32 v0.h, 2.0, v0.l837; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_d16_hi_b16 v1, v0, s[0:1]838; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm839;840; GFX11-DENORM-STRICT-FAKE16-LABEL: fmuladd_a_2.0_b_f16:841; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:842; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24843; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0844; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)845; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v0846; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)847; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc848; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)849; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc850; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)851; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_fmac_f16_e32 v2, 2.0, v1852; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v2, s[0:1]853; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm854;855; GFX11-DENORM-CONTRACT-TRUE16-LABEL: fmuladd_a_2.0_b_f16:856; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:857; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24858; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0859; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)860; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v0861; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)862; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc863; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)864; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc865; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)866; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fmac_f16_e32 v0.h, 2.0, v0.l867; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_d16_hi_b16 v1, v0, s[0:1]868; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm869;870; GFX11-DENORM-CONTRACT-FAKE16-LABEL: fmuladd_a_2.0_b_f16:871; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:872; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24873; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0874; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)875; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v0876; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)877; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc878; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)879; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc880; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)881; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fmac_f16_e32 v2, 2.0, v1882; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v2, s[0:1]883; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm884  %tid = call i32 @llvm.amdgcn.workitem.id.x()885  %gep.0 = getelementptr half, ptr addrspace(1) %out, i32 %tid886  %gep.1 = getelementptr half, ptr addrspace(1) %gep.0, i32 1887  %gep.out = getelementptr half, ptr addrspace(1) %out, i32 %tid888 889  %r1 = load volatile half, ptr addrspace(1) %gep.0890  %r2 = load volatile half, ptr addrspace(1) %gep.1891 892  %r3 = tail call half @llvm.fmuladd.f16(half %r1, half 2.0, half %r2)893  store half %r3, ptr addrspace(1) %gep.out894  ret void895}896 897define amdgpu_kernel void @fadd_a_a_b_f16(ptr addrspace(1) %out,898; VI-FLUSH-LABEL: fadd_a_a_b_f16:899; VI-FLUSH:       ; %bb.0:900; VI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24901; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v0902; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)903; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s1904; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v0905; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc906; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v0907; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc908; VI-FLUSH-NEXT:    flat_load_ushort v4, v[0:1] glc909; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)910; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc911; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)912; VI-FLUSH-NEXT:    v_mac_f16_e32 v2, 2.0, v4913; VI-FLUSH-NEXT:    flat_store_short v[0:1], v2914; VI-FLUSH-NEXT:    s_endpgm915;916; VI-DENORM-CONTRACT-LABEL: fadd_a_a_b_f16:917; VI-DENORM-CONTRACT:       ; %bb.0:918; VI-DENORM-CONTRACT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24919; VI-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 1, v0920; VI-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)921; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s1922; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s0, v0923; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc924; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v2, vcc, 2, v0925; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc926; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v4, v[0:1] glc927; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)928; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v2, v[2:3] glc929; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)930; VI-DENORM-CONTRACT-NEXT:    v_fma_f16 v2, v4, 2.0, v2931; VI-DENORM-CONTRACT-NEXT:    flat_store_short v[0:1], v2932; VI-DENORM-CONTRACT-NEXT:    s_endpgm933;934; GFX10-FLUSH-LABEL: fadd_a_a_b_f16:935; GFX10-FLUSH:       ; %bb.0:936; GFX10-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24937; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v0938; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)939; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc940; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)941; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc942; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)943; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v1944; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v2945; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]946; GFX10-FLUSH-NEXT:    s_endpgm947;948; GFX10-DENORM-STRICT-LABEL: fadd_a_a_b_f16:949; GFX10-DENORM-STRICT:       ; %bb.0:950; GFX10-DENORM-STRICT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24951; GFX10-DENORM-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 1, v0952; GFX10-DENORM-STRICT-NEXT:    s_waitcnt lgkmcnt(0)953; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc954; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)955; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc956; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)957; GFX10-DENORM-STRICT-NEXT:    v_add_f16_e32 v1, v1, v1958; GFX10-DENORM-STRICT-NEXT:    v_add_f16_e32 v1, v1, v2959; GFX10-DENORM-STRICT-NEXT:    global_store_short v0, v1, s[0:1]960; GFX10-DENORM-STRICT-NEXT:    s_endpgm961;962; GFX10-DENORM-CONTRACT-LABEL: fadd_a_a_b_f16:963; GFX10-DENORM-CONTRACT:       ; %bb.0:964; GFX10-DENORM-CONTRACT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24965; GFX10-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 1, v0966; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)967; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc968; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)969; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc970; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)971; GFX10-DENORM-CONTRACT-NEXT:    v_fmac_f16_e32 v2, 2.0, v1972; GFX10-DENORM-CONTRACT-NEXT:    global_store_short v0, v2, s[0:1]973; GFX10-DENORM-CONTRACT-NEXT:    s_endpgm974;975; GFX11-FLUSH-TRUE16-LABEL: fadd_a_a_b_f16:976; GFX11-FLUSH-TRUE16:       ; %bb.0:977; GFX11-FLUSH-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24978; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0979; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)980; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v0981; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)982; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc983; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)984; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc985; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)986; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.l987; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)988; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.h989; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]990; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm991;992; GFX11-FLUSH-FAKE16-LABEL: fadd_a_a_b_f16:993; GFX11-FLUSH-FAKE16:       ; %bb.0:994; GFX11-FLUSH-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24995; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v0996; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)997; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v0998; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)999; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1000; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)1001; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1002; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)1003; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v11004; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1005; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v21006; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]1007; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm1008;1009; GFX11-DENORM-STRICT-TRUE16-LABEL: fadd_a_a_b_f16:1010; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:1011; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241012; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01013; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1014; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01015; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1016; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1017; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1018; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1019; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1020; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.l1021; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1022; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.h1023; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]1024; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm1025;1026; GFX11-DENORM-STRICT-FAKE16-LABEL: fadd_a_a_b_f16:1027; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:1028; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241029; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01030; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1031; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01032; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1033; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1034; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1035; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1036; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1037; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v11038; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1039; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v21040; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]1041; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm1042;1043; GFX11-DENORM-CONTRACT-TRUE16-LABEL: fadd_a_a_b_f16:1044; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:1045; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241046; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01047; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1048; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01049; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1050; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1051; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1052; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1053; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1054; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fmac_f16_e32 v0.h, 2.0, v0.l1055; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_d16_hi_b16 v1, v0, s[0:1]1056; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm1057;1058; GFX11-DENORM-CONTRACT-FAKE16-LABEL: fadd_a_a_b_f16:1059; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:1060; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241061; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01062; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1063; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01064; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1065; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1066; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1067; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1068; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1069; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fmac_f16_e32 v2, 2.0, v11070; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v2, s[0:1]1071; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm1072                            ptr addrspace(1) %in1,1073                            ptr addrspace(1) %in2) #0 {1074  %tid = call i32 @llvm.amdgcn.workitem.id.x()1075  %gep.0 = getelementptr half, ptr addrspace(1) %out, i32 %tid1076  %gep.1 = getelementptr half, ptr addrspace(1) %gep.0, i32 11077  %gep.out = getelementptr half, ptr addrspace(1) %out, i32 %tid1078 1079  %r0 = load volatile half, ptr addrspace(1) %gep.01080  %r1 = load volatile half, ptr addrspace(1) %gep.11081 1082  %add.0 = fadd half %r0, %r01083  %add.1 = fadd half %add.0, %r11084  store half %add.1, ptr addrspace(1) %gep.out1085  ret void1086}1087 1088define amdgpu_kernel void @fadd_b_a_a_f16(ptr addrspace(1) %out,1089; VI-FLUSH-LABEL: fadd_b_a_a_f16:1090; VI-FLUSH:       ; %bb.0:1091; VI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241092; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v01093; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1094; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s11095; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v01096; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1097; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v01098; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc1099; VI-FLUSH-NEXT:    flat_load_ushort v4, v[0:1] glc1100; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1101; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc1102; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1103; VI-FLUSH-NEXT:    v_mac_f16_e32 v2, 2.0, v41104; VI-FLUSH-NEXT:    flat_store_short v[0:1], v21105; VI-FLUSH-NEXT:    s_endpgm1106;1107; VI-DENORM-CONTRACT-LABEL: fadd_b_a_a_f16:1108; VI-DENORM-CONTRACT:       ; %bb.0:1109; VI-DENORM-CONTRACT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241110; VI-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 1, v01111; VI-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)1112; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s11113; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s0, v01114; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1115; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v2, vcc, 2, v01116; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc1117; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v4, v[0:1] glc1118; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)1119; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v2, v[2:3] glc1120; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)1121; VI-DENORM-CONTRACT-NEXT:    v_fma_f16 v2, v4, 2.0, v21122; VI-DENORM-CONTRACT-NEXT:    flat_store_short v[0:1], v21123; VI-DENORM-CONTRACT-NEXT:    s_endpgm1124;1125; GFX10-FLUSH-LABEL: fadd_b_a_a_f16:1126; GFX10-FLUSH:       ; %bb.0:1127; GFX10-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241128; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v01129; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1130; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc1131; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1132; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc1133; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1134; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v11135; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v2, v11136; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]1137; GFX10-FLUSH-NEXT:    s_endpgm1138;1139; GFX10-DENORM-STRICT-LABEL: fadd_b_a_a_f16:1140; GFX10-DENORM-STRICT:       ; %bb.0:1141; GFX10-DENORM-STRICT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241142; GFX10-DENORM-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 1, v01143; GFX10-DENORM-STRICT-NEXT:    s_waitcnt lgkmcnt(0)1144; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc1145; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)1146; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc1147; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)1148; GFX10-DENORM-STRICT-NEXT:    v_add_f16_e32 v1, v1, v11149; GFX10-DENORM-STRICT-NEXT:    v_add_f16_e32 v1, v2, v11150; GFX10-DENORM-STRICT-NEXT:    global_store_short v0, v1, s[0:1]1151; GFX10-DENORM-STRICT-NEXT:    s_endpgm1152;1153; GFX10-DENORM-CONTRACT-LABEL: fadd_b_a_a_f16:1154; GFX10-DENORM-CONTRACT:       ; %bb.0:1155; GFX10-DENORM-CONTRACT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241156; GFX10-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 1, v01157; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)1158; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc1159; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)1160; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc1161; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)1162; GFX10-DENORM-CONTRACT-NEXT:    v_fmac_f16_e32 v2, 2.0, v11163; GFX10-DENORM-CONTRACT-NEXT:    global_store_short v0, v2, s[0:1]1164; GFX10-DENORM-CONTRACT-NEXT:    s_endpgm1165;1166; GFX11-FLUSH-TRUE16-LABEL: fadd_b_a_a_f16:1167; GFX11-FLUSH-TRUE16:       ; %bb.0:1168; GFX11-FLUSH-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241169; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01170; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1171; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01172; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1173; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1174; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)1175; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1176; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)1177; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.l1178; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1179; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.h, v0.l1180; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]1181; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm1182;1183; GFX11-FLUSH-FAKE16-LABEL: fadd_b_a_a_f16:1184; GFX11-FLUSH-FAKE16:       ; %bb.0:1185; GFX11-FLUSH-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241186; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01187; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1188; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01189; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1190; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1191; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)1192; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1193; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)1194; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v11195; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1196; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v2, v11197; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]1198; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm1199;1200; GFX11-DENORM-STRICT-TRUE16-LABEL: fadd_b_a_a_f16:1201; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:1202; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241203; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01204; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1205; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01206; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1207; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1208; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1209; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1210; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1211; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.l1212; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1213; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.h, v0.l1214; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]1215; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm1216;1217; GFX11-DENORM-STRICT-FAKE16-LABEL: fadd_b_a_a_f16:1218; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:1219; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241220; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01221; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1222; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01223; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1224; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1225; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1226; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1227; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1228; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v11229; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1230; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_add_f16_e32 v1, v2, v11231; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]1232; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm1233;1234; GFX11-DENORM-CONTRACT-TRUE16-LABEL: fadd_b_a_a_f16:1235; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:1236; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241237; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01238; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1239; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01240; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1241; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1242; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1243; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1244; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1245; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fmac_f16_e32 v0.h, 2.0, v0.l1246; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_d16_hi_b16 v1, v0, s[0:1]1247; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm1248;1249; GFX11-DENORM-CONTRACT-FAKE16-LABEL: fadd_b_a_a_f16:1250; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:1251; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241252; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01253; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1254; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01255; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1256; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1257; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1258; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1259; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1260; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fmac_f16_e32 v2, 2.0, v11261; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v2, s[0:1]1262; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm1263                            ptr addrspace(1) %in1,1264                            ptr addrspace(1) %in2) #0 {1265  %tid = call i32 @llvm.amdgcn.workitem.id.x()1266  %gep.0 = getelementptr half, ptr addrspace(1) %out, i32 %tid1267  %gep.1 = getelementptr half, ptr addrspace(1) %gep.0, i32 11268  %gep.out = getelementptr half, ptr addrspace(1) %out, i32 %tid1269 1270  %r0 = load volatile half, ptr addrspace(1) %gep.01271  %r1 = load volatile half, ptr addrspace(1) %gep.11272 1273  %add.0 = fadd half %r0, %r01274  %add.1 = fadd half %r1, %add.01275  store half %add.1, ptr addrspace(1) %gep.out1276  ret void1277}1278 1279define amdgpu_kernel void @fmuladd_neg_2.0_a_b_f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1280; VI-FLUSH-LABEL: fmuladd_neg_2.0_a_b_f16:1281; VI-FLUSH:       ; %bb.0:1282; VI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241283; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v01284; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1285; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s11286; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v01287; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1288; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v01289; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc1290; VI-FLUSH-NEXT:    flat_load_ushort v4, v[0:1] glc1291; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1292; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc1293; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1294; VI-FLUSH-NEXT:    v_mac_f16_e32 v2, -2.0, v41295; VI-FLUSH-NEXT:    flat_store_short v[0:1], v21296; VI-FLUSH-NEXT:    s_endpgm1297;1298; VI-DENORM-LABEL: fmuladd_neg_2.0_a_b_f16:1299; VI-DENORM:       ; %bb.0:1300; VI-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241301; VI-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 1, v01302; VI-DENORM-NEXT:    s_waitcnt lgkmcnt(0)1303; VI-DENORM-NEXT:    v_mov_b32_e32 v1, s11304; VI-DENORM-NEXT:    v_add_u32_e32 v0, vcc, s0, v01305; VI-DENORM-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1306; VI-DENORM-NEXT:    v_add_u32_e32 v2, vcc, 2, v01307; VI-DENORM-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc1308; VI-DENORM-NEXT:    flat_load_ushort v4, v[0:1] glc1309; VI-DENORM-NEXT:    s_waitcnt vmcnt(0)1310; VI-DENORM-NEXT:    flat_load_ushort v2, v[2:3] glc1311; VI-DENORM-NEXT:    s_waitcnt vmcnt(0)1312; VI-DENORM-NEXT:    v_fma_f16 v2, v4, -2.0, v21313; VI-DENORM-NEXT:    flat_store_short v[0:1], v21314; VI-DENORM-NEXT:    s_endpgm1315;1316; GFX10-FLUSH-LABEL: fmuladd_neg_2.0_a_b_f16:1317; GFX10-FLUSH:       ; %bb.0:1318; GFX10-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241319; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v01320; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1321; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc1322; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1323; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc1324; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1325; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v11326; GFX10-FLUSH-NEXT:    v_sub_f16_e32 v1, v2, v11327; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]1328; GFX10-FLUSH-NEXT:    s_endpgm1329;1330; GFX10-DENORM-LABEL: fmuladd_neg_2.0_a_b_f16:1331; GFX10-DENORM:       ; %bb.0:1332; GFX10-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241333; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 1, v01334; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)1335; GFX10-DENORM-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc1336; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1337; GFX10-DENORM-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc1338; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1339; GFX10-DENORM-NEXT:    v_fmac_f16_e32 v2, -2.0, v11340; GFX10-DENORM-NEXT:    global_store_short v0, v2, s[0:1]1341; GFX10-DENORM-NEXT:    s_endpgm1342;1343; GFX11-FLUSH-TRUE16-LABEL: fmuladd_neg_2.0_a_b_f16:1344; GFX11-FLUSH-TRUE16:       ; %bb.0:1345; GFX11-FLUSH-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241346; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01347; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1348; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01349; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1350; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1351; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)1352; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1353; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)1354; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.l1355; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1356; GFX11-FLUSH-TRUE16-NEXT:    v_sub_f16_e32 v0.l, v0.h, v0.l1357; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]1358; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm1359;1360; GFX11-FLUSH-FAKE16-LABEL: fmuladd_neg_2.0_a_b_f16:1361; GFX11-FLUSH-FAKE16:       ; %bb.0:1362; GFX11-FLUSH-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241363; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01364; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1365; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01366; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1367; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1368; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)1369; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1370; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)1371; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v11372; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1373; GFX11-FLUSH-FAKE16-NEXT:    v_sub_f16_e32 v1, v2, v11374; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]1375; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm1376;1377; GFX11-DENORM-STRICT-TRUE16-LABEL: fmuladd_neg_2.0_a_b_f16:1378; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:1379; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241380; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01381; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1382; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01383; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1384; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1385; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1386; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1387; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1388; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_fmac_f16_e32 v0.h, -2.0, v0.l1389; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_d16_hi_b16 v1, v0, s[0:1]1390; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm1391;1392; GFX11-DENORM-STRICT-FAKE16-LABEL: fmuladd_neg_2.0_a_b_f16:1393; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:1394; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241395; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01396; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1397; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01398; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1399; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1400; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1401; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1402; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1403; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_fmac_f16_e32 v2, -2.0, v11404; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v2, s[0:1]1405; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm1406;1407; GFX11-DENORM-CONTRACT-TRUE16-LABEL: fmuladd_neg_2.0_a_b_f16:1408; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:1409; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241410; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01411; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1412; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01413; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1414; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1415; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1416; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1417; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1418; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fmac_f16_e32 v0.h, -2.0, v0.l1419; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_d16_hi_b16 v1, v0, s[0:1]1420; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm1421;1422; GFX11-DENORM-CONTRACT-FAKE16-LABEL: fmuladd_neg_2.0_a_b_f16:1423; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:1424; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241425; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01426; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1427; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01428; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1429; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1430; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1431; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1432; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1433; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fmac_f16_e32 v2, -2.0, v11434; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v2, s[0:1]1435; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm1436  %tid = call i32 @llvm.amdgcn.workitem.id.x()1437  %gep.0 = getelementptr half, ptr addrspace(1) %out, i32 %tid1438  %gep.1 = getelementptr half, ptr addrspace(1) %gep.0, i32 11439  %gep.out = getelementptr half, ptr addrspace(1) %out, i32 %tid1440 1441  %r1 = load volatile half, ptr addrspace(1) %gep.01442  %r2 = load volatile half, ptr addrspace(1) %gep.11443 1444  %r3 = tail call half @llvm.fmuladd.f16(half -2.0, half %r1, half %r2)1445  store half %r3, ptr addrspace(1) %gep.out1446  ret void1447}1448 1449define amdgpu_kernel void @fmuladd_neg_2.0_neg_a_b_f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1450; VI-FLUSH-LABEL: fmuladd_neg_2.0_neg_a_b_f16:1451; VI-FLUSH:       ; %bb.0:1452; VI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241453; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v01454; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1455; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s11456; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v01457; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1458; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v01459; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc1460; VI-FLUSH-NEXT:    flat_load_ushort v4, v[0:1] glc1461; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1462; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc1463; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1464; VI-FLUSH-NEXT:    v_mac_f16_e32 v2, 2.0, v41465; VI-FLUSH-NEXT:    flat_store_short v[0:1], v21466; VI-FLUSH-NEXT:    s_endpgm1467;1468; VI-DENORM-LABEL: fmuladd_neg_2.0_neg_a_b_f16:1469; VI-DENORM:       ; %bb.0:1470; VI-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241471; VI-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 1, v01472; VI-DENORM-NEXT:    s_waitcnt lgkmcnt(0)1473; VI-DENORM-NEXT:    v_mov_b32_e32 v1, s11474; VI-DENORM-NEXT:    v_add_u32_e32 v0, vcc, s0, v01475; VI-DENORM-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1476; VI-DENORM-NEXT:    v_add_u32_e32 v2, vcc, 2, v01477; VI-DENORM-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc1478; VI-DENORM-NEXT:    flat_load_ushort v4, v[0:1] glc1479; VI-DENORM-NEXT:    s_waitcnt vmcnt(0)1480; VI-DENORM-NEXT:    flat_load_ushort v2, v[2:3] glc1481; VI-DENORM-NEXT:    s_waitcnt vmcnt(0)1482; VI-DENORM-NEXT:    v_fma_f16 v2, v4, 2.0, v21483; VI-DENORM-NEXT:    flat_store_short v[0:1], v21484; VI-DENORM-NEXT:    s_endpgm1485;1486; GFX10-FLUSH-LABEL: fmuladd_neg_2.0_neg_a_b_f16:1487; GFX10-FLUSH:       ; %bb.0:1488; GFX10-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241489; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v01490; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1491; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc1492; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1493; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc1494; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1495; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v11496; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v2, v11497; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]1498; GFX10-FLUSH-NEXT:    s_endpgm1499;1500; GFX10-DENORM-LABEL: fmuladd_neg_2.0_neg_a_b_f16:1501; GFX10-DENORM:       ; %bb.0:1502; GFX10-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241503; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 1, v01504; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)1505; GFX10-DENORM-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc1506; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1507; GFX10-DENORM-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc1508; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1509; GFX10-DENORM-NEXT:    v_fmac_f16_e32 v2, 2.0, v11510; GFX10-DENORM-NEXT:    global_store_short v0, v2, s[0:1]1511; GFX10-DENORM-NEXT:    s_endpgm1512;1513; GFX11-FLUSH-TRUE16-LABEL: fmuladd_neg_2.0_neg_a_b_f16:1514; GFX11-FLUSH-TRUE16:       ; %bb.0:1515; GFX11-FLUSH-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241516; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01517; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1518; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01519; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1520; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1521; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)1522; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1523; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)1524; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.l1525; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1526; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.h, v0.l1527; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]1528; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm1529;1530; GFX11-FLUSH-FAKE16-LABEL: fmuladd_neg_2.0_neg_a_b_f16:1531; GFX11-FLUSH-FAKE16:       ; %bb.0:1532; GFX11-FLUSH-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241533; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01534; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1535; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01536; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1537; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1538; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)1539; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1540; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)1541; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v11542; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1543; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v2, v11544; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]1545; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm1546;1547; GFX11-DENORM-STRICT-TRUE16-LABEL: fmuladd_neg_2.0_neg_a_b_f16:1548; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:1549; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241550; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01551; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1552; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01553; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1554; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1555; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1556; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1557; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1558; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_fmac_f16_e32 v0.h, 2.0, v0.l1559; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_d16_hi_b16 v1, v0, s[0:1]1560; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm1561;1562; GFX11-DENORM-STRICT-FAKE16-LABEL: fmuladd_neg_2.0_neg_a_b_f16:1563; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:1564; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241565; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01566; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1567; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01568; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1569; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1570; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1571; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1572; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1573; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_fmac_f16_e32 v2, 2.0, v11574; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v2, s[0:1]1575; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm1576;1577; GFX11-DENORM-CONTRACT-TRUE16-LABEL: fmuladd_neg_2.0_neg_a_b_f16:1578; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:1579; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241580; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01581; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1582; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01583; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1584; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1585; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1586; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1587; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1588; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fmac_f16_e32 v0.h, 2.0, v0.l1589; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_d16_hi_b16 v1, v0, s[0:1]1590; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm1591;1592; GFX11-DENORM-CONTRACT-FAKE16-LABEL: fmuladd_neg_2.0_neg_a_b_f16:1593; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:1594; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241595; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01596; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1597; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01598; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1599; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1600; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1601; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1602; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1603; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fmac_f16_e32 v2, 2.0, v11604; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v2, s[0:1]1605; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm1606  %tid = call i32 @llvm.amdgcn.workitem.id.x()1607  %gep.0 = getelementptr half, ptr addrspace(1) %out, i32 %tid1608  %gep.1 = getelementptr half, ptr addrspace(1) %gep.0, i32 11609  %gep.out = getelementptr half, ptr addrspace(1) %out, i32 %tid1610 1611  %r1 = load volatile half, ptr addrspace(1) %gep.01612  %r2 = load volatile half, ptr addrspace(1) %gep.11613 1614  %r1.fneg = fneg half %r11615 1616  %r3 = tail call half @llvm.fmuladd.f16(half -2.0, half %r1.fneg, half %r2)1617  store half %r3, ptr addrspace(1) %gep.out1618  ret void1619}1620 1621define amdgpu_kernel void @fmuladd_2.0_neg_a_b_f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1622; VI-FLUSH-LABEL: fmuladd_2.0_neg_a_b_f16:1623; VI-FLUSH:       ; %bb.0:1624; VI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241625; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v01626; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1627; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s11628; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v01629; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1630; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v01631; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc1632; VI-FLUSH-NEXT:    flat_load_ushort v4, v[0:1] glc1633; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1634; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc1635; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1636; VI-FLUSH-NEXT:    v_mac_f16_e32 v2, -2.0, v41637; VI-FLUSH-NEXT:    flat_store_short v[0:1], v21638; VI-FLUSH-NEXT:    s_endpgm1639;1640; VI-DENORM-LABEL: fmuladd_2.0_neg_a_b_f16:1641; VI-DENORM:       ; %bb.0:1642; VI-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241643; VI-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 1, v01644; VI-DENORM-NEXT:    s_waitcnt lgkmcnt(0)1645; VI-DENORM-NEXT:    v_mov_b32_e32 v1, s11646; VI-DENORM-NEXT:    v_add_u32_e32 v0, vcc, s0, v01647; VI-DENORM-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1648; VI-DENORM-NEXT:    v_add_u32_e32 v2, vcc, 2, v01649; VI-DENORM-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc1650; VI-DENORM-NEXT:    flat_load_ushort v4, v[0:1] glc1651; VI-DENORM-NEXT:    s_waitcnt vmcnt(0)1652; VI-DENORM-NEXT:    flat_load_ushort v2, v[2:3] glc1653; VI-DENORM-NEXT:    s_waitcnt vmcnt(0)1654; VI-DENORM-NEXT:    v_fma_f16 v2, v4, -2.0, v21655; VI-DENORM-NEXT:    flat_store_short v[0:1], v21656; VI-DENORM-NEXT:    s_endpgm1657;1658; GFX10-FLUSH-LABEL: fmuladd_2.0_neg_a_b_f16:1659; GFX10-FLUSH:       ; %bb.0:1660; GFX10-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241661; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v01662; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1663; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc1664; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1665; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc1666; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1667; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v11668; GFX10-FLUSH-NEXT:    v_sub_f16_e32 v1, v2, v11669; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]1670; GFX10-FLUSH-NEXT:    s_endpgm1671;1672; GFX10-DENORM-LABEL: fmuladd_2.0_neg_a_b_f16:1673; GFX10-DENORM:       ; %bb.0:1674; GFX10-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241675; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 1, v01676; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)1677; GFX10-DENORM-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc1678; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1679; GFX10-DENORM-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc1680; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1681; GFX10-DENORM-NEXT:    v_fmac_f16_e32 v2, -2.0, v11682; GFX10-DENORM-NEXT:    global_store_short v0, v2, s[0:1]1683; GFX10-DENORM-NEXT:    s_endpgm1684;1685; GFX11-FLUSH-TRUE16-LABEL: fmuladd_2.0_neg_a_b_f16:1686; GFX11-FLUSH-TRUE16:       ; %bb.0:1687; GFX11-FLUSH-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241688; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01689; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1690; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01691; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1692; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1693; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)1694; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1695; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)1696; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.l1697; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1698; GFX11-FLUSH-TRUE16-NEXT:    v_sub_f16_e32 v0.l, v0.h, v0.l1699; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]1700; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm1701;1702; GFX11-FLUSH-FAKE16-LABEL: fmuladd_2.0_neg_a_b_f16:1703; GFX11-FLUSH-FAKE16:       ; %bb.0:1704; GFX11-FLUSH-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241705; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01706; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1707; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01708; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1709; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1710; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)1711; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1712; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)1713; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v11714; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1715; GFX11-FLUSH-FAKE16-NEXT:    v_sub_f16_e32 v1, v2, v11716; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]1717; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm1718;1719; GFX11-DENORM-STRICT-TRUE16-LABEL: fmuladd_2.0_neg_a_b_f16:1720; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:1721; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241722; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01723; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1724; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01725; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1726; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1727; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1728; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1729; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1730; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_fmac_f16_e32 v0.h, -2.0, v0.l1731; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_d16_hi_b16 v1, v0, s[0:1]1732; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm1733;1734; GFX11-DENORM-STRICT-FAKE16-LABEL: fmuladd_2.0_neg_a_b_f16:1735; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:1736; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241737; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01738; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1739; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01740; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1741; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1742; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1743; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1744; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1745; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_fmac_f16_e32 v2, -2.0, v11746; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v2, s[0:1]1747; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm1748;1749; GFX11-DENORM-CONTRACT-TRUE16-LABEL: fmuladd_2.0_neg_a_b_f16:1750; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:1751; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241752; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01753; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1754; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01755; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1756; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1757; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1758; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1759; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1760; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fmac_f16_e32 v0.h, -2.0, v0.l1761; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_d16_hi_b16 v1, v0, s[0:1]1762; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm1763;1764; GFX11-DENORM-CONTRACT-FAKE16-LABEL: fmuladd_2.0_neg_a_b_f16:1765; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:1766; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241767; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01768; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1769; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01770; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1771; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1772; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1773; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1774; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1775; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fmac_f16_e32 v2, -2.0, v11776; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v2, s[0:1]1777; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm1778  %tid = call i32 @llvm.amdgcn.workitem.id.x()1779  %gep.0 = getelementptr half, ptr addrspace(1) %out, i32 %tid1780  %gep.1 = getelementptr half, ptr addrspace(1) %gep.0, i32 11781  %gep.out = getelementptr half, ptr addrspace(1) %out, i32 %tid1782 1783  %r1 = load volatile half, ptr addrspace(1) %gep.01784  %r2 = load volatile half, ptr addrspace(1) %gep.11785 1786  %r1.fneg = fneg half %r11787 1788  %r3 = tail call half @llvm.fmuladd.f16(half 2.0, half %r1.fneg, half %r2)1789  store half %r3, ptr addrspace(1) %gep.out1790  ret void1791}1792 1793define amdgpu_kernel void @fmuladd_2.0_a_neg_b_f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1794; VI-FLUSH-LABEL: fmuladd_2.0_a_neg_b_f16:1795; VI-FLUSH:       ; %bb.0:1796; VI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241797; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v01798; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1799; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s11800; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v01801; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1802; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v01803; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc1804; VI-FLUSH-NEXT:    flat_load_ushort v4, v[0:1] glc1805; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1806; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc1807; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1808; VI-FLUSH-NEXT:    v_mad_f16 v2, v4, 2.0, -v21809; VI-FLUSH-NEXT:    flat_store_short v[0:1], v21810; VI-FLUSH-NEXT:    s_endpgm1811;1812; VI-DENORM-LABEL: fmuladd_2.0_a_neg_b_f16:1813; VI-DENORM:       ; %bb.0:1814; VI-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241815; VI-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 1, v01816; VI-DENORM-NEXT:    s_waitcnt lgkmcnt(0)1817; VI-DENORM-NEXT:    v_mov_b32_e32 v1, s11818; VI-DENORM-NEXT:    v_add_u32_e32 v0, vcc, s0, v01819; VI-DENORM-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1820; VI-DENORM-NEXT:    v_add_u32_e32 v2, vcc, 2, v01821; VI-DENORM-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc1822; VI-DENORM-NEXT:    flat_load_ushort v4, v[0:1] glc1823; VI-DENORM-NEXT:    s_waitcnt vmcnt(0)1824; VI-DENORM-NEXT:    flat_load_ushort v2, v[2:3] glc1825; VI-DENORM-NEXT:    s_waitcnt vmcnt(0)1826; VI-DENORM-NEXT:    v_fma_f16 v2, v4, 2.0, -v21827; VI-DENORM-NEXT:    flat_store_short v[0:1], v21828; VI-DENORM-NEXT:    s_endpgm1829;1830; GFX10-FLUSH-LABEL: fmuladd_2.0_a_neg_b_f16:1831; GFX10-FLUSH:       ; %bb.0:1832; GFX10-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241833; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v01834; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1835; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc1836; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1837; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc1838; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1839; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v11840; GFX10-FLUSH-NEXT:    v_sub_f16_e32 v1, v1, v21841; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]1842; GFX10-FLUSH-NEXT:    s_endpgm1843;1844; GFX10-DENORM-LABEL: fmuladd_2.0_a_neg_b_f16:1845; GFX10-DENORM:       ; %bb.0:1846; GFX10-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241847; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 1, v01848; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)1849; GFX10-DENORM-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc1850; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1851; GFX10-DENORM-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc1852; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1853; GFX10-DENORM-NEXT:    v_fma_f16 v1, v1, 2.0, -v21854; GFX10-DENORM-NEXT:    global_store_short v0, v1, s[0:1]1855; GFX10-DENORM-NEXT:    s_endpgm1856;1857; GFX11-FLUSH-TRUE16-LABEL: fmuladd_2.0_a_neg_b_f16:1858; GFX11-FLUSH-TRUE16:       ; %bb.0:1859; GFX11-FLUSH-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241860; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01861; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1862; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01863; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1864; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1865; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)1866; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1867; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)1868; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.l1869; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1870; GFX11-FLUSH-TRUE16-NEXT:    v_sub_f16_e32 v0.l, v0.l, v0.h1871; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]1872; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm1873;1874; GFX11-FLUSH-FAKE16-LABEL: fmuladd_2.0_a_neg_b_f16:1875; GFX11-FLUSH-FAKE16:       ; %bb.0:1876; GFX11-FLUSH-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241877; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01878; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1879; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01880; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1881; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1882; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)1883; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1884; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)1885; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v11886; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1887; GFX11-FLUSH-FAKE16-NEXT:    v_sub_f16_e32 v1, v1, v21888; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]1889; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm1890;1891; GFX11-DENORM-STRICT-TRUE16-LABEL: fmuladd_2.0_a_neg_b_f16:1892; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:1893; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241894; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01895; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1896; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01897; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1898; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1899; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1900; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1901; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1902; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_fma_f16 v0.l, v0.l, 2.0, -v0.h1903; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]1904; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm1905;1906; GFX11-DENORM-STRICT-FAKE16-LABEL: fmuladd_2.0_a_neg_b_f16:1907; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:1908; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241909; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01910; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1911; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01912; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1913; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1914; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1915; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1916; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1917; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_fma_f16 v1, v1, 2.0, -v21918; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]1919; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm1920;1921; GFX11-DENORM-CONTRACT-TRUE16-LABEL: fmuladd_2.0_a_neg_b_f16:1922; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:1923; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241924; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01925; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1926; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v01927; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)1928; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc1929; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1930; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc1931; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)1932; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fma_f16 v0.l, v0.l, 2.0, -v0.h1933; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]1934; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm1935;1936; GFX11-DENORM-CONTRACT-FAKE16-LABEL: fmuladd_2.0_a_neg_b_f16:1937; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:1938; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x241939; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v01940; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)1941; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v01942; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)1943; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc1944; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1945; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc1946; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)1947; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fma_f16 v1, v1, 2.0, -v21948; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]1949; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm1950  %tid = call i32 @llvm.amdgcn.workitem.id.x()1951  %gep.0 = getelementptr half, ptr addrspace(1) %out, i32 %tid1952  %gep.1 = getelementptr half, ptr addrspace(1) %gep.0, i32 11953  %gep.out = getelementptr half, ptr addrspace(1) %out, i32 %tid1954 1955  %r1 = load volatile half, ptr addrspace(1) %gep.01956  %r2 = load volatile half, ptr addrspace(1) %gep.11957 1958  %r2.fneg = fneg half %r21959 1960  %r3 = tail call half @llvm.fmuladd.f16(half 2.0, half %r1, half %r2.fneg)1961  store half %r3, ptr addrspace(1) %gep.out1962  ret void1963}1964 1965define amdgpu_kernel void @mad_sub_f16(ptr addrspace(1) noalias nocapture %out, ptr addrspace(1) noalias nocapture readonly %ptr) #1 {1966; VI-FLUSH-LABEL: mad_sub_f16:1967; VI-FLUSH:       ; %bb.0:1968; VI-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241969; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v6, 1, v01970; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1971; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s31972; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s2, v61973; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1974; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v01975; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc1976; VI-FLUSH-NEXT:    v_add_u32_e32 v4, vcc, 4, v01977; VI-FLUSH-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc1978; VI-FLUSH-NEXT:    flat_load_ushort v7, v[0:1] glc1979; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1980; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc1981; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1982; VI-FLUSH-NEXT:    flat_load_ushort v3, v[4:5] glc1983; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1984; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s11985; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v61986; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1987; VI-FLUSH-NEXT:    v_mad_f16 v2, v7, v2, -v31988; VI-FLUSH-NEXT:    flat_store_short v[0:1], v21989; VI-FLUSH-NEXT:    s_endpgm1990;1991; VI-DENORM-CONTRACT-LABEL: mad_sub_f16:1992; VI-DENORM-CONTRACT:       ; %bb.0:1993; VI-DENORM-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241994; VI-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v6, 1, v01995; VI-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)1996; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s31997; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s2, v61998; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1999; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v2, vcc, 2, v02000; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc2001; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v4, vcc, 4, v02002; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc2003; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v7, v[0:1] glc2004; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2005; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v2, v[2:3] glc2006; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2007; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v3, v[4:5] glc2008; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2009; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s12010; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s0, v62011; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2012; VI-DENORM-CONTRACT-NEXT:    v_fma_f16 v2, v7, v2, -v32013; VI-DENORM-CONTRACT-NEXT:    flat_store_short v[0:1], v22014; VI-DENORM-CONTRACT-NEXT:    s_endpgm2015;2016; GFX10-FLUSH-LABEL: mad_sub_f16:2017; GFX10-FLUSH:       ; %bb.0:2018; GFX10-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242019; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v02020; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2021; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc2022; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2023; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc2024; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2025; GFX10-FLUSH-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc2026; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2027; GFX10-FLUSH-NEXT:    v_mul_f16_e32 v1, v1, v22028; GFX10-FLUSH-NEXT:    v_sub_f16_e32 v1, v1, v32029; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]2030; GFX10-FLUSH-NEXT:    s_endpgm2031;2032; GFX10-DENORM-STRICT-LABEL: mad_sub_f16:2033; GFX10-DENORM-STRICT:       ; %bb.0:2034; GFX10-DENORM-STRICT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242035; GFX10-DENORM-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 1, v02036; GFX10-DENORM-STRICT-NEXT:    s_waitcnt lgkmcnt(0)2037; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc2038; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)2039; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc2040; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)2041; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc2042; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)2043; GFX10-DENORM-STRICT-NEXT:    v_mul_f16_e32 v1, v1, v22044; GFX10-DENORM-STRICT-NEXT:    v_sub_f16_e32 v1, v1, v32045; GFX10-DENORM-STRICT-NEXT:    global_store_short v0, v1, s[0:1]2046; GFX10-DENORM-STRICT-NEXT:    s_endpgm2047;2048; GFX10-DENORM-CONTRACT-LABEL: mad_sub_f16:2049; GFX10-DENORM-CONTRACT:       ; %bb.0:2050; GFX10-DENORM-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242051; GFX10-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 1, v02052; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)2053; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc2054; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2055; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc2056; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2057; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc2058; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2059; GFX10-DENORM-CONTRACT-NEXT:    v_fma_f16 v1, v1, v2, -v32060; GFX10-DENORM-CONTRACT-NEXT:    global_store_short v0, v1, s[0:1]2061; GFX10-DENORM-CONTRACT-NEXT:    s_endpgm2062;2063; GFX11-FLUSH-TRUE16-LABEL: mad_sub_f16:2064; GFX11-FLUSH-TRUE16:       ; %bb.0:2065; GFX11-FLUSH-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242066; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02067; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2068; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v02069; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2070; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc2071; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)2072; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc2073; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)2074; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc2075; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)2076; GFX11-FLUSH-TRUE16-NEXT:    v_mul_f16_e32 v0.l, v0.l, v0.h2077; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2078; GFX11-FLUSH-TRUE16-NEXT:    v_sub_f16_e32 v0.l, v0.l, v1.l2079; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]2080; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm2081;2082; GFX11-FLUSH-FAKE16-LABEL: mad_sub_f16:2083; GFX11-FLUSH-FAKE16:       ; %bb.0:2084; GFX11-FLUSH-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242085; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02086; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2087; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v02088; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2089; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc2090; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)2091; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc2092; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)2093; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc2094; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)2095; GFX11-FLUSH-FAKE16-NEXT:    v_mul_f16_e32 v1, v1, v22096; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2097; GFX11-FLUSH-FAKE16-NEXT:    v_sub_f16_e32 v1, v1, v32098; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]2099; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm2100;2101; GFX11-DENORM-STRICT-TRUE16-LABEL: mad_sub_f16:2102; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:2103; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242104; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02105; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2106; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v02107; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2108; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc2109; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2110; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc2111; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2112; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc2113; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2114; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_mul_f16_e32 v0.l, v0.l, v0.h2115; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2116; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_sub_f16_e32 v0.l, v0.l, v1.l2117; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]2118; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm2119;2120; GFX11-DENORM-STRICT-FAKE16-LABEL: mad_sub_f16:2121; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:2122; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242123; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02124; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2125; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v02126; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2127; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc2128; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2129; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc2130; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2131; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc2132; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2133; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_mul_f16_e32 v1, v1, v22134; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2135; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_sub_f16_e32 v1, v1, v32136; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]2137; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm2138;2139; GFX11-DENORM-CONTRACT-TRUE16-LABEL: mad_sub_f16:2140; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:2141; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242142; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02143; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2144; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v02145; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2146; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc2147; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2148; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc2149; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2150; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc2151; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2152; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fma_f16 v0.l, v0.l, v0.h, -v1.l2153; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]2154; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm2155;2156; GFX11-DENORM-CONTRACT-FAKE16-LABEL: mad_sub_f16:2157; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:2158; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242159; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02160; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2161; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v02162; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2163; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc2164; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2165; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc2166; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2167; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc2168; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2169; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fma_f16 v1, v1, v2, -v32170; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]2171; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm2172  %tid = tail call i32 @llvm.amdgcn.workitem.id.x() #02173  %tid.ext = sext i32 %tid to i642174  %gep0 = getelementptr half, ptr addrspace(1) %ptr, i64 %tid.ext2175  %add1 = add i64 %tid.ext, 12176  %gep1 = getelementptr half, ptr addrspace(1) %ptr, i64 %add12177  %add2 = add i64 %tid.ext, 22178  %gep2 = getelementptr half, ptr addrspace(1) %ptr, i64 %add22179  %outgep = getelementptr half, ptr addrspace(1) %out, i64 %tid.ext2180  %a = load volatile half, ptr addrspace(1) %gep0, align 22181  %b = load volatile half, ptr addrspace(1) %gep1, align 22182  %c = load volatile half, ptr addrspace(1) %gep2, align 22183  %mul = fmul half %a, %b2184  %sub = fsub half %mul, %c2185  store half %sub, ptr addrspace(1) %outgep, align 22186  ret void2187}2188 2189define amdgpu_kernel void @mad_sub_inv_f16(ptr addrspace(1) noalias nocapture %out, ptr addrspace(1) noalias nocapture readonly %ptr) #1 {2190; VI-FLUSH-LABEL: mad_sub_inv_f16:2191; VI-FLUSH:       ; %bb.0:2192; VI-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242193; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v6, 1, v02194; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2195; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s32196; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s2, v62197; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2198; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v02199; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc2200; VI-FLUSH-NEXT:    v_add_u32_e32 v4, vcc, 4, v02201; VI-FLUSH-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc2202; VI-FLUSH-NEXT:    flat_load_ushort v7, v[0:1] glc2203; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2204; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc2205; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2206; VI-FLUSH-NEXT:    flat_load_ushort v3, v[4:5] glc2207; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2208; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s12209; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v62210; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2211; VI-FLUSH-NEXT:    v_mad_f16 v2, -v7, v2, v32212; VI-FLUSH-NEXT:    flat_store_short v[0:1], v22213; VI-FLUSH-NEXT:    s_endpgm2214;2215; VI-DENORM-CONTRACT-LABEL: mad_sub_inv_f16:2216; VI-DENORM-CONTRACT:       ; %bb.0:2217; VI-DENORM-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242218; VI-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v6, 1, v02219; VI-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)2220; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s32221; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s2, v62222; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2223; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v2, vcc, 2, v02224; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc2225; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v4, vcc, 4, v02226; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc2227; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v7, v[0:1] glc2228; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2229; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v2, v[2:3] glc2230; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2231; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v3, v[4:5] glc2232; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2233; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s12234; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s0, v62235; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2236; VI-DENORM-CONTRACT-NEXT:    v_fma_f16 v2, -v7, v2, v32237; VI-DENORM-CONTRACT-NEXT:    flat_store_short v[0:1], v22238; VI-DENORM-CONTRACT-NEXT:    s_endpgm2239;2240; GFX10-FLUSH-LABEL: mad_sub_inv_f16:2241; GFX10-FLUSH:       ; %bb.0:2242; GFX10-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242243; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v02244; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2245; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc2246; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2247; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc2248; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2249; GFX10-FLUSH-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc2250; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2251; GFX10-FLUSH-NEXT:    v_mul_f16_e32 v1, v1, v22252; GFX10-FLUSH-NEXT:    v_sub_f16_e32 v1, v3, v12253; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]2254; GFX10-FLUSH-NEXT:    s_endpgm2255;2256; GFX10-DENORM-STRICT-LABEL: mad_sub_inv_f16:2257; GFX10-DENORM-STRICT:       ; %bb.0:2258; GFX10-DENORM-STRICT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242259; GFX10-DENORM-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 1, v02260; GFX10-DENORM-STRICT-NEXT:    s_waitcnt lgkmcnt(0)2261; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc2262; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)2263; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc2264; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)2265; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc2266; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)2267; GFX10-DENORM-STRICT-NEXT:    v_mul_f16_e32 v1, v1, v22268; GFX10-DENORM-STRICT-NEXT:    v_sub_f16_e32 v1, v3, v12269; GFX10-DENORM-STRICT-NEXT:    global_store_short v0, v1, s[0:1]2270; GFX10-DENORM-STRICT-NEXT:    s_endpgm2271;2272; GFX10-DENORM-CONTRACT-LABEL: mad_sub_inv_f16:2273; GFX10-DENORM-CONTRACT:       ; %bb.0:2274; GFX10-DENORM-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242275; GFX10-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 1, v02276; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)2277; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc2278; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2279; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc2280; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2281; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc2282; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2283; GFX10-DENORM-CONTRACT-NEXT:    v_fma_f16 v1, -v1, v2, v32284; GFX10-DENORM-CONTRACT-NEXT:    global_store_short v0, v1, s[0:1]2285; GFX10-DENORM-CONTRACT-NEXT:    s_endpgm2286;2287; GFX11-FLUSH-TRUE16-LABEL: mad_sub_inv_f16:2288; GFX11-FLUSH-TRUE16:       ; %bb.0:2289; GFX11-FLUSH-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242290; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02291; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2292; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v02293; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2294; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc2295; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)2296; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc2297; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)2298; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc2299; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)2300; GFX11-FLUSH-TRUE16-NEXT:    v_mul_f16_e32 v0.l, v0.l, v0.h2301; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2302; GFX11-FLUSH-TRUE16-NEXT:    v_sub_f16_e32 v0.l, v1.l, v0.l2303; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]2304; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm2305;2306; GFX11-FLUSH-FAKE16-LABEL: mad_sub_inv_f16:2307; GFX11-FLUSH-FAKE16:       ; %bb.0:2308; GFX11-FLUSH-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242309; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02310; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2311; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v02312; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2313; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc2314; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)2315; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc2316; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)2317; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc2318; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)2319; GFX11-FLUSH-FAKE16-NEXT:    v_mul_f16_e32 v1, v1, v22320; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2321; GFX11-FLUSH-FAKE16-NEXT:    v_sub_f16_e32 v1, v3, v12322; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]2323; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm2324;2325; GFX11-DENORM-STRICT-TRUE16-LABEL: mad_sub_inv_f16:2326; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:2327; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242328; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02329; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2330; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v02331; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2332; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc2333; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2334; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc2335; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2336; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc2337; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2338; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_mul_f16_e32 v0.l, v0.l, v0.h2339; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2340; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_sub_f16_e32 v0.l, v1.l, v0.l2341; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]2342; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm2343;2344; GFX11-DENORM-STRICT-FAKE16-LABEL: mad_sub_inv_f16:2345; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:2346; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242347; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02348; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2349; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v02350; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2351; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc2352; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2353; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc2354; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2355; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc2356; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2357; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_mul_f16_e32 v1, v1, v22358; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2359; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_sub_f16_e32 v1, v3, v12360; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]2361; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm2362;2363; GFX11-DENORM-CONTRACT-TRUE16-LABEL: mad_sub_inv_f16:2364; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:2365; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242366; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02367; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2368; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v02369; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2370; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc2371; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2372; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc2373; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2374; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc2375; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2376; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fma_f16 v0.l, -v0.l, v0.h, v1.l2377; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]2378; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm2379;2380; GFX11-DENORM-CONTRACT-FAKE16-LABEL: mad_sub_inv_f16:2381; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:2382; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242383; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02384; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2385; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v02386; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2387; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc2388; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2389; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc2390; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2391; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc2392; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2393; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fma_f16 v1, -v1, v2, v32394; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]2395; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm2396  %tid = tail call i32 @llvm.amdgcn.workitem.id.x() #02397  %tid.ext = sext i32 %tid to i642398  %gep0 = getelementptr half, ptr addrspace(1) %ptr, i64 %tid.ext2399  %add1 = add i64 %tid.ext, 12400  %gep1 = getelementptr half, ptr addrspace(1) %ptr, i64 %add12401  %add2 = add i64 %tid.ext, 22402  %gep2 = getelementptr half, ptr addrspace(1) %ptr, i64 %add22403  %outgep = getelementptr half, ptr addrspace(1) %out, i64 %tid.ext2404  %a = load volatile half, ptr addrspace(1) %gep0, align 22405  %b = load volatile half, ptr addrspace(1) %gep1, align 22406  %c = load volatile half, ptr addrspace(1) %gep2, align 22407  %mul = fmul half %a, %b2408  %sub = fsub half %c, %mul2409  store half %sub, ptr addrspace(1) %outgep, align 22410  ret void2411}2412 2413define amdgpu_kernel void @mad_sub_fabs_f16(ptr addrspace(1) noalias nocapture %out, ptr addrspace(1) noalias nocapture readonly %ptr) #1 {2414; VI-FLUSH-LABEL: mad_sub_fabs_f16:2415; VI-FLUSH:       ; %bb.0:2416; VI-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242417; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v6, 1, v02418; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2419; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s32420; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s2, v62421; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2422; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v02423; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc2424; VI-FLUSH-NEXT:    v_add_u32_e32 v4, vcc, 4, v02425; VI-FLUSH-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc2426; VI-FLUSH-NEXT:    flat_load_ushort v7, v[0:1] glc2427; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2428; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc2429; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2430; VI-FLUSH-NEXT:    flat_load_ushort v3, v[4:5] glc2431; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2432; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s12433; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v62434; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2435; VI-FLUSH-NEXT:    v_mad_f16 v2, v7, v2, -|v3|2436; VI-FLUSH-NEXT:    flat_store_short v[0:1], v22437; VI-FLUSH-NEXT:    s_endpgm2438;2439; VI-DENORM-CONTRACT-LABEL: mad_sub_fabs_f16:2440; VI-DENORM-CONTRACT:       ; %bb.0:2441; VI-DENORM-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242442; VI-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v6, 1, v02443; VI-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)2444; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s32445; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s2, v62446; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2447; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v2, vcc, 2, v02448; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc2449; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v4, vcc, 4, v02450; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc2451; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v7, v[0:1] glc2452; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2453; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v2, v[2:3] glc2454; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2455; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v3, v[4:5] glc2456; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2457; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s12458; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s0, v62459; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2460; VI-DENORM-CONTRACT-NEXT:    v_fma_f16 v2, v7, v2, -|v3|2461; VI-DENORM-CONTRACT-NEXT:    flat_store_short v[0:1], v22462; VI-DENORM-CONTRACT-NEXT:    s_endpgm2463;2464; GFX10-FLUSH-LABEL: mad_sub_fabs_f16:2465; GFX10-FLUSH:       ; %bb.0:2466; GFX10-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242467; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v02468; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2469; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc2470; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2471; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc2472; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2473; GFX10-FLUSH-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc2474; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2475; GFX10-FLUSH-NEXT:    v_mul_f16_e32 v1, v1, v22476; GFX10-FLUSH-NEXT:    v_sub_f16_e64 v1, v1, |v3|2477; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]2478; GFX10-FLUSH-NEXT:    s_endpgm2479;2480; GFX10-DENORM-STRICT-LABEL: mad_sub_fabs_f16:2481; GFX10-DENORM-STRICT:       ; %bb.0:2482; GFX10-DENORM-STRICT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242483; GFX10-DENORM-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 1, v02484; GFX10-DENORM-STRICT-NEXT:    s_waitcnt lgkmcnt(0)2485; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc2486; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)2487; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc2488; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)2489; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc2490; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)2491; GFX10-DENORM-STRICT-NEXT:    v_mul_f16_e32 v1, v1, v22492; GFX10-DENORM-STRICT-NEXT:    v_sub_f16_e64 v1, v1, |v3|2493; GFX10-DENORM-STRICT-NEXT:    global_store_short v0, v1, s[0:1]2494; GFX10-DENORM-STRICT-NEXT:    s_endpgm2495;2496; GFX10-DENORM-CONTRACT-LABEL: mad_sub_fabs_f16:2497; GFX10-DENORM-CONTRACT:       ; %bb.0:2498; GFX10-DENORM-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242499; GFX10-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 1, v02500; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)2501; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc2502; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2503; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc2504; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2505; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc2506; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2507; GFX10-DENORM-CONTRACT-NEXT:    v_fma_f16 v1, v1, v2, -|v3|2508; GFX10-DENORM-CONTRACT-NEXT:    global_store_short v0, v1, s[0:1]2509; GFX10-DENORM-CONTRACT-NEXT:    s_endpgm2510;2511; GFX11-FLUSH-TRUE16-LABEL: mad_sub_fabs_f16:2512; GFX11-FLUSH-TRUE16:       ; %bb.0:2513; GFX11-FLUSH-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242514; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02515; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2516; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v02517; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2518; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc2519; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)2520; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc2521; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)2522; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc2523; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)2524; GFX11-FLUSH-TRUE16-NEXT:    v_mul_f16_e32 v0.l, v0.l, v0.h2525; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2526; GFX11-FLUSH-TRUE16-NEXT:    v_sub_f16_e64 v0.l, v0.l, |v1.l|2527; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]2528; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm2529;2530; GFX11-FLUSH-FAKE16-LABEL: mad_sub_fabs_f16:2531; GFX11-FLUSH-FAKE16:       ; %bb.0:2532; GFX11-FLUSH-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242533; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02534; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2535; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v02536; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2537; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc2538; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)2539; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc2540; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)2541; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc2542; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)2543; GFX11-FLUSH-FAKE16-NEXT:    v_mul_f16_e32 v1, v1, v22544; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2545; GFX11-FLUSH-FAKE16-NEXT:    v_sub_f16_e64 v1, v1, |v3|2546; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]2547; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm2548;2549; GFX11-DENORM-STRICT-TRUE16-LABEL: mad_sub_fabs_f16:2550; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:2551; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242552; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02553; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2554; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v02555; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2556; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc2557; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2558; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc2559; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2560; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc2561; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2562; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_mul_f16_e32 v0.l, v0.l, v0.h2563; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2564; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_sub_f16_e64 v0.l, v0.l, |v1.l|2565; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]2566; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm2567;2568; GFX11-DENORM-STRICT-FAKE16-LABEL: mad_sub_fabs_f16:2569; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:2570; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242571; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02572; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2573; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v02574; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2575; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc2576; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2577; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc2578; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2579; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc2580; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2581; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_mul_f16_e32 v1, v1, v22582; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2583; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_sub_f16_e64 v1, v1, |v3|2584; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]2585; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm2586;2587; GFX11-DENORM-CONTRACT-TRUE16-LABEL: mad_sub_fabs_f16:2588; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:2589; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242590; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02591; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2592; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v02593; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2594; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc2595; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2596; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc2597; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2598; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc2599; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2600; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fma_f16 v0.l, v0.l, v0.h, -|v1.l|2601; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]2602; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm2603;2604; GFX11-DENORM-CONTRACT-FAKE16-LABEL: mad_sub_fabs_f16:2605; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:2606; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242607; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02608; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2609; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v02610; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2611; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc2612; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2613; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc2614; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2615; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc2616; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2617; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fma_f16 v1, v1, v2, -|v3|2618; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]2619; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm2620  %tid = tail call i32 @llvm.amdgcn.workitem.id.x() #02621  %tid.ext = sext i32 %tid to i642622  %gep0 = getelementptr half, ptr addrspace(1) %ptr, i64 %tid.ext2623  %add1 = add i64 %tid.ext, 12624  %gep1 = getelementptr half, ptr addrspace(1) %ptr, i64 %add12625  %add2 = add i64 %tid.ext, 22626  %gep2 = getelementptr half, ptr addrspace(1) %ptr, i64 %add22627  %outgep = getelementptr half, ptr addrspace(1) %out, i64 %tid.ext2628  %a = load volatile half, ptr addrspace(1) %gep0, align 22629  %b = load volatile half, ptr addrspace(1) %gep1, align 22630  %c = load volatile half, ptr addrspace(1) %gep2, align 22631  %c.abs = call half @llvm.fabs.f16(half %c) #02632  %mul = fmul half %a, %b2633  %sub = fsub half %mul, %c.abs2634  store half %sub, ptr addrspace(1) %outgep, align 22635  ret void2636}2637 2638define amdgpu_kernel void @mad_sub_fabs_inv_f16(ptr addrspace(1) noalias nocapture %out, ptr addrspace(1) noalias nocapture readonly %ptr) #1 {2639; VI-FLUSH-LABEL: mad_sub_fabs_inv_f16:2640; VI-FLUSH:       ; %bb.0:2641; VI-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242642; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v6, 1, v02643; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2644; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s32645; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s2, v62646; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2647; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v02648; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc2649; VI-FLUSH-NEXT:    v_add_u32_e32 v4, vcc, 4, v02650; VI-FLUSH-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc2651; VI-FLUSH-NEXT:    flat_load_ushort v7, v[0:1] glc2652; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2653; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc2654; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2655; VI-FLUSH-NEXT:    flat_load_ushort v3, v[4:5] glc2656; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2657; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s12658; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v62659; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2660; VI-FLUSH-NEXT:    v_mad_f16 v2, -v7, v2, |v3|2661; VI-FLUSH-NEXT:    flat_store_short v[0:1], v22662; VI-FLUSH-NEXT:    s_endpgm2663;2664; VI-DENORM-CONTRACT-LABEL: mad_sub_fabs_inv_f16:2665; VI-DENORM-CONTRACT:       ; %bb.0:2666; VI-DENORM-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242667; VI-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v6, 1, v02668; VI-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)2669; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s32670; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s2, v62671; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2672; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v2, vcc, 2, v02673; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc2674; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v4, vcc, 4, v02675; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc2676; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v7, v[0:1] glc2677; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2678; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v2, v[2:3] glc2679; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2680; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v3, v[4:5] glc2681; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2682; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s12683; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s0, v62684; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2685; VI-DENORM-CONTRACT-NEXT:    v_fma_f16 v2, -v7, v2, |v3|2686; VI-DENORM-CONTRACT-NEXT:    flat_store_short v[0:1], v22687; VI-DENORM-CONTRACT-NEXT:    s_endpgm2688;2689; GFX10-FLUSH-LABEL: mad_sub_fabs_inv_f16:2690; GFX10-FLUSH:       ; %bb.0:2691; GFX10-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242692; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v02693; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2694; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc2695; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2696; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc2697; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2698; GFX10-FLUSH-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc2699; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2700; GFX10-FLUSH-NEXT:    v_mul_f16_e32 v1, v1, v22701; GFX10-FLUSH-NEXT:    v_sub_f16_e64 v1, |v3|, v12702; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]2703; GFX10-FLUSH-NEXT:    s_endpgm2704;2705; GFX10-DENORM-STRICT-LABEL: mad_sub_fabs_inv_f16:2706; GFX10-DENORM-STRICT:       ; %bb.0:2707; GFX10-DENORM-STRICT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242708; GFX10-DENORM-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 1, v02709; GFX10-DENORM-STRICT-NEXT:    s_waitcnt lgkmcnt(0)2710; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc2711; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)2712; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc2713; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)2714; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc2715; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)2716; GFX10-DENORM-STRICT-NEXT:    v_mul_f16_e32 v1, v1, v22717; GFX10-DENORM-STRICT-NEXT:    v_sub_f16_e64 v1, |v3|, v12718; GFX10-DENORM-STRICT-NEXT:    global_store_short v0, v1, s[0:1]2719; GFX10-DENORM-STRICT-NEXT:    s_endpgm2720;2721; GFX10-DENORM-CONTRACT-LABEL: mad_sub_fabs_inv_f16:2722; GFX10-DENORM-CONTRACT:       ; %bb.0:2723; GFX10-DENORM-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242724; GFX10-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 1, v02725; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)2726; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc2727; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2728; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc2729; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2730; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc2731; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2732; GFX10-DENORM-CONTRACT-NEXT:    v_fma_f16 v1, -v1, v2, |v3|2733; GFX10-DENORM-CONTRACT-NEXT:    global_store_short v0, v1, s[0:1]2734; GFX10-DENORM-CONTRACT-NEXT:    s_endpgm2735;2736; GFX11-FLUSH-TRUE16-LABEL: mad_sub_fabs_inv_f16:2737; GFX11-FLUSH-TRUE16:       ; %bb.0:2738; GFX11-FLUSH-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242739; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02740; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2741; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v02742; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2743; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc2744; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)2745; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc2746; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)2747; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc2748; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)2749; GFX11-FLUSH-TRUE16-NEXT:    v_mul_f16_e32 v0.l, v0.l, v0.h2750; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2751; GFX11-FLUSH-TRUE16-NEXT:    v_sub_f16_e64 v0.l, |v1.l|, v0.l2752; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]2753; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm2754;2755; GFX11-FLUSH-FAKE16-LABEL: mad_sub_fabs_inv_f16:2756; GFX11-FLUSH-FAKE16:       ; %bb.0:2757; GFX11-FLUSH-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242758; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02759; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2760; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v02761; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2762; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc2763; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)2764; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc2765; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)2766; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc2767; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)2768; GFX11-FLUSH-FAKE16-NEXT:    v_mul_f16_e32 v1, v1, v22769; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2770; GFX11-FLUSH-FAKE16-NEXT:    v_sub_f16_e64 v1, |v3|, v12771; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]2772; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm2773;2774; GFX11-DENORM-STRICT-TRUE16-LABEL: mad_sub_fabs_inv_f16:2775; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:2776; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242777; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02778; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2779; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v02780; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2781; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc2782; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2783; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc2784; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2785; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc2786; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2787; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_mul_f16_e32 v0.l, v0.l, v0.h2788; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2789; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_sub_f16_e64 v0.l, |v1.l|, v0.l2790; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]2791; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm2792;2793; GFX11-DENORM-STRICT-FAKE16-LABEL: mad_sub_fabs_inv_f16:2794; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:2795; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242796; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02797; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2798; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v02799; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2800; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc2801; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2802; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc2803; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2804; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc2805; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2806; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_mul_f16_e32 v1, v1, v22807; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2808; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_sub_f16_e64 v1, |v3|, v12809; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]2810; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm2811;2812; GFX11-DENORM-CONTRACT-TRUE16-LABEL: mad_sub_fabs_inv_f16:2813; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:2814; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242815; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02816; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2817; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v02818; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2819; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc2820; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2821; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc2822; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2823; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc2824; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)2825; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fma_f16 v0.l, -v0.l, v0.h, |v1.l|2826; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]2827; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm2828;2829; GFX11-DENORM-CONTRACT-FAKE16-LABEL: mad_sub_fabs_inv_f16:2830; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:2831; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242832; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02833; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2834; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v02835; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2836; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc2837; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2838; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc2839; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2840; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc2841; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)2842; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fma_f16 v1, -v1, v2, |v3|2843; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]2844; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm2845  %tid = tail call i32 @llvm.amdgcn.workitem.id.x() #02846  %tid.ext = sext i32 %tid to i642847  %gep0 = getelementptr half, ptr addrspace(1) %ptr, i64 %tid.ext2848  %add1 = add i64 %tid.ext, 12849  %gep1 = getelementptr half, ptr addrspace(1) %ptr, i64 %add12850  %add2 = add i64 %tid.ext, 22851  %gep2 = getelementptr half, ptr addrspace(1) %ptr, i64 %add22852  %outgep = getelementptr half, ptr addrspace(1) %out, i64 %tid.ext2853  %a = load volatile half, ptr addrspace(1) %gep0, align 22854  %b = load volatile half, ptr addrspace(1) %gep1, align 22855  %c = load volatile half, ptr addrspace(1) %gep2, align 22856  %c.abs = call half @llvm.fabs.f16(half %c) #02857  %mul = fmul half %a, %b2858  %sub = fsub half %c.abs, %mul2859  store half %sub, ptr addrspace(1) %outgep, align 22860  ret void2861}2862 2863define amdgpu_kernel void @neg_neg_mad_f16(ptr addrspace(1) noalias nocapture %out, ptr addrspace(1) noalias nocapture readonly %ptr) #1 {2864; VI-FLUSH-LABEL: neg_neg_mad_f16:2865; VI-FLUSH:       ; %bb.0:2866; VI-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242867; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v6, 1, v02868; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2869; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s32870; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s2, v62871; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2872; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v02873; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc2874; VI-FLUSH-NEXT:    v_add_u32_e32 v4, vcc, 4, v02875; VI-FLUSH-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc2876; VI-FLUSH-NEXT:    flat_load_ushort v7, v[0:1] glc2877; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2878; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc2879; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2880; VI-FLUSH-NEXT:    flat_load_ushort v3, v[4:5] glc2881; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2882; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s12883; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v62884; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2885; VI-FLUSH-NEXT:    v_mac_f16_e32 v3, v7, v22886; VI-FLUSH-NEXT:    flat_store_short v[0:1], v32887; VI-FLUSH-NEXT:    s_endpgm2888;2889; VI-DENORM-CONTRACT-LABEL: neg_neg_mad_f16:2890; VI-DENORM-CONTRACT:       ; %bb.0:2891; VI-DENORM-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242892; VI-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v6, 1, v02893; VI-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)2894; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s32895; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s2, v62896; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2897; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v2, vcc, 2, v02898; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc2899; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v4, vcc, 4, v02900; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc2901; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v7, v[0:1] glc2902; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2903; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v2, v[2:3] glc2904; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2905; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v3, v[4:5] glc2906; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2907; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s12908; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s0, v62909; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2910; VI-DENORM-CONTRACT-NEXT:    v_fma_f16 v2, v7, v2, v32911; VI-DENORM-CONTRACT-NEXT:    flat_store_short v[0:1], v22912; VI-DENORM-CONTRACT-NEXT:    s_endpgm2913;2914; GFX10-FLUSH-LABEL: neg_neg_mad_f16:2915; GFX10-FLUSH:       ; %bb.0:2916; GFX10-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242917; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v02918; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2919; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc2920; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2921; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc2922; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2923; GFX10-FLUSH-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc2924; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2925; GFX10-FLUSH-NEXT:    v_mul_f16_e32 v1, v1, v22926; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v3, v12927; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]2928; GFX10-FLUSH-NEXT:    s_endpgm2929;2930; GFX10-DENORM-STRICT-LABEL: neg_neg_mad_f16:2931; GFX10-DENORM-STRICT:       ; %bb.0:2932; GFX10-DENORM-STRICT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242933; GFX10-DENORM-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 1, v02934; GFX10-DENORM-STRICT-NEXT:    s_waitcnt lgkmcnt(0)2935; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc2936; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)2937; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc2938; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)2939; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc2940; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)2941; GFX10-DENORM-STRICT-NEXT:    v_mul_f16_e32 v1, v1, v22942; GFX10-DENORM-STRICT-NEXT:    v_add_f16_e32 v1, v3, v12943; GFX10-DENORM-STRICT-NEXT:    global_store_short v0, v1, s[0:1]2944; GFX10-DENORM-STRICT-NEXT:    s_endpgm2945;2946; GFX10-DENORM-CONTRACT-LABEL: neg_neg_mad_f16:2947; GFX10-DENORM-CONTRACT:       ; %bb.0:2948; GFX10-DENORM-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242949; GFX10-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 1, v02950; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)2951; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc2952; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2953; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc2954; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2955; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc2956; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2957; GFX10-DENORM-CONTRACT-NEXT:    v_fmac_f16_e32 v3, v1, v22958; GFX10-DENORM-CONTRACT-NEXT:    global_store_short v0, v3, s[0:1]2959; GFX10-DENORM-CONTRACT-NEXT:    s_endpgm2960;2961; GFX11-FLUSH-TRUE16-LABEL: neg_neg_mad_f16:2962; GFX11-FLUSH-TRUE16:       ; %bb.0:2963; GFX11-FLUSH-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242964; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02965; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2966; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v02967; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)2968; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc2969; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)2970; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc2971; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)2972; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc2973; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)2974; GFX11-FLUSH-TRUE16-NEXT:    v_mul_f16_e32 v0.l, v0.l, v0.h2975; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2976; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v1.l, v0.l2977; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]2978; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm2979;2980; GFX11-FLUSH-FAKE16-LABEL: neg_neg_mad_f16:2981; GFX11-FLUSH-FAKE16:       ; %bb.0:2982; GFX11-FLUSH-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x242983; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v02984; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2985; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v02986; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)2987; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc2988; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)2989; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc2990; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)2991; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc2992; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)2993; GFX11-FLUSH-FAKE16-NEXT:    v_mul_f16_e32 v1, v1, v22994; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)2995; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v3, v12996; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]2997; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm2998;2999; GFX11-DENORM-STRICT-TRUE16-LABEL: neg_neg_mad_f16:3000; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:3001; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243002; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03003; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3004; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v03005; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)3006; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc3007; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3008; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc3009; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3010; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc3011; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3012; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_mul_f16_e32 v0.l, v0.l, v0.h3013; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3014; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_add_f16_e32 v0.l, v1.l, v0.l3015; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]3016; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm3017;3018; GFX11-DENORM-STRICT-FAKE16-LABEL: neg_neg_mad_f16:3019; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:3020; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243021; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03022; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3023; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v03024; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)3025; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc3026; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3027; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc3028; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3029; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc3030; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3031; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_mul_f16_e32 v1, v1, v23032; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3033; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_add_f16_e32 v1, v3, v13034; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]3035; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm3036;3037; GFX11-DENORM-CONTRACT-TRUE16-LABEL: neg_neg_mad_f16:3038; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:3039; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243040; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03041; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3042; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v03043; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)3044; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc3045; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3046; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc3047; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3048; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc3049; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3050; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fmac_f16_e32 v1.l, v0.l, v0.h3051; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_b16 v2, v1, s[0:1]3052; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm3053;3054; GFX11-DENORM-CONTRACT-FAKE16-LABEL: neg_neg_mad_f16:3055; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:3056; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243057; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03058; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3059; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v03060; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)3061; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc3062; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3063; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc3064; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3065; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc3066; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3067; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fmac_f16_e32 v3, v1, v23068; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v3, s[0:1]3069; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm3070  %tid = tail call i32 @llvm.amdgcn.workitem.id.x() #03071  %tid.ext = sext i32 %tid to i643072  %gep0 = getelementptr half, ptr addrspace(1) %ptr, i64 %tid.ext3073  %add1 = add i64 %tid.ext, 13074  %gep1 = getelementptr half, ptr addrspace(1) %ptr, i64 %add13075  %add2 = add i64 %tid.ext, 23076  %gep2 = getelementptr half, ptr addrspace(1) %ptr, i64 %add23077  %outgep = getelementptr half, ptr addrspace(1) %out, i64 %tid.ext3078  %a = load volatile half, ptr addrspace(1) %gep0, align 23079  %b = load volatile half, ptr addrspace(1) %gep1, align 23080  %c = load volatile half, ptr addrspace(1) %gep2, align 23081  %nega = fneg half %a3082  %negb = fneg half %b3083  %mul = fmul half %nega, %negb3084  %sub = fadd half %mul, %c3085  store half %sub, ptr addrspace(1) %outgep, align 23086  ret void3087}3088 3089define amdgpu_kernel void @mad_fabs_sub_f16(ptr addrspace(1) noalias nocapture %out, ptr addrspace(1) noalias nocapture readonly %ptr) #1 {3090; VI-FLUSH-LABEL: mad_fabs_sub_f16:3091; VI-FLUSH:       ; %bb.0:3092; VI-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243093; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v6, 1, v03094; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)3095; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s33096; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s2, v63097; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3098; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v03099; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc3100; VI-FLUSH-NEXT:    v_add_u32_e32 v4, vcc, 4, v03101; VI-FLUSH-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc3102; VI-FLUSH-NEXT:    flat_load_ushort v7, v[0:1] glc3103; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)3104; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc3105; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)3106; VI-FLUSH-NEXT:    flat_load_ushort v3, v[4:5] glc3107; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)3108; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s13109; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v63110; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3111; VI-FLUSH-NEXT:    v_mad_f16 v2, v7, |v2|, -v33112; VI-FLUSH-NEXT:    flat_store_short v[0:1], v23113; VI-FLUSH-NEXT:    s_endpgm3114;3115; VI-DENORM-CONTRACT-LABEL: mad_fabs_sub_f16:3116; VI-DENORM-CONTRACT:       ; %bb.0:3117; VI-DENORM-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243118; VI-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v6, 1, v03119; VI-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)3120; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s33121; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s2, v63122; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3123; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v2, vcc, 2, v03124; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc3125; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v4, vcc, 4, v03126; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc3127; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v7, v[0:1] glc3128; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)3129; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v2, v[2:3] glc3130; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)3131; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v3, v[4:5] glc3132; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)3133; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s13134; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s0, v63135; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3136; VI-DENORM-CONTRACT-NEXT:    v_fma_f16 v2, v7, |v2|, -v33137; VI-DENORM-CONTRACT-NEXT:    flat_store_short v[0:1], v23138; VI-DENORM-CONTRACT-NEXT:    s_endpgm3139;3140; GFX10-FLUSH-LABEL: mad_fabs_sub_f16:3141; GFX10-FLUSH:       ; %bb.0:3142; GFX10-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243143; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v03144; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)3145; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc3146; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)3147; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc3148; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)3149; GFX10-FLUSH-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc3150; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)3151; GFX10-FLUSH-NEXT:    v_mul_f16_e64 v1, v1, |v2|3152; GFX10-FLUSH-NEXT:    v_sub_f16_e32 v1, v1, v33153; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]3154; GFX10-FLUSH-NEXT:    s_endpgm3155;3156; GFX10-DENORM-STRICT-LABEL: mad_fabs_sub_f16:3157; GFX10-DENORM-STRICT:       ; %bb.0:3158; GFX10-DENORM-STRICT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243159; GFX10-DENORM-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 1, v03160; GFX10-DENORM-STRICT-NEXT:    s_waitcnt lgkmcnt(0)3161; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc3162; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)3163; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc3164; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)3165; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc3166; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)3167; GFX10-DENORM-STRICT-NEXT:    v_mul_f16_e64 v1, v1, |v2|3168; GFX10-DENORM-STRICT-NEXT:    v_sub_f16_e32 v1, v1, v33169; GFX10-DENORM-STRICT-NEXT:    global_store_short v0, v1, s[0:1]3170; GFX10-DENORM-STRICT-NEXT:    s_endpgm3171;3172; GFX10-DENORM-CONTRACT-LABEL: mad_fabs_sub_f16:3173; GFX10-DENORM-CONTRACT:       ; %bb.0:3174; GFX10-DENORM-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x243175; GFX10-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 1, v03176; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)3177; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v1, v0, s[2:3] glc dlc3178; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)3179; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v2, v0, s[2:3] offset:2 glc dlc3180; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)3181; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v3, v0, s[2:3] offset:4 glc dlc3182; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)3183; GFX10-DENORM-CONTRACT-NEXT:    v_fma_f16 v1, v1, |v2|, -v33184; GFX10-DENORM-CONTRACT-NEXT:    global_store_short v0, v1, s[0:1]3185; GFX10-DENORM-CONTRACT-NEXT:    s_endpgm3186;3187; GFX11-FLUSH-TRUE16-LABEL: mad_fabs_sub_f16:3188; GFX11-FLUSH-TRUE16:       ; %bb.0:3189; GFX11-FLUSH-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243190; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03191; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3192; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v03193; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)3194; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc3195; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)3196; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc3197; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)3198; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc3199; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)3200; GFX11-FLUSH-TRUE16-NEXT:    v_mul_f16_e64 v0.l, v0.l, |v0.h|3201; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3202; GFX11-FLUSH-TRUE16-NEXT:    v_sub_f16_e32 v0.l, v0.l, v1.l3203; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]3204; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm3205;3206; GFX11-FLUSH-FAKE16-LABEL: mad_fabs_sub_f16:3207; GFX11-FLUSH-FAKE16:       ; %bb.0:3208; GFX11-FLUSH-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243209; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03210; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3211; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v03212; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)3213; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc3214; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)3215; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc3216; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)3217; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc3218; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)3219; GFX11-FLUSH-FAKE16-NEXT:    v_mul_f16_e64 v1, v1, |v2|3220; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3221; GFX11-FLUSH-FAKE16-NEXT:    v_sub_f16_e32 v1, v1, v33222; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]3223; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm3224;3225; GFX11-DENORM-STRICT-TRUE16-LABEL: mad_fabs_sub_f16:3226; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:3227; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243228; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03229; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3230; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v03231; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)3232; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc3233; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3234; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc3235; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3236; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc3237; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3238; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_mul_f16_e64 v0.l, v0.l, |v0.h|3239; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3240; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_sub_f16_e32 v0.l, v0.l, v1.l3241; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]3242; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm3243;3244; GFX11-DENORM-STRICT-FAKE16-LABEL: mad_fabs_sub_f16:3245; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:3246; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243247; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03248; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3249; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v03250; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)3251; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc3252; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3253; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc3254; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3255; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc3256; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3257; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_mul_f16_e64 v1, v1, |v2|3258; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3259; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_sub_f16_e32 v1, v1, v33260; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]3261; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm3262;3263; GFX11-DENORM-CONTRACT-TRUE16-LABEL: mad_fabs_sub_f16:3264; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:3265; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243266; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03267; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3268; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v2, 1, v03269; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)3270; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v2, s[2:3] glc dlc3271; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3272; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v2, s[2:3] offset:2 glc dlc3273; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3274; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v1, v2, s[2:3] offset:4 glc dlc3275; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3276; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fma_f16 v0.l, v0.l, |v0.h|, -v1.l3277; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_b16 v2, v0, s[0:1]3278; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm3279;3280; GFX11-DENORM-CONTRACT-FAKE16-LABEL: mad_fabs_sub_f16:3281; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:3282; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x243283; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03284; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3285; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v03286; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)3287; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3] glc dlc3288; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3289; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[2:3] offset:2 glc dlc3290; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3291; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v3, v0, s[2:3] offset:4 glc dlc3292; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3293; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fma_f16 v1, v1, |v2|, -v33294; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]3295; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm3296  %tid = tail call i32 @llvm.amdgcn.workitem.id.x() #03297  %tid.ext = sext i32 %tid to i643298  %gep0 = getelementptr half, ptr addrspace(1) %ptr, i64 %tid.ext3299  %add1 = add i64 %tid.ext, 13300  %gep1 = getelementptr half, ptr addrspace(1) %ptr, i64 %add13301  %add2 = add i64 %tid.ext, 23302  %gep2 = getelementptr half, ptr addrspace(1) %ptr, i64 %add23303  %outgep = getelementptr half, ptr addrspace(1) %out, i64 %tid.ext3304  %a = load volatile half, ptr addrspace(1) %gep0, align 23305  %b = load volatile half, ptr addrspace(1) %gep1, align 23306  %c = load volatile half, ptr addrspace(1) %gep2, align 23307  %b.abs = call half @llvm.fabs.f16(half %b) #03308  %mul = fmul half %a, %b.abs3309  %sub = fsub half %mul, %c3310  store half %sub, ptr addrspace(1) %outgep, align 23311  ret void3312}3313 3314define amdgpu_kernel void @fsub_c_fadd_a_a_f16(ptr addrspace(1) %out, ptr addrspace(1) %in) {3315; VI-FLUSH-LABEL: fsub_c_fadd_a_a_f16:3316; VI-FLUSH:       ; %bb.0:3317; VI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x243318; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v03319; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)3320; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s13321; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v03322; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3323; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v03324; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc3325; VI-FLUSH-NEXT:    flat_load_ushort v4, v[0:1] glc3326; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)3327; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc3328; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)3329; VI-FLUSH-NEXT:    v_mac_f16_e32 v2, -2.0, v43330; VI-FLUSH-NEXT:    flat_store_short v[0:1], v23331; VI-FLUSH-NEXT:    s_endpgm3332;3333; VI-DENORM-CONTRACT-LABEL: fsub_c_fadd_a_a_f16:3334; VI-DENORM-CONTRACT:       ; %bb.0:3335; VI-DENORM-CONTRACT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x243336; VI-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 1, v03337; VI-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)3338; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s13339; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s0, v03340; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3341; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v2, vcc, 2, v03342; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc3343; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v4, v[0:1] glc3344; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)3345; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v2, v[2:3] glc3346; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)3347; VI-DENORM-CONTRACT-NEXT:    v_fma_f16 v2, v4, -2.0, v23348; VI-DENORM-CONTRACT-NEXT:    flat_store_short v[0:1], v23349; VI-DENORM-CONTRACT-NEXT:    s_endpgm3350;3351; GFX10-FLUSH-LABEL: fsub_c_fadd_a_a_f16:3352; GFX10-FLUSH:       ; %bb.0:3353; GFX10-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x243354; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v03355; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)3356; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc3357; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)3358; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc3359; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)3360; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v13361; GFX10-FLUSH-NEXT:    v_sub_f16_e32 v1, v2, v13362; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]3363; GFX10-FLUSH-NEXT:    s_endpgm3364;3365; GFX10-DENORM-STRICT-LABEL: fsub_c_fadd_a_a_f16:3366; GFX10-DENORM-STRICT:       ; %bb.0:3367; GFX10-DENORM-STRICT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x243368; GFX10-DENORM-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 1, v03369; GFX10-DENORM-STRICT-NEXT:    s_waitcnt lgkmcnt(0)3370; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc3371; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)3372; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc3373; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)3374; GFX10-DENORM-STRICT-NEXT:    v_add_f16_e32 v1, v1, v13375; GFX10-DENORM-STRICT-NEXT:    v_sub_f16_e32 v1, v2, v13376; GFX10-DENORM-STRICT-NEXT:    global_store_short v0, v1, s[0:1]3377; GFX10-DENORM-STRICT-NEXT:    s_endpgm3378;3379; GFX10-DENORM-CONTRACT-LABEL: fsub_c_fadd_a_a_f16:3380; GFX10-DENORM-CONTRACT:       ; %bb.0:3381; GFX10-DENORM-CONTRACT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x243382; GFX10-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 1, v03383; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)3384; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc3385; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)3386; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc3387; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)3388; GFX10-DENORM-CONTRACT-NEXT:    v_fmac_f16_e32 v2, -2.0, v13389; GFX10-DENORM-CONTRACT-NEXT:    global_store_short v0, v2, s[0:1]3390; GFX10-DENORM-CONTRACT-NEXT:    s_endpgm3391;3392; GFX11-FLUSH-TRUE16-LABEL: fsub_c_fadd_a_a_f16:3393; GFX11-FLUSH-TRUE16:       ; %bb.0:3394; GFX11-FLUSH-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x243395; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03396; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3397; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v03398; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)3399; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc3400; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)3401; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc3402; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)3403; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.l3404; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3405; GFX11-FLUSH-TRUE16-NEXT:    v_sub_f16_e32 v0.l, v0.h, v0.l3406; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]3407; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm3408;3409; GFX11-FLUSH-FAKE16-LABEL: fsub_c_fadd_a_a_f16:3410; GFX11-FLUSH-FAKE16:       ; %bb.0:3411; GFX11-FLUSH-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x243412; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03413; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3414; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v03415; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)3416; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc3417; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)3418; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc3419; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)3420; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v13421; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3422; GFX11-FLUSH-FAKE16-NEXT:    v_sub_f16_e32 v1, v2, v13423; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]3424; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm3425;3426; GFX11-DENORM-STRICT-TRUE16-LABEL: fsub_c_fadd_a_a_f16:3427; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:3428; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x243429; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03430; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3431; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v03432; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)3433; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc3434; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3435; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc3436; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3437; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.l3438; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3439; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_sub_f16_e32 v0.l, v0.h, v0.l3440; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]3441; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm3442;3443; GFX11-DENORM-STRICT-FAKE16-LABEL: fsub_c_fadd_a_a_f16:3444; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:3445; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x243446; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03447; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3448; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v03449; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)3450; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc3451; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3452; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc3453; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3454; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v13455; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3456; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_sub_f16_e32 v1, v2, v13457; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]3458; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm3459;3460; GFX11-DENORM-CONTRACT-TRUE16-LABEL: fsub_c_fadd_a_a_f16:3461; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:3462; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x243463; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03464; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3465; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v03466; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)3467; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc3468; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3469; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc3470; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3471; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fmac_f16_e32 v0.h, -2.0, v0.l3472; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_d16_hi_b16 v1, v0, s[0:1]3473; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm3474;3475; GFX11-DENORM-CONTRACT-FAKE16-LABEL: fsub_c_fadd_a_a_f16:3476; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:3477; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x243478; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03479; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3480; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v03481; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)3482; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc3483; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3484; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc3485; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3486; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fmac_f16_e32 v2, -2.0, v13487; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v2, s[0:1]3488; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm3489  %tid = call i32 @llvm.amdgcn.workitem.id.x()3490  %gep.0 = getelementptr half, ptr addrspace(1) %out, i32 %tid3491  %gep.1 = getelementptr half, ptr addrspace(1) %gep.0, i32 13492  %gep.out = getelementptr half, ptr addrspace(1) %out, i32 %tid3493 3494  %r1 = load volatile half, ptr addrspace(1) %gep.03495  %r2 = load volatile half, ptr addrspace(1) %gep.13496 3497  %add = fadd half %r1, %r13498  %r3 = fsub half %r2, %add3499 3500  store half %r3, ptr addrspace(1) %gep.out3501  ret void3502}3503 3504define amdgpu_kernel void @fsub_fadd_a_a_c_f16(ptr addrspace(1) %out, ptr addrspace(1) %in) {3505; VI-FLUSH-LABEL: fsub_fadd_a_a_c_f16:3506; VI-FLUSH:       ; %bb.0:3507; VI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x243508; VI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v03509; VI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)3510; VI-FLUSH-NEXT:    v_mov_b32_e32 v1, s13511; VI-FLUSH-NEXT:    v_add_u32_e32 v0, vcc, s0, v03512; VI-FLUSH-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3513; VI-FLUSH-NEXT:    v_add_u32_e32 v2, vcc, 2, v03514; VI-FLUSH-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc3515; VI-FLUSH-NEXT:    flat_load_ushort v4, v[0:1] glc3516; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)3517; VI-FLUSH-NEXT:    flat_load_ushort v2, v[2:3] glc3518; VI-FLUSH-NEXT:    s_waitcnt vmcnt(0)3519; VI-FLUSH-NEXT:    v_mad_f16 v2, v4, 2.0, -v23520; VI-FLUSH-NEXT:    flat_store_short v[0:1], v23521; VI-FLUSH-NEXT:    s_endpgm3522;3523; VI-DENORM-CONTRACT-LABEL: fsub_fadd_a_a_c_f16:3524; VI-DENORM-CONTRACT:       ; %bb.0:3525; VI-DENORM-CONTRACT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x243526; VI-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 1, v03527; VI-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)3528; VI-DENORM-CONTRACT-NEXT:    v_mov_b32_e32 v1, s13529; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v0, vcc, s0, v03530; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3531; VI-DENORM-CONTRACT-NEXT:    v_add_u32_e32 v2, vcc, 2, v03532; VI-DENORM-CONTRACT-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc3533; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v4, v[0:1] glc3534; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)3535; VI-DENORM-CONTRACT-NEXT:    flat_load_ushort v2, v[2:3] glc3536; VI-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)3537; VI-DENORM-CONTRACT-NEXT:    v_fma_f16 v2, v4, 2.0, -v23538; VI-DENORM-CONTRACT-NEXT:    flat_store_short v[0:1], v23539; VI-DENORM-CONTRACT-NEXT:    s_endpgm3540;3541; GFX10-FLUSH-LABEL: fsub_fadd_a_a_c_f16:3542; GFX10-FLUSH:       ; %bb.0:3543; GFX10-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x243544; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 1, v03545; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)3546; GFX10-FLUSH-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc3547; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)3548; GFX10-FLUSH-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc3549; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)3550; GFX10-FLUSH-NEXT:    v_add_f16_e32 v1, v1, v13551; GFX10-FLUSH-NEXT:    v_sub_f16_e32 v1, v1, v23552; GFX10-FLUSH-NEXT:    global_store_short v0, v1, s[0:1]3553; GFX10-FLUSH-NEXT:    s_endpgm3554;3555; GFX10-DENORM-STRICT-LABEL: fsub_fadd_a_a_c_f16:3556; GFX10-DENORM-STRICT:       ; %bb.0:3557; GFX10-DENORM-STRICT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x243558; GFX10-DENORM-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 1, v03559; GFX10-DENORM-STRICT-NEXT:    s_waitcnt lgkmcnt(0)3560; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc3561; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)3562; GFX10-DENORM-STRICT-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc3563; GFX10-DENORM-STRICT-NEXT:    s_waitcnt vmcnt(0)3564; GFX10-DENORM-STRICT-NEXT:    v_add_f16_e32 v1, v1, v13565; GFX10-DENORM-STRICT-NEXT:    v_sub_f16_e32 v1, v1, v23566; GFX10-DENORM-STRICT-NEXT:    global_store_short v0, v1, s[0:1]3567; GFX10-DENORM-STRICT-NEXT:    s_endpgm3568;3569; GFX10-DENORM-CONTRACT-LABEL: fsub_fadd_a_a_c_f16:3570; GFX10-DENORM-CONTRACT:       ; %bb.0:3571; GFX10-DENORM-CONTRACT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x243572; GFX10-DENORM-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 1, v03573; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)3574; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v1, v0, s[0:1] glc dlc3575; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)3576; GFX10-DENORM-CONTRACT-NEXT:    global_load_ushort v2, v0, s[0:1] offset:2 glc dlc3577; GFX10-DENORM-CONTRACT-NEXT:    s_waitcnt vmcnt(0)3578; GFX10-DENORM-CONTRACT-NEXT:    v_fma_f16 v1, v1, 2.0, -v23579; GFX10-DENORM-CONTRACT-NEXT:    global_store_short v0, v1, s[0:1]3580; GFX10-DENORM-CONTRACT-NEXT:    s_endpgm3581;3582; GFX11-FLUSH-TRUE16-LABEL: fsub_fadd_a_a_c_f16:3583; GFX11-FLUSH-TRUE16:       ; %bb.0:3584; GFX11-FLUSH-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x243585; GFX11-FLUSH-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03586; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3587; GFX11-FLUSH-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v03588; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)3589; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc3590; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)3591; GFX11-FLUSH-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc3592; GFX11-FLUSH-TRUE16-NEXT:    s_waitcnt vmcnt(0)3593; GFX11-FLUSH-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.l3594; GFX11-FLUSH-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3595; GFX11-FLUSH-TRUE16-NEXT:    v_sub_f16_e32 v0.l, v0.l, v0.h3596; GFX11-FLUSH-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]3597; GFX11-FLUSH-TRUE16-NEXT:    s_endpgm3598;3599; GFX11-FLUSH-FAKE16-LABEL: fsub_fadd_a_a_c_f16:3600; GFX11-FLUSH-FAKE16:       ; %bb.0:3601; GFX11-FLUSH-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x243602; GFX11-FLUSH-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03603; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3604; GFX11-FLUSH-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v03605; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)3606; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc3607; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)3608; GFX11-FLUSH-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc3609; GFX11-FLUSH-FAKE16-NEXT:    s_waitcnt vmcnt(0)3610; GFX11-FLUSH-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v13611; GFX11-FLUSH-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3612; GFX11-FLUSH-FAKE16-NEXT:    v_sub_f16_e32 v1, v1, v23613; GFX11-FLUSH-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]3614; GFX11-FLUSH-FAKE16-NEXT:    s_endpgm3615;3616; GFX11-DENORM-STRICT-TRUE16-LABEL: fsub_fadd_a_a_c_f16:3617; GFX11-DENORM-STRICT-TRUE16:       ; %bb.0:3618; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x243619; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03620; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3621; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v03622; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)3623; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc3624; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3625; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc3626; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3627; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_add_f16_e32 v0.l, v0.l, v0.l3628; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3629; GFX11-DENORM-STRICT-TRUE16-NEXT:    v_sub_f16_e32 v0.l, v0.l, v0.h3630; GFX11-DENORM-STRICT-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]3631; GFX11-DENORM-STRICT-TRUE16-NEXT:    s_endpgm3632;3633; GFX11-DENORM-STRICT-FAKE16-LABEL: fsub_fadd_a_a_c_f16:3634; GFX11-DENORM-STRICT-FAKE16:       ; %bb.0:3635; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x243636; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03637; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3638; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v03639; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)3640; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc3641; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3642; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc3643; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3644; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_add_f16_e32 v1, v1, v13645; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3646; GFX11-DENORM-STRICT-FAKE16-NEXT:    v_sub_f16_e32 v1, v1, v23647; GFX11-DENORM-STRICT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]3648; GFX11-DENORM-STRICT-FAKE16-NEXT:    s_endpgm3649;3650; GFX11-DENORM-CONTRACT-TRUE16-LABEL: fsub_fadd_a_a_c_f16:3651; GFX11-DENORM-CONTRACT-TRUE16:       ; %bb.0:3652; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x243653; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03654; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3655; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 1, v03656; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)3657; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[0:1] glc dlc3658; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3659; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_load_d16_hi_b16 v0, v1, s[0:1] offset:2 glc dlc3660; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_waitcnt vmcnt(0)3661; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    v_fma_f16 v0.l, v0.l, 2.0, -v0.h3662; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]3663; GFX11-DENORM-CONTRACT-TRUE16-NEXT:    s_endpgm3664;3665; GFX11-DENORM-CONTRACT-FAKE16-LABEL: fsub_fadd_a_a_c_f16:3666; GFX11-DENORM-CONTRACT-FAKE16:       ; %bb.0:3667; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_load_b64 s[0:1], s[4:5], 0x243668; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_and_b32_e32 v0, 0x3ff, v03669; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)3670; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 1, v03671; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)3672; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v1, v0, s[0:1] glc dlc3673; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3674; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_load_u16 v2, v0, s[0:1] offset:2 glc dlc3675; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_waitcnt vmcnt(0)3676; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    v_fma_f16 v1, v1, 2.0, -v23677; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]3678; GFX11-DENORM-CONTRACT-FAKE16-NEXT:    s_endpgm3679  %tid = call i32 @llvm.amdgcn.workitem.id.x()3680  %gep.0 = getelementptr half, ptr addrspace(1) %out, i32 %tid3681  %gep.1 = getelementptr half, ptr addrspace(1) %gep.0, i32 13682  %gep.out = getelementptr half, ptr addrspace(1) %out, i32 %tid3683 3684  %r1 = load volatile half, ptr addrspace(1) %gep.03685  %r2 = load volatile half, ptr addrspace(1) %gep.13686 3687  %add = fadd half %r1, %r13688  %r3 = fsub half %add, %r23689 3690  store half %r3, ptr addrspace(1) %gep.out3691  ret void3692}3693 3694attributes #0 = { nounwind }3695attributes #1 = { nounwind readnone }3696