brintos

brintos / llvm-project-archived public Read only

0
0
Text · 138.1 KiB · cbda062 Raw
2824 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -amdgpu-scalarize-global-loads=false -mcpu=tahiti -denormal-fp-math-f32=preserve-sign -mattr=+fast-fmaf -fp-contract=on < %s | FileCheck -enable-var-scope -check-prefixes=SI-FLUSH %s3; RUN: llc -amdgpu-scalarize-global-loads=false -mcpu=verde  -denormal-fp-math-f32=preserve-sign -mattr=-fast-fmaf -fp-contract=on < %s | FileCheck -enable-var-scope -check-prefixes=SI-FLUSH %s4; RUN: llc -amdgpu-scalarize-global-loads=false -mcpu=tahiti -denormal-fp-math-f32=ieee -mattr=+fast-fmaf -fp-contract=on < %s | FileCheck -enable-var-scope -check-prefixes=SI-DENORM-FASTFMA,SI-DENORM-FASTFMA-STRICT %s5; RUN: llc -amdgpu-scalarize-global-loads=false -mcpu=verde  -denormal-fp-math-f32=ieee -mattr=-fast-fmaf -fp-contract=on < %s | FileCheck -enable-var-scope -check-prefixes=SI-DENORM-SLOWFMA %s6 7; RUN: llc -amdgpu-scalarize-global-loads=false -mcpu=tahiti -denormal-fp-math-f32=preserve-sign -mattr=+fast-fmaf -fp-contract=fast < %s | FileCheck -enable-var-scope -check-prefixes=SI-FLUSH %s8; RUN: llc -amdgpu-scalarize-global-loads=false -mcpu=verde  -denormal-fp-math-f32=preserve-sign -mattr=-fast-fmaf -fp-contract=fast < %s | FileCheck -enable-var-scope -check-prefixes=SI-FLUSH %s9; RUN: llc -amdgpu-scalarize-global-loads=false -mcpu=tahiti -denormal-fp-math-f32=ieee -mattr=+fast-fmaf -fp-contract=fast < %s | FileCheck -enable-var-scope -check-prefixes=SI-DENORM-FASTFMA,SI-DENORM-FASTFMA-CONTRACT %s10; RUN: llc -amdgpu-scalarize-global-loads=false -mcpu=verde  -denormal-fp-math-f32=ieee -mattr=-fast-fmaf -fp-contract=fast < %s | FileCheck -enable-var-scope -check-prefixes=SI-DENORM-SLOWFMA %s11 12; RUN: llc -amdgpu-scalarize-global-loads=false -mcpu=gfx900 -denormal-fp-math-f32=preserve-sign -fp-contract=on < %s | FileCheck -enable-var-scope -check-prefixes=GFX9-FLUSH,GFX9-FLUSH-MAD %s13; RUN: llc -amdgpu-scalarize-global-loads=false -mcpu=gfx900 -denormal-fp-math-f32=ieee -fp-contract=on < %s | FileCheck -enable-var-scope -check-prefixes=GFX9-DENORM,GFX9-DENORM-FASTFMA-MAD %s14 15; RUN: llc -amdgpu-scalarize-global-loads=false -mcpu=gfx906 -denormal-fp-math-f32=preserve-sign -fp-contract=on < %s | FileCheck -enable-var-scope -check-prefixes=GFX9-FLUSH,GFX9-FLUSH-FMAC %s16; RUN: llc -amdgpu-scalarize-global-loads=false -mcpu=gfx906 -denormal-fp-math-f32=ieee -fp-contract=on < %s | FileCheck -enable-var-scope -check-prefixes=GFX9-DENORM,GFX9-DENORM-FASTFMA-FMAC %s17 18; RUN: llc -amdgpu-scalarize-global-loads=false -mcpu=gfx1030 -denormal-fp-math-f32=preserve-sign -mattr=+mad-mac-f32-insts -fp-contract=on < %s | FileCheck -enable-var-scope -check-prefixes=GFX10,GFX10-FLUSH %s19; RUN: llc -amdgpu-scalarize-global-loads=false -mcpu=gfx1030 -denormal-fp-math-f32=ieee -mattr=+mad-mac-f32-insts -fp-contract=on < %s | FileCheck -enable-var-scope -check-prefixes=GFX10,GFX10-DENORM %s20 21; Test all permutations of: fp32 denormals, fast fp contract, fp contract enabled for fmuladd, fmaf fast/slow.22 23target triple = "amdgcn--"24 25declare i32 @llvm.amdgcn.workitem.id.x() #126declare float @llvm.fmuladd.f32(float, float, float) #127declare half @llvm.fmuladd.f16(half, half, half) #128declare float @llvm.fabs.f32(float) #129 30define amdgpu_kernel void @fmuladd_f32(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2, ptr addrspace(1) %in3) #0 {31; SI-FLUSH-LABEL: fmuladd_f32:32; SI-FLUSH:       ; %bb.0:33; SI-FLUSH-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x934; SI-FLUSH-NEXT:    s_mov_b32 s11, 0xf00035; SI-FLUSH-NEXT:    s_mov_b32 s10, -136; SI-FLUSH-NEXT:    s_mov_b32 s14, s1037; SI-FLUSH-NEXT:    s_mov_b32 s15, s1138; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)39; SI-FLUSH-NEXT:    s_mov_b32 s12, s240; SI-FLUSH-NEXT:    s_mov_b32 s13, s341; SI-FLUSH-NEXT:    s_mov_b32 s16, s442; SI-FLUSH-NEXT:    s_mov_b32 s17, s543; SI-FLUSH-NEXT:    s_mov_b32 s18, s1044; SI-FLUSH-NEXT:    s_mov_b32 s19, s1145; SI-FLUSH-NEXT:    s_mov_b32 s4, s646; SI-FLUSH-NEXT:    s_mov_b32 s5, s747; SI-FLUSH-NEXT:    s_mov_b32 s6, s1048; SI-FLUSH-NEXT:    s_mov_b32 s7, s1149; SI-FLUSH-NEXT:    buffer_load_dword v0, off, s[12:15], 050; SI-FLUSH-NEXT:    buffer_load_dword v1, off, s[16:19], 051; SI-FLUSH-NEXT:    buffer_load_dword v2, off, s[4:7], 052; SI-FLUSH-NEXT:    s_mov_b32 s8, s053; SI-FLUSH-NEXT:    s_mov_b32 s9, s154; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)55; SI-FLUSH-NEXT:    v_mac_f32_e32 v2, v0, v156; SI-FLUSH-NEXT:    buffer_store_dword v2, off, s[8:11], 057; SI-FLUSH-NEXT:    s_endpgm58;59; SI-DENORM-FASTFMA-LABEL: fmuladd_f32:60; SI-DENORM-FASTFMA:       ; %bb.0:61; SI-DENORM-FASTFMA-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x962; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s11, 0xf00063; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s10, -164; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s14, s1065; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s15, s1166; SI-DENORM-FASTFMA-NEXT:    s_waitcnt lgkmcnt(0)67; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s12, s268; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s13, s369; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s16, s470; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s17, s571; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s18, s1072; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s19, s1173; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s4, s674; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s5, s775; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s6, s1076; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s7, s1177; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v0, off, s[12:15], 078; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v1, off, s[16:19], 079; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v2, off, s[4:7], 080; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s8, s081; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s9, s182; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)83; SI-DENORM-FASTFMA-NEXT:    v_fma_f32 v0, v0, v1, v284; SI-DENORM-FASTFMA-NEXT:    buffer_store_dword v0, off, s[8:11], 085; SI-DENORM-FASTFMA-NEXT:    s_endpgm86;87; SI-DENORM-SLOWFMA-LABEL: fmuladd_f32:88; SI-DENORM-SLOWFMA:       ; %bb.0:89; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x990; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s11, 0xf00091; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s10, -192; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s14, s1093; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s15, s1194; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)95; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s12, s296; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s13, s397; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s16, s498; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s17, s599; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s18, s10100; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s19, s11101; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s4, s6102; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s5, s7103; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s6, s10104; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s7, s11105; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v0, off, s[12:15], 0106; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v1, off, s[16:19], 0107; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, off, s[4:7], 0108; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s8, s0109; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s9, s1110; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(1)111; SI-DENORM-SLOWFMA-NEXT:    v_mul_f32_e32 v0, v0, v1112; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)113; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v0, v0, v2114; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v0, off, s[8:11], 0115; SI-DENORM-SLOWFMA-NEXT:    s_endpgm116;117; GFX9-FLUSH-MAD-LABEL: fmuladd_f32:118; GFX9-FLUSH-MAD:       ; %bb.0:119; GFX9-FLUSH-MAD-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24120; GFX9-FLUSH-MAD-NEXT:    v_mov_b32_e32 v0, 0121; GFX9-FLUSH-MAD-NEXT:    s_waitcnt lgkmcnt(0)122; GFX9-FLUSH-MAD-NEXT:    global_load_dword v1, v0, s[10:11]123; GFX9-FLUSH-MAD-NEXT:    global_load_dword v2, v0, s[12:13]124; GFX9-FLUSH-MAD-NEXT:    global_load_dword v3, v0, s[14:15]125; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)126; GFX9-FLUSH-MAD-NEXT:    v_mac_f32_e32 v3, v1, v2127; GFX9-FLUSH-MAD-NEXT:    global_store_dword v0, v3, s[8:9]128; GFX9-FLUSH-MAD-NEXT:    s_endpgm129;130; GFX9-DENORM-FASTFMA-MAD-LABEL: fmuladd_f32:131; GFX9-DENORM-FASTFMA-MAD:       ; %bb.0:132; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24133; GFX9-DENORM-FASTFMA-MAD-NEXT:    v_mov_b32_e32 v0, 0134; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt lgkmcnt(0)135; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v1, v0, s[10:11]136; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v2, v0, s[12:13]137; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v3, v0, s[14:15]138; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt vmcnt(0)139; GFX9-DENORM-FASTFMA-MAD-NEXT:    v_fma_f32 v1, v1, v2, v3140; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_store_dword v0, v1, s[8:9]141; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_endpgm142;143; GFX9-FLUSH-FMAC-LABEL: fmuladd_f32:144; GFX9-FLUSH-FMAC:       ; %bb.0:145; GFX9-FLUSH-FMAC-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24146; GFX9-FLUSH-FMAC-NEXT:    v_mov_b32_e32 v0, 0147; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt lgkmcnt(0)148; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v1, v0, s[10:11]149; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v2, v0, s[12:13]150; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v3, v0, s[14:15]151; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)152; GFX9-FLUSH-FMAC-NEXT:    v_fmac_f32_e32 v3, v1, v2153; GFX9-FLUSH-FMAC-NEXT:    global_store_dword v0, v3, s[8:9]154; GFX9-FLUSH-FMAC-NEXT:    s_endpgm155;156; GFX9-DENORM-FASTFMA-FMAC-LABEL: fmuladd_f32:157; GFX9-DENORM-FASTFMA-FMAC:       ; %bb.0:158; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24159; GFX9-DENORM-FASTFMA-FMAC-NEXT:    v_mov_b32_e32 v0, 0160; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt lgkmcnt(0)161; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v1, v0, s[10:11]162; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v2, v0, s[12:13]163; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v3, v0, s[14:15]164; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt vmcnt(0)165; GFX9-DENORM-FASTFMA-FMAC-NEXT:    v_fmac_f32_e32 v3, v1, v2166; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_store_dword v0, v3, s[8:9]167; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_endpgm168;169; GFX10-LABEL: fmuladd_f32:170; GFX10:       ; %bb.0:171; GFX10-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x24172; GFX10-NEXT:    v_mov_b32_e32 v0, 0173; GFX10-NEXT:    s_waitcnt lgkmcnt(0)174; GFX10-NEXT:    s_clause 0x2175; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]176; GFX10-NEXT:    global_load_dword v2, v0, s[4:5]177; GFX10-NEXT:    global_load_dword v3, v0, s[6:7]178; GFX10-NEXT:    s_waitcnt vmcnt(0)179; GFX10-NEXT:    v_fmac_f32_e32 v3, v1, v2180; GFX10-NEXT:    global_store_dword v0, v3, s[0:1]181; GFX10-NEXT:    s_endpgm182  %r0 = load float, ptr addrspace(1) %in1183  %r1 = load float, ptr addrspace(1) %in2184  %r2 = load float, ptr addrspace(1) %in3185  %r3 = tail call float @llvm.fmuladd.f32(float %r0, float %r1, float %r2)186  store float %r3, ptr addrspace(1) %out187  ret void188}189 190define amdgpu_kernel void @fmul_fadd_f32(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2, ptr addrspace(1) %in3) #0 {191; SI-FLUSH-LABEL: fmul_fadd_f32:192; SI-FLUSH:       ; %bb.0:193; SI-FLUSH-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x9194; SI-FLUSH-NEXT:    s_mov_b32 s11, 0xf000195; SI-FLUSH-NEXT:    s_mov_b32 s10, -1196; SI-FLUSH-NEXT:    s_mov_b32 s14, s10197; SI-FLUSH-NEXT:    s_mov_b32 s15, s11198; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)199; SI-FLUSH-NEXT:    s_mov_b32 s12, s2200; SI-FLUSH-NEXT:    s_mov_b32 s13, s3201; SI-FLUSH-NEXT:    s_mov_b32 s16, s4202; SI-FLUSH-NEXT:    s_mov_b32 s17, s5203; SI-FLUSH-NEXT:    s_mov_b32 s18, s10204; SI-FLUSH-NEXT:    s_mov_b32 s19, s11205; SI-FLUSH-NEXT:    s_mov_b32 s4, s6206; SI-FLUSH-NEXT:    s_mov_b32 s5, s7207; SI-FLUSH-NEXT:    s_mov_b32 s6, s10208; SI-FLUSH-NEXT:    s_mov_b32 s7, s11209; SI-FLUSH-NEXT:    buffer_load_dword v0, off, s[12:15], 0 glc210; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)211; SI-FLUSH-NEXT:    buffer_load_dword v1, off, s[16:19], 0 glc212; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)213; SI-FLUSH-NEXT:    buffer_load_dword v2, off, s[4:7], 0 glc214; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)215; SI-FLUSH-NEXT:    s_mov_b32 s8, s0216; SI-FLUSH-NEXT:    s_mov_b32 s9, s1217; SI-FLUSH-NEXT:    v_mac_f32_e32 v2, v0, v1218; SI-FLUSH-NEXT:    buffer_store_dword v2, off, s[8:11], 0219; SI-FLUSH-NEXT:    s_endpgm220;221; SI-DENORM-FASTFMA-STRICT-LABEL: fmul_fadd_f32:222; SI-DENORM-FASTFMA-STRICT:       ; %bb.0:223; SI-DENORM-FASTFMA-STRICT-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x9224; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s11, 0xf000225; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s10, -1226; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s14, s10227; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s15, s11228; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt lgkmcnt(0)229; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s12, s2230; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s13, s3231; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s16, s4232; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s17, s5233; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s18, s10234; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s19, s11235; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s4, s6236; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s5, s7237; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s6, s10238; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s7, s11239; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v0, off, s[12:15], 0 glc240; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)241; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v1, off, s[16:19], 0 glc242; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)243; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v2, off, s[4:7], 0 glc244; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)245; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s8, s0246; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s9, s1247; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mul_f32_e32 v0, v0, v1248; SI-DENORM-FASTFMA-STRICT-NEXT:    v_add_f32_e32 v0, v0, v2249; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_store_dword v0, off, s[8:11], 0250; SI-DENORM-FASTFMA-STRICT-NEXT:    s_endpgm251;252; SI-DENORM-SLOWFMA-LABEL: fmul_fadd_f32:253; SI-DENORM-SLOWFMA:       ; %bb.0:254; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x9255; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s11, 0xf000256; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s10, -1257; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s14, s10258; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s15, s11259; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)260; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s12, s2261; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s13, s3262; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s16, s4263; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s17, s5264; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s18, s10265; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s19, s11266; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s4, s6267; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s5, s7268; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s6, s10269; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s7, s11270; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v0, off, s[12:15], 0 glc271; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)272; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v1, off, s[16:19], 0 glc273; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)274; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, off, s[4:7], 0 glc275; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)276; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s8, s0277; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s9, s1278; SI-DENORM-SLOWFMA-NEXT:    v_mul_f32_e32 v0, v0, v1279; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v0, v0, v2280; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v0, off, s[8:11], 0281; SI-DENORM-SLOWFMA-NEXT:    s_endpgm282;283; SI-DENORM-FASTFMA-CONTRACT-LABEL: fmul_fadd_f32:284; SI-DENORM-FASTFMA-CONTRACT:       ; %bb.0:285; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x9286; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s11, 0xf000287; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s10, -1288; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s14, s10289; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s15, s11290; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)291; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s12, s2292; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s13, s3293; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s16, s4294; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s17, s5295; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s18, s10296; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s19, s11297; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s4, s6298; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s5, s7299; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s6, s10300; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s7, s11301; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v0, off, s[12:15], 0 glc302; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)303; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v1, off, s[16:19], 0 glc304; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)305; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v2, off, s[4:7], 0 glc306; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)307; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s8, s0308; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s9, s1309; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_fma_f32 v0, v0, v1, v2310; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_store_dword v0, off, s[8:11], 0311; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_endpgm312;313; GFX9-FLUSH-LABEL: fmul_fadd_f32:314; GFX9-FLUSH:       ; %bb.0:315; GFX9-FLUSH-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24316; GFX9-FLUSH-NEXT:    v_mov_b32_e32 v0, 0317; GFX9-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)318; GFX9-FLUSH-NEXT:    global_load_dword v1, v0, s[10:11] glc319; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)320; GFX9-FLUSH-NEXT:    global_load_dword v2, v0, s[12:13] glc321; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)322; GFX9-FLUSH-NEXT:    global_load_dword v3, v0, s[14:15] glc323; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)324; GFX9-FLUSH-NEXT:    v_mac_f32_e32 v3, v1, v2325; GFX9-FLUSH-NEXT:    global_store_dword v0, v3, s[8:9]326; GFX9-FLUSH-NEXT:    s_endpgm327;328; GFX9-DENORM-LABEL: fmul_fadd_f32:329; GFX9-DENORM:       ; %bb.0:330; GFX9-DENORM-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24331; GFX9-DENORM-NEXT:    v_mov_b32_e32 v0, 0332; GFX9-DENORM-NEXT:    s_waitcnt lgkmcnt(0)333; GFX9-DENORM-NEXT:    global_load_dword v1, v0, s[10:11] glc334; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)335; GFX9-DENORM-NEXT:    global_load_dword v2, v0, s[12:13] glc336; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)337; GFX9-DENORM-NEXT:    global_load_dword v3, v0, s[14:15] glc338; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)339; GFX9-DENORM-NEXT:    v_mul_f32_e32 v1, v1, v2340; GFX9-DENORM-NEXT:    v_add_f32_e32 v1, v1, v3341; GFX9-DENORM-NEXT:    global_store_dword v0, v1, s[8:9]342; GFX9-DENORM-NEXT:    s_endpgm343;344; GFX10-FLUSH-LABEL: fmul_fadd_f32:345; GFX10-FLUSH:       ; %bb.0:346; GFX10-FLUSH-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x24347; GFX10-FLUSH-NEXT:    v_mov_b32_e32 v0, 0348; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)349; GFX10-FLUSH-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc350; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)351; GFX10-FLUSH-NEXT:    global_load_dword v2, v0, s[4:5] glc dlc352; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)353; GFX10-FLUSH-NEXT:    global_load_dword v3, v0, s[6:7] glc dlc354; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)355; GFX10-FLUSH-NEXT:    v_mac_f32_e32 v3, v1, v2356; GFX10-FLUSH-NEXT:    global_store_dword v0, v3, s[0:1]357; GFX10-FLUSH-NEXT:    s_endpgm358;359; GFX10-DENORM-LABEL: fmul_fadd_f32:360; GFX10-DENORM:       ; %bb.0:361; GFX10-DENORM-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x24362; GFX10-DENORM-NEXT:    v_mov_b32_e32 v0, 0363; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)364; GFX10-DENORM-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc365; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)366; GFX10-DENORM-NEXT:    global_load_dword v2, v0, s[4:5] glc dlc367; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)368; GFX10-DENORM-NEXT:    global_load_dword v3, v0, s[6:7] glc dlc369; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)370; GFX10-DENORM-NEXT:    v_mul_f32_e32 v1, v1, v2371; GFX10-DENORM-NEXT:    v_add_f32_e32 v1, v1, v3372; GFX10-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]373; GFX10-DENORM-NEXT:    s_endpgm374  %r0 = load volatile float, ptr addrspace(1) %in1375  %r1 = load volatile float, ptr addrspace(1) %in2376  %r2 = load volatile float, ptr addrspace(1) %in3377  %mul = fmul float %r0, %r1378  %add = fadd float %mul, %r2379  store float %add, ptr addrspace(1) %out380  ret void381}382 383define amdgpu_kernel void @fmul_fadd_contract_f32(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2, ptr addrspace(1) %in3) #0 {384; SI-FLUSH-LABEL: fmul_fadd_contract_f32:385; SI-FLUSH:       ; %bb.0:386; SI-FLUSH-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x9387; SI-FLUSH-NEXT:    s_mov_b32 s11, 0xf000388; SI-FLUSH-NEXT:    s_mov_b32 s10, -1389; SI-FLUSH-NEXT:    s_mov_b32 s14, s10390; SI-FLUSH-NEXT:    s_mov_b32 s15, s11391; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)392; SI-FLUSH-NEXT:    s_mov_b32 s12, s2393; SI-FLUSH-NEXT:    s_mov_b32 s13, s3394; SI-FLUSH-NEXT:    s_mov_b32 s16, s4395; SI-FLUSH-NEXT:    s_mov_b32 s17, s5396; SI-FLUSH-NEXT:    s_mov_b32 s18, s10397; SI-FLUSH-NEXT:    s_mov_b32 s19, s11398; SI-FLUSH-NEXT:    s_mov_b32 s4, s6399; SI-FLUSH-NEXT:    s_mov_b32 s5, s7400; SI-FLUSH-NEXT:    s_mov_b32 s6, s10401; SI-FLUSH-NEXT:    s_mov_b32 s7, s11402; SI-FLUSH-NEXT:    buffer_load_dword v0, off, s[12:15], 0 glc403; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)404; SI-FLUSH-NEXT:    buffer_load_dword v1, off, s[16:19], 0 glc405; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)406; SI-FLUSH-NEXT:    buffer_load_dword v2, off, s[4:7], 0 glc407; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)408; SI-FLUSH-NEXT:    s_mov_b32 s8, s0409; SI-FLUSH-NEXT:    s_mov_b32 s9, s1410; SI-FLUSH-NEXT:    v_mac_f32_e32 v2, v0, v1411; SI-FLUSH-NEXT:    buffer_store_dword v2, off, s[8:11], 0412; SI-FLUSH-NEXT:    s_endpgm413;414; SI-DENORM-FASTFMA-LABEL: fmul_fadd_contract_f32:415; SI-DENORM-FASTFMA:       ; %bb.0:416; SI-DENORM-FASTFMA-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x9417; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s11, 0xf000418; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s10, -1419; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s14, s10420; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s15, s11421; SI-DENORM-FASTFMA-NEXT:    s_waitcnt lgkmcnt(0)422; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s12, s2423; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s13, s3424; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s16, s4425; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s17, s5426; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s18, s10427; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s19, s11428; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s4, s6429; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s5, s7430; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s6, s10431; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s7, s11432; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v0, off, s[12:15], 0 glc433; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)434; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v1, off, s[16:19], 0 glc435; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)436; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v2, off, s[4:7], 0 glc437; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)438; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s8, s0439; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s9, s1440; SI-DENORM-FASTFMA-NEXT:    v_fma_f32 v0, v0, v1, v2441; SI-DENORM-FASTFMA-NEXT:    buffer_store_dword v0, off, s[8:11], 0442; SI-DENORM-FASTFMA-NEXT:    s_endpgm443;444; SI-DENORM-SLOWFMA-LABEL: fmul_fadd_contract_f32:445; SI-DENORM-SLOWFMA:       ; %bb.0:446; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x9447; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s11, 0xf000448; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s10, -1449; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s14, s10450; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s15, s11451; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)452; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s12, s2453; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s13, s3454; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s16, s4455; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s17, s5456; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s18, s10457; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s19, s11458; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s4, s6459; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s5, s7460; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s6, s10461; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s7, s11462; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v0, off, s[12:15], 0 glc463; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)464; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v1, off, s[16:19], 0 glc465; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)466; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, off, s[4:7], 0 glc467; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)468; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s8, s0469; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s9, s1470; SI-DENORM-SLOWFMA-NEXT:    v_mul_f32_e32 v0, v0, v1471; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v0, v0, v2472; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v0, off, s[8:11], 0473; SI-DENORM-SLOWFMA-NEXT:    s_endpgm474;475; GFX9-FLUSH-MAD-LABEL: fmul_fadd_contract_f32:476; GFX9-FLUSH-MAD:       ; %bb.0:477; GFX9-FLUSH-MAD-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24478; GFX9-FLUSH-MAD-NEXT:    v_mov_b32_e32 v0, 0479; GFX9-FLUSH-MAD-NEXT:    s_waitcnt lgkmcnt(0)480; GFX9-FLUSH-MAD-NEXT:    global_load_dword v1, v0, s[10:11] glc481; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)482; GFX9-FLUSH-MAD-NEXT:    global_load_dword v2, v0, s[12:13] glc483; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)484; GFX9-FLUSH-MAD-NEXT:    global_load_dword v3, v0, s[14:15] glc485; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)486; GFX9-FLUSH-MAD-NEXT:    v_mac_f32_e32 v3, v1, v2487; GFX9-FLUSH-MAD-NEXT:    global_store_dword v0, v3, s[8:9]488; GFX9-FLUSH-MAD-NEXT:    s_endpgm489;490; GFX9-DENORM-FASTFMA-MAD-LABEL: fmul_fadd_contract_f32:491; GFX9-DENORM-FASTFMA-MAD:       ; %bb.0:492; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24493; GFX9-DENORM-FASTFMA-MAD-NEXT:    v_mov_b32_e32 v0, 0494; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt lgkmcnt(0)495; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v1, v0, s[10:11] glc496; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt vmcnt(0)497; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v2, v0, s[12:13] glc498; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt vmcnt(0)499; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v3, v0, s[14:15] glc500; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt vmcnt(0)501; GFX9-DENORM-FASTFMA-MAD-NEXT:    v_fma_f32 v1, v1, v2, v3502; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_store_dword v0, v1, s[8:9]503; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_endpgm504;505; GFX9-FLUSH-FMAC-LABEL: fmul_fadd_contract_f32:506; GFX9-FLUSH-FMAC:       ; %bb.0:507; GFX9-FLUSH-FMAC-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24508; GFX9-FLUSH-FMAC-NEXT:    v_mov_b32_e32 v0, 0509; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt lgkmcnt(0)510; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v1, v0, s[10:11] glc511; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)512; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v2, v0, s[12:13] glc513; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)514; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v3, v0, s[14:15] glc515; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)516; GFX9-FLUSH-FMAC-NEXT:    v_fmac_f32_e32 v3, v1, v2517; GFX9-FLUSH-FMAC-NEXT:    global_store_dword v0, v3, s[8:9]518; GFX9-FLUSH-FMAC-NEXT:    s_endpgm519;520; GFX9-DENORM-FASTFMA-FMAC-LABEL: fmul_fadd_contract_f32:521; GFX9-DENORM-FASTFMA-FMAC:       ; %bb.0:522; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x24523; GFX9-DENORM-FASTFMA-FMAC-NEXT:    v_mov_b32_e32 v0, 0524; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt lgkmcnt(0)525; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v1, v0, s[10:11] glc526; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt vmcnt(0)527; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v2, v0, s[12:13] glc528; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt vmcnt(0)529; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v3, v0, s[14:15] glc530; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt vmcnt(0)531; GFX9-DENORM-FASTFMA-FMAC-NEXT:    v_fmac_f32_e32 v3, v1, v2532; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_store_dword v0, v3, s[8:9]533; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_endpgm534;535; GFX10-LABEL: fmul_fadd_contract_f32:536; GFX10:       ; %bb.0:537; GFX10-NEXT:    s_load_dwordx8 s[0:7], s[4:5], 0x24538; GFX10-NEXT:    v_mov_b32_e32 v0, 0539; GFX10-NEXT:    s_waitcnt lgkmcnt(0)540; GFX10-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc541; GFX10-NEXT:    s_waitcnt vmcnt(0)542; GFX10-NEXT:    global_load_dword v2, v0, s[4:5] glc dlc543; GFX10-NEXT:    s_waitcnt vmcnt(0)544; GFX10-NEXT:    global_load_dword v3, v0, s[6:7] glc dlc545; GFX10-NEXT:    s_waitcnt vmcnt(0)546; GFX10-NEXT:    v_fmac_f32_e32 v3, v1, v2547; GFX10-NEXT:    global_store_dword v0, v3, s[0:1]548; GFX10-NEXT:    s_endpgm549  %r0 = load volatile float, ptr addrspace(1) %in1550  %r1 = load volatile float, ptr addrspace(1) %in2551  %r2 = load volatile float, ptr addrspace(1) %in3552  %mul = fmul contract float %r0, %r1553  %add = fadd contract float %mul, %r2554  store float %add, ptr addrspace(1) %out555  ret void556}557 558define amdgpu_kernel void @fmuladd_2.0_a_b_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {559; SI-FLUSH-LABEL: fmuladd_2.0_a_b_f32:560; SI-FLUSH:       ; %bb.0:561; SI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9562; SI-FLUSH-NEXT:    s_mov_b32 s3, 0xf000563; SI-FLUSH-NEXT:    s_mov_b32 s2, 0564; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v0565; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 0566; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)567; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc568; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)569; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc570; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)571; SI-FLUSH-NEXT:    v_mac_f32_e32 v3, 2.0, v2572; SI-FLUSH-NEXT:    buffer_store_dword v3, v[0:1], s[0:3], 0 addr64573; SI-FLUSH-NEXT:    s_endpgm574;575; SI-DENORM-FASTFMA-LABEL: fmuladd_2.0_a_b_f32:576; SI-DENORM-FASTFMA:       ; %bb.0:577; SI-DENORM-FASTFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9578; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s3, 0xf000579; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s2, 0580; SI-DENORM-FASTFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0581; SI-DENORM-FASTFMA-NEXT:    v_mov_b32_e32 v1, 0582; SI-DENORM-FASTFMA-NEXT:    s_waitcnt lgkmcnt(0)583; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc584; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)585; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc586; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)587; SI-DENORM-FASTFMA-NEXT:    v_fma_f32 v2, v2, 2.0, v3588; SI-DENORM-FASTFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64589; SI-DENORM-FASTFMA-NEXT:    s_endpgm590;591; SI-DENORM-SLOWFMA-LABEL: fmuladd_2.0_a_b_f32:592; SI-DENORM-SLOWFMA:       ; %bb.0:593; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9594; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s3, 0xf000595; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s2, 0596; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0597; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 0598; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)599; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc600; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)601; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc602; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)603; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v2, v2604; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v2, v3605; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64606; SI-DENORM-SLOWFMA-NEXT:    s_endpgm607;608; GFX9-FLUSH-MAD-LABEL: fmuladd_2.0_a_b_f32:609; GFX9-FLUSH-MAD:       ; %bb.0:610; GFX9-FLUSH-MAD-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24611; GFX9-FLUSH-MAD-NEXT:    v_lshlrev_b32_e32 v0, 2, v0612; GFX9-FLUSH-MAD-NEXT:    s_waitcnt lgkmcnt(0)613; GFX9-FLUSH-MAD-NEXT:    global_load_dword v1, v0, s[0:1] glc614; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)615; GFX9-FLUSH-MAD-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc616; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)617; GFX9-FLUSH-MAD-NEXT:    v_mac_f32_e32 v2, 2.0, v1618; GFX9-FLUSH-MAD-NEXT:    global_store_dword v0, v2, s[0:1]619; GFX9-FLUSH-MAD-NEXT:    s_endpgm620;621; GFX9-DENORM-FASTFMA-MAD-LABEL: fmuladd_2.0_a_b_f32:622; GFX9-DENORM-FASTFMA-MAD:       ; %bb.0:623; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24624; GFX9-DENORM-FASTFMA-MAD-NEXT:    v_lshlrev_b32_e32 v0, 2, v0625; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt lgkmcnt(0)626; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v1, v0, s[0:1] glc627; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt vmcnt(0)628; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc629; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt vmcnt(0)630; GFX9-DENORM-FASTFMA-MAD-NEXT:    v_fma_f32 v1, v1, 2.0, v2631; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_store_dword v0, v1, s[0:1]632; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_endpgm633;634; GFX9-FLUSH-FMAC-LABEL: fmuladd_2.0_a_b_f32:635; GFX9-FLUSH-FMAC:       ; %bb.0:636; GFX9-FLUSH-FMAC-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24637; GFX9-FLUSH-FMAC-NEXT:    v_lshlrev_b32_e32 v0, 2, v0638; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt lgkmcnt(0)639; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v1, v0, s[0:1] glc640; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)641; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc642; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)643; GFX9-FLUSH-FMAC-NEXT:    v_fmac_f32_e32 v2, 2.0, v1644; GFX9-FLUSH-FMAC-NEXT:    global_store_dword v0, v2, s[0:1]645; GFX9-FLUSH-FMAC-NEXT:    s_endpgm646;647; GFX9-DENORM-FASTFMA-FMAC-LABEL: fmuladd_2.0_a_b_f32:648; GFX9-DENORM-FASTFMA-FMAC:       ; %bb.0:649; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24650; GFX9-DENORM-FASTFMA-FMAC-NEXT:    v_lshlrev_b32_e32 v0, 2, v0651; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt lgkmcnt(0)652; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v1, v0, s[0:1] glc653; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt vmcnt(0)654; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc655; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt vmcnt(0)656; GFX9-DENORM-FASTFMA-FMAC-NEXT:    v_fmac_f32_e32 v2, 2.0, v1657; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_store_dword v0, v2, s[0:1]658; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_endpgm659;660; GFX10-LABEL: fmuladd_2.0_a_b_f32:661; GFX10:       ; %bb.0:662; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24663; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v0664; GFX10-NEXT:    s_waitcnt lgkmcnt(0)665; GFX10-NEXT:    global_load_dword v1, v0, s[0:1] glc dlc666; GFX10-NEXT:    s_waitcnt vmcnt(0)667; GFX10-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc dlc668; GFX10-NEXT:    s_waitcnt vmcnt(0)669; GFX10-NEXT:    v_fmac_f32_e32 v2, 2.0, v1670; GFX10-NEXT:    global_store_dword v0, v2, s[0:1]671; GFX10-NEXT:    s_endpgm672  %tid = call i32 @llvm.amdgcn.workitem.id.x()673  %gep.0 = getelementptr float, ptr addrspace(1) %out, i32 %tid674  %gep.1 = getelementptr float, ptr addrspace(1) %gep.0, i32 1675  %gep.out = getelementptr float, ptr addrspace(1) %out, i32 %tid676 677  %r1 = load volatile float, ptr addrspace(1) %gep.0678  %r2 = load volatile float, ptr addrspace(1) %gep.1679 680  %r3 = tail call float @llvm.fmuladd.f32(float 2.0, float %r1, float %r2)681  store float %r3, ptr addrspace(1) %gep.out682  ret void683}684 685define amdgpu_kernel void @fmuladd_a_2.0_b_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {686; SI-FLUSH-LABEL: fmuladd_a_2.0_b_f32:687; SI-FLUSH:       ; %bb.0:688; SI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9689; SI-FLUSH-NEXT:    s_mov_b32 s3, 0xf000690; SI-FLUSH-NEXT:    s_mov_b32 s2, 0691; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v0692; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 0693; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)694; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc695; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)696; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc697; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)698; SI-FLUSH-NEXT:    v_mac_f32_e32 v3, 2.0, v2699; SI-FLUSH-NEXT:    buffer_store_dword v3, v[0:1], s[0:3], 0 addr64700; SI-FLUSH-NEXT:    s_endpgm701;702; SI-DENORM-FASTFMA-LABEL: fmuladd_a_2.0_b_f32:703; SI-DENORM-FASTFMA:       ; %bb.0:704; SI-DENORM-FASTFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9705; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s3, 0xf000706; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s2, 0707; SI-DENORM-FASTFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0708; SI-DENORM-FASTFMA-NEXT:    v_mov_b32_e32 v1, 0709; SI-DENORM-FASTFMA-NEXT:    s_waitcnt lgkmcnt(0)710; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc711; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)712; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc713; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)714; SI-DENORM-FASTFMA-NEXT:    v_fma_f32 v2, v2, 2.0, v3715; SI-DENORM-FASTFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64716; SI-DENORM-FASTFMA-NEXT:    s_endpgm717;718; SI-DENORM-SLOWFMA-LABEL: fmuladd_a_2.0_b_f32:719; SI-DENORM-SLOWFMA:       ; %bb.0:720; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9721; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s3, 0xf000722; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s2, 0723; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0724; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 0725; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)726; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc727; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)728; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc729; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)730; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v2, v2731; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v2, v3732; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64733; SI-DENORM-SLOWFMA-NEXT:    s_endpgm734;735; GFX9-FLUSH-MAD-LABEL: fmuladd_a_2.0_b_f32:736; GFX9-FLUSH-MAD:       ; %bb.0:737; GFX9-FLUSH-MAD-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24738; GFX9-FLUSH-MAD-NEXT:    v_lshlrev_b32_e32 v0, 2, v0739; GFX9-FLUSH-MAD-NEXT:    s_waitcnt lgkmcnt(0)740; GFX9-FLUSH-MAD-NEXT:    global_load_dword v1, v0, s[0:1] glc741; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)742; GFX9-FLUSH-MAD-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc743; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)744; GFX9-FLUSH-MAD-NEXT:    v_mac_f32_e32 v2, 2.0, v1745; GFX9-FLUSH-MAD-NEXT:    global_store_dword v0, v2, s[0:1]746; GFX9-FLUSH-MAD-NEXT:    s_endpgm747;748; GFX9-DENORM-FASTFMA-MAD-LABEL: fmuladd_a_2.0_b_f32:749; GFX9-DENORM-FASTFMA-MAD:       ; %bb.0:750; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24751; GFX9-DENORM-FASTFMA-MAD-NEXT:    v_lshlrev_b32_e32 v0, 2, v0752; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt lgkmcnt(0)753; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v1, v0, s[0:1] glc754; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt vmcnt(0)755; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc756; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt vmcnt(0)757; GFX9-DENORM-FASTFMA-MAD-NEXT:    v_fma_f32 v1, v1, 2.0, v2758; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_store_dword v0, v1, s[0:1]759; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_endpgm760;761; GFX9-FLUSH-FMAC-LABEL: fmuladd_a_2.0_b_f32:762; GFX9-FLUSH-FMAC:       ; %bb.0:763; GFX9-FLUSH-FMAC-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24764; GFX9-FLUSH-FMAC-NEXT:    v_lshlrev_b32_e32 v0, 2, v0765; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt lgkmcnt(0)766; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v1, v0, s[0:1] glc767; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)768; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc769; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)770; GFX9-FLUSH-FMAC-NEXT:    v_fmac_f32_e32 v2, 2.0, v1771; GFX9-FLUSH-FMAC-NEXT:    global_store_dword v0, v2, s[0:1]772; GFX9-FLUSH-FMAC-NEXT:    s_endpgm773;774; GFX9-DENORM-FASTFMA-FMAC-LABEL: fmuladd_a_2.0_b_f32:775; GFX9-DENORM-FASTFMA-FMAC:       ; %bb.0:776; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24777; GFX9-DENORM-FASTFMA-FMAC-NEXT:    v_lshlrev_b32_e32 v0, 2, v0778; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt lgkmcnt(0)779; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v1, v0, s[0:1] glc780; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt vmcnt(0)781; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc782; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt vmcnt(0)783; GFX9-DENORM-FASTFMA-FMAC-NEXT:    v_fmac_f32_e32 v2, 2.0, v1784; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_store_dword v0, v2, s[0:1]785; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_endpgm786;787; GFX10-LABEL: fmuladd_a_2.0_b_f32:788; GFX10:       ; %bb.0:789; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24790; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v0791; GFX10-NEXT:    s_waitcnt lgkmcnt(0)792; GFX10-NEXT:    global_load_dword v1, v0, s[0:1] glc dlc793; GFX10-NEXT:    s_waitcnt vmcnt(0)794; GFX10-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc dlc795; GFX10-NEXT:    s_waitcnt vmcnt(0)796; GFX10-NEXT:    v_fmac_f32_e32 v2, 2.0, v1797; GFX10-NEXT:    global_store_dword v0, v2, s[0:1]798; GFX10-NEXT:    s_endpgm799  %tid = call i32 @llvm.amdgcn.workitem.id.x()800  %gep.0 = getelementptr float, ptr addrspace(1) %out, i32 %tid801  %gep.1 = getelementptr float, ptr addrspace(1) %gep.0, i32 1802  %gep.out = getelementptr float, ptr addrspace(1) %out, i32 %tid803 804  %r1 = load volatile float, ptr addrspace(1) %gep.0805  %r2 = load volatile float, ptr addrspace(1) %gep.1806 807  %r3 = tail call float @llvm.fmuladd.f32(float %r1, float 2.0, float %r2)808  store float %r3, ptr addrspace(1) %gep.out809  ret void810}811 812define amdgpu_kernel void @fadd_a_a_b_f32(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2) #0 {813; SI-FLUSH-LABEL: fadd_a_a_b_f32:814; SI-FLUSH:       ; %bb.0:815; SI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9816; SI-FLUSH-NEXT:    s_mov_b32 s3, 0xf000817; SI-FLUSH-NEXT:    s_mov_b32 s2, 0818; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v0819; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 0820; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)821; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc822; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)823; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc824; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)825; SI-FLUSH-NEXT:    v_mac_f32_e32 v3, 2.0, v2826; SI-FLUSH-NEXT:    buffer_store_dword v3, v[0:1], s[0:3], 0 addr64827; SI-FLUSH-NEXT:    s_endpgm828;829; SI-DENORM-FASTFMA-STRICT-LABEL: fadd_a_a_b_f32:830; SI-DENORM-FASTFMA-STRICT:       ; %bb.0:831; SI-DENORM-FASTFMA-STRICT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9832; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s3, 0xf000833; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s2, 0834; SI-DENORM-FASTFMA-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 2, v0835; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mov_b32_e32 v1, 0836; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt lgkmcnt(0)837; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc838; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)839; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc840; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)841; SI-DENORM-FASTFMA-STRICT-NEXT:    v_add_f32_e32 v2, v2, v2842; SI-DENORM-FASTFMA-STRICT-NEXT:    v_add_f32_e32 v2, v2, v3843; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64844; SI-DENORM-FASTFMA-STRICT-NEXT:    s_endpgm845;846; SI-DENORM-SLOWFMA-LABEL: fadd_a_a_b_f32:847; SI-DENORM-SLOWFMA:       ; %bb.0:848; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9849; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s3, 0xf000850; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s2, 0851; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0852; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 0853; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)854; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc855; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)856; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc857; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)858; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v2, v2859; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v2, v3860; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64861; SI-DENORM-SLOWFMA-NEXT:    s_endpgm862;863; SI-DENORM-FASTFMA-CONTRACT-LABEL: fadd_a_a_b_f32:864; SI-DENORM-FASTFMA-CONTRACT:       ; %bb.0:865; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9866; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s3, 0xf000867; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s2, 0868; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 2, v0869; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_mov_b32_e32 v1, 0870; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)871; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc872; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)873; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc874; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)875; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_fma_f32 v2, v2, 2.0, v3876; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64877; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_endpgm878;879; GFX9-FLUSH-LABEL: fadd_a_a_b_f32:880; GFX9-FLUSH:       ; %bb.0:881; GFX9-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24882; GFX9-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v0883; GFX9-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)884; GFX9-FLUSH-NEXT:    global_load_dword v1, v0, s[0:1] glc885; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)886; GFX9-FLUSH-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc887; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)888; GFX9-FLUSH-NEXT:    v_mac_f32_e32 v2, 2.0, v1889; GFX9-FLUSH-NEXT:    global_store_dword v0, v2, s[0:1]890; GFX9-FLUSH-NEXT:    s_endpgm891;892; GFX9-DENORM-LABEL: fadd_a_a_b_f32:893; GFX9-DENORM:       ; %bb.0:894; GFX9-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24895; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v0896; GFX9-DENORM-NEXT:    s_waitcnt lgkmcnt(0)897; GFX9-DENORM-NEXT:    global_load_dword v1, v0, s[0:1] glc898; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)899; GFX9-DENORM-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc900; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)901; GFX9-DENORM-NEXT:    v_add_f32_e32 v1, v1, v1902; GFX9-DENORM-NEXT:    v_add_f32_e32 v1, v1, v2903; GFX9-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]904; GFX9-DENORM-NEXT:    s_endpgm905;906; GFX10-FLUSH-LABEL: fadd_a_a_b_f32:907; GFX10-FLUSH:       ; %bb.0:908; GFX10-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24909; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v0910; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)911; GFX10-FLUSH-NEXT:    global_load_dword v1, v0, s[0:1] glc dlc912; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)913; GFX10-FLUSH-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc dlc914; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)915; GFX10-FLUSH-NEXT:    v_mac_f32_e32 v2, 2.0, v1916; GFX10-FLUSH-NEXT:    global_store_dword v0, v2, s[0:1]917; GFX10-FLUSH-NEXT:    s_endpgm918;919; GFX10-DENORM-LABEL: fadd_a_a_b_f32:920; GFX10-DENORM:       ; %bb.0:921; GFX10-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24922; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v0923; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)924; GFX10-DENORM-NEXT:    global_load_dword v1, v0, s[0:1] glc dlc925; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)926; GFX10-DENORM-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc dlc927; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)928; GFX10-DENORM-NEXT:    v_add_f32_e32 v1, v1, v1929; GFX10-DENORM-NEXT:    v_add_f32_e32 v1, v1, v2930; GFX10-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]931; GFX10-DENORM-NEXT:    s_endpgm932  %tid = call i32 @llvm.amdgcn.workitem.id.x()933  %gep.0 = getelementptr float, ptr addrspace(1) %out, i32 %tid934  %gep.1 = getelementptr float, ptr addrspace(1) %gep.0, i32 1935  %gep.out = getelementptr float, ptr addrspace(1) %out, i32 %tid936 937  %r0 = load volatile float, ptr addrspace(1) %gep.0938  %r1 = load volatile float, ptr addrspace(1) %gep.1939 940  %add.0 = fadd float %r0, %r0941  %add.1 = fadd float %add.0, %r1942  store float %add.1, ptr addrspace(1) %gep.out943  ret void944}945 946define amdgpu_kernel void @fadd_b_a_a_f32(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2) #0 {947; SI-FLUSH-LABEL: fadd_b_a_a_f32:948; SI-FLUSH:       ; %bb.0:949; SI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9950; SI-FLUSH-NEXT:    s_mov_b32 s3, 0xf000951; SI-FLUSH-NEXT:    s_mov_b32 s2, 0952; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v0953; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 0954; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)955; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc956; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)957; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc958; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)959; SI-FLUSH-NEXT:    v_mac_f32_e32 v3, 2.0, v2960; SI-FLUSH-NEXT:    buffer_store_dword v3, v[0:1], s[0:3], 0 addr64961; SI-FLUSH-NEXT:    s_endpgm962;963; SI-DENORM-FASTFMA-STRICT-LABEL: fadd_b_a_a_f32:964; SI-DENORM-FASTFMA-STRICT:       ; %bb.0:965; SI-DENORM-FASTFMA-STRICT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9966; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s3, 0xf000967; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s2, 0968; SI-DENORM-FASTFMA-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 2, v0969; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mov_b32_e32 v1, 0970; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt lgkmcnt(0)971; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc972; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)973; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc974; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)975; SI-DENORM-FASTFMA-STRICT-NEXT:    v_add_f32_e32 v2, v2, v2976; SI-DENORM-FASTFMA-STRICT-NEXT:    v_add_f32_e32 v2, v3, v2977; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64978; SI-DENORM-FASTFMA-STRICT-NEXT:    s_endpgm979;980; SI-DENORM-SLOWFMA-LABEL: fadd_b_a_a_f32:981; SI-DENORM-SLOWFMA:       ; %bb.0:982; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x9983; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s3, 0xf000984; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s2, 0985; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0986; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 0987; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)988; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc989; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)990; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc991; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)992; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v2, v2993; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v3, v2994; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64995; SI-DENORM-SLOWFMA-NEXT:    s_endpgm996;997; SI-DENORM-FASTFMA-CONTRACT-LABEL: fadd_b_a_a_f32:998; SI-DENORM-FASTFMA-CONTRACT:       ; %bb.0:999; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x91000; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s3, 0xf0001001; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s2, 01002; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 2, v01003; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_mov_b32_e32 v1, 01004; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)1005; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc1006; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)1007; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc1008; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)1009; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_fma_f32 v2, v2, 2.0, v31010; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641011; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_endpgm1012;1013; GFX9-FLUSH-LABEL: fadd_b_a_a_f32:1014; GFX9-FLUSH:       ; %bb.0:1015; GFX9-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241016; GFX9-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v01017; GFX9-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1018; GFX9-FLUSH-NEXT:    global_load_dword v1, v0, s[0:1] glc1019; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)1020; GFX9-FLUSH-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1021; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)1022; GFX9-FLUSH-NEXT:    v_mac_f32_e32 v2, 2.0, v11023; GFX9-FLUSH-NEXT:    global_store_dword v0, v2, s[0:1]1024; GFX9-FLUSH-NEXT:    s_endpgm1025;1026; GFX9-DENORM-LABEL: fadd_b_a_a_f32:1027; GFX9-DENORM:       ; %bb.0:1028; GFX9-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241029; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v01030; GFX9-DENORM-NEXT:    s_waitcnt lgkmcnt(0)1031; GFX9-DENORM-NEXT:    global_load_dword v1, v0, s[0:1] glc1032; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)1033; GFX9-DENORM-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1034; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)1035; GFX9-DENORM-NEXT:    v_add_f32_e32 v1, v1, v11036; GFX9-DENORM-NEXT:    v_add_f32_e32 v1, v2, v11037; GFX9-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]1038; GFX9-DENORM-NEXT:    s_endpgm1039;1040; GFX10-FLUSH-LABEL: fadd_b_a_a_f32:1041; GFX10-FLUSH:       ; %bb.0:1042; GFX10-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241043; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v01044; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1045; GFX10-FLUSH-NEXT:    global_load_dword v1, v0, s[0:1] glc dlc1046; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1047; GFX10-FLUSH-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc dlc1048; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1049; GFX10-FLUSH-NEXT:    v_mac_f32_e32 v2, 2.0, v11050; GFX10-FLUSH-NEXT:    global_store_dword v0, v2, s[0:1]1051; GFX10-FLUSH-NEXT:    s_endpgm1052;1053; GFX10-DENORM-LABEL: fadd_b_a_a_f32:1054; GFX10-DENORM:       ; %bb.0:1055; GFX10-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241056; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v01057; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)1058; GFX10-DENORM-NEXT:    global_load_dword v1, v0, s[0:1] glc dlc1059; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1060; GFX10-DENORM-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc dlc1061; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1062; GFX10-DENORM-NEXT:    v_add_f32_e32 v1, v1, v11063; GFX10-DENORM-NEXT:    v_add_f32_e32 v1, v2, v11064; GFX10-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]1065; GFX10-DENORM-NEXT:    s_endpgm1066  %tid = call i32 @llvm.amdgcn.workitem.id.x()1067  %gep.0 = getelementptr float, ptr addrspace(1) %out, i32 %tid1068  %gep.1 = getelementptr float, ptr addrspace(1) %gep.0, i32 11069  %gep.out = getelementptr float, ptr addrspace(1) %out, i32 %tid1070 1071  %r0 = load volatile float, ptr addrspace(1) %gep.01072  %r1 = load volatile float, ptr addrspace(1) %gep.11073 1074  %add.0 = fadd float %r0, %r01075  %add.1 = fadd float %r1, %add.01076  store float %add.1, ptr addrspace(1) %gep.out1077  ret void1078}1079 1080define amdgpu_kernel void @fmuladd_neg_2.0_a_b_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1081; SI-FLUSH-LABEL: fmuladd_neg_2.0_a_b_f32:1082; SI-FLUSH:       ; %bb.0:1083; SI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x91084; SI-FLUSH-NEXT:    s_mov_b32 s3, 0xf0001085; SI-FLUSH-NEXT:    s_mov_b32 s2, 01086; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v01087; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 01088; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1089; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc1090; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1091; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc1092; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1093; SI-FLUSH-NEXT:    v_mac_f32_e32 v3, -2.0, v21094; SI-FLUSH-NEXT:    buffer_store_dword v3, v[0:1], s[0:3], 0 addr641095; SI-FLUSH-NEXT:    s_endpgm1096;1097; SI-DENORM-FASTFMA-LABEL: fmuladd_neg_2.0_a_b_f32:1098; SI-DENORM-FASTFMA:       ; %bb.0:1099; SI-DENORM-FASTFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x91100; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s3, 0xf0001101; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s2, 01102; SI-DENORM-FASTFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v01103; SI-DENORM-FASTFMA-NEXT:    v_mov_b32_e32 v1, 01104; SI-DENORM-FASTFMA-NEXT:    s_waitcnt lgkmcnt(0)1105; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc1106; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)1107; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc1108; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)1109; SI-DENORM-FASTFMA-NEXT:    v_fma_f32 v2, v2, -2.0, v31110; SI-DENORM-FASTFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641111; SI-DENORM-FASTFMA-NEXT:    s_endpgm1112;1113; SI-DENORM-SLOWFMA-LABEL: fmuladd_neg_2.0_a_b_f32:1114; SI-DENORM-SLOWFMA:       ; %bb.0:1115; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x91116; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s3, 0xf0001117; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s2, 01118; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v01119; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 01120; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)1121; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc1122; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1123; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc1124; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1125; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v2, v21126; SI-DENORM-SLOWFMA-NEXT:    v_sub_f32_e32 v2, v3, v21127; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641128; SI-DENORM-SLOWFMA-NEXT:    s_endpgm1129;1130; GFX9-FLUSH-MAD-LABEL: fmuladd_neg_2.0_a_b_f32:1131; GFX9-FLUSH-MAD:       ; %bb.0:1132; GFX9-FLUSH-MAD-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241133; GFX9-FLUSH-MAD-NEXT:    v_lshlrev_b32_e32 v0, 2, v01134; GFX9-FLUSH-MAD-NEXT:    s_waitcnt lgkmcnt(0)1135; GFX9-FLUSH-MAD-NEXT:    global_load_dword v1, v0, s[0:1] glc1136; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)1137; GFX9-FLUSH-MAD-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1138; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)1139; GFX9-FLUSH-MAD-NEXT:    v_mac_f32_e32 v2, -2.0, v11140; GFX9-FLUSH-MAD-NEXT:    global_store_dword v0, v2, s[0:1]1141; GFX9-FLUSH-MAD-NEXT:    s_endpgm1142;1143; GFX9-DENORM-FASTFMA-MAD-LABEL: fmuladd_neg_2.0_a_b_f32:1144; GFX9-DENORM-FASTFMA-MAD:       ; %bb.0:1145; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241146; GFX9-DENORM-FASTFMA-MAD-NEXT:    v_lshlrev_b32_e32 v0, 2, v01147; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt lgkmcnt(0)1148; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v1, v0, s[0:1] glc1149; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt vmcnt(0)1150; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1151; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt vmcnt(0)1152; GFX9-DENORM-FASTFMA-MAD-NEXT:    v_fma_f32 v1, v1, -2.0, v21153; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_store_dword v0, v1, s[0:1]1154; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_endpgm1155;1156; GFX9-FLUSH-FMAC-LABEL: fmuladd_neg_2.0_a_b_f32:1157; GFX9-FLUSH-FMAC:       ; %bb.0:1158; GFX9-FLUSH-FMAC-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241159; GFX9-FLUSH-FMAC-NEXT:    v_lshlrev_b32_e32 v0, 2, v01160; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt lgkmcnt(0)1161; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v1, v0, s[0:1] glc1162; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)1163; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1164; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)1165; GFX9-FLUSH-FMAC-NEXT:    v_fmac_f32_e32 v2, -2.0, v11166; GFX9-FLUSH-FMAC-NEXT:    global_store_dword v0, v2, s[0:1]1167; GFX9-FLUSH-FMAC-NEXT:    s_endpgm1168;1169; GFX9-DENORM-FASTFMA-FMAC-LABEL: fmuladd_neg_2.0_a_b_f32:1170; GFX9-DENORM-FASTFMA-FMAC:       ; %bb.0:1171; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241172; GFX9-DENORM-FASTFMA-FMAC-NEXT:    v_lshlrev_b32_e32 v0, 2, v01173; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt lgkmcnt(0)1174; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v1, v0, s[0:1] glc1175; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt vmcnt(0)1176; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1177; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt vmcnt(0)1178; GFX9-DENORM-FASTFMA-FMAC-NEXT:    v_fmac_f32_e32 v2, -2.0, v11179; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_store_dword v0, v2, s[0:1]1180; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_endpgm1181;1182; GFX10-LABEL: fmuladd_neg_2.0_a_b_f32:1183; GFX10:       ; %bb.0:1184; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241185; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v01186; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1187; GFX10-NEXT:    global_load_dword v1, v0, s[0:1] glc dlc1188; GFX10-NEXT:    s_waitcnt vmcnt(0)1189; GFX10-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc dlc1190; GFX10-NEXT:    s_waitcnt vmcnt(0)1191; GFX10-NEXT:    v_fmac_f32_e32 v2, -2.0, v11192; GFX10-NEXT:    global_store_dword v0, v2, s[0:1]1193; GFX10-NEXT:    s_endpgm1194  %tid = call i32 @llvm.amdgcn.workitem.id.x()1195  %gep.0 = getelementptr float, ptr addrspace(1) %out, i32 %tid1196  %gep.1 = getelementptr float, ptr addrspace(1) %gep.0, i32 11197  %gep.out = getelementptr float, ptr addrspace(1) %out, i32 %tid1198 1199  %r1 = load volatile float, ptr addrspace(1) %gep.01200  %r2 = load volatile float, ptr addrspace(1) %gep.11201 1202  %r3 = tail call float @llvm.fmuladd.f32(float -2.0, float %r1, float %r2)1203  store float %r3, ptr addrspace(1) %gep.out1204  ret void1205}1206 1207define amdgpu_kernel void @fmuladd_neg_2.0_neg_a_b_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1208; SI-FLUSH-LABEL: fmuladd_neg_2.0_neg_a_b_f32:1209; SI-FLUSH:       ; %bb.0:1210; SI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x91211; SI-FLUSH-NEXT:    s_mov_b32 s3, 0xf0001212; SI-FLUSH-NEXT:    s_mov_b32 s2, 01213; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v01214; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 01215; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1216; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc1217; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1218; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc1219; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1220; SI-FLUSH-NEXT:    v_mac_f32_e32 v3, 2.0, v21221; SI-FLUSH-NEXT:    buffer_store_dword v3, v[0:1], s[0:3], 0 addr641222; SI-FLUSH-NEXT:    s_endpgm1223;1224; SI-DENORM-FASTFMA-LABEL: fmuladd_neg_2.0_neg_a_b_f32:1225; SI-DENORM-FASTFMA:       ; %bb.0:1226; SI-DENORM-FASTFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x91227; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s3, 0xf0001228; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s2, 01229; SI-DENORM-FASTFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v01230; SI-DENORM-FASTFMA-NEXT:    v_mov_b32_e32 v1, 01231; SI-DENORM-FASTFMA-NEXT:    s_waitcnt lgkmcnt(0)1232; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc1233; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)1234; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc1235; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)1236; SI-DENORM-FASTFMA-NEXT:    v_fma_f32 v2, v2, 2.0, v31237; SI-DENORM-FASTFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641238; SI-DENORM-FASTFMA-NEXT:    s_endpgm1239;1240; SI-DENORM-SLOWFMA-LABEL: fmuladd_neg_2.0_neg_a_b_f32:1241; SI-DENORM-SLOWFMA:       ; %bb.0:1242; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x91243; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s3, 0xf0001244; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s2, 01245; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v01246; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 01247; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)1248; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc1249; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1250; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc1251; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1252; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v2, v21253; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v3, v21254; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641255; SI-DENORM-SLOWFMA-NEXT:    s_endpgm1256;1257; GFX9-FLUSH-MAD-LABEL: fmuladd_neg_2.0_neg_a_b_f32:1258; GFX9-FLUSH-MAD:       ; %bb.0:1259; GFX9-FLUSH-MAD-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241260; GFX9-FLUSH-MAD-NEXT:    v_lshlrev_b32_e32 v0, 2, v01261; GFX9-FLUSH-MAD-NEXT:    s_waitcnt lgkmcnt(0)1262; GFX9-FLUSH-MAD-NEXT:    global_load_dword v1, v0, s[0:1] glc1263; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)1264; GFX9-FLUSH-MAD-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1265; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)1266; GFX9-FLUSH-MAD-NEXT:    v_mac_f32_e32 v2, 2.0, v11267; GFX9-FLUSH-MAD-NEXT:    global_store_dword v0, v2, s[0:1]1268; GFX9-FLUSH-MAD-NEXT:    s_endpgm1269;1270; GFX9-DENORM-FASTFMA-MAD-LABEL: fmuladd_neg_2.0_neg_a_b_f32:1271; GFX9-DENORM-FASTFMA-MAD:       ; %bb.0:1272; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241273; GFX9-DENORM-FASTFMA-MAD-NEXT:    v_lshlrev_b32_e32 v0, 2, v01274; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt lgkmcnt(0)1275; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v1, v0, s[0:1] glc1276; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt vmcnt(0)1277; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1278; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt vmcnt(0)1279; GFX9-DENORM-FASTFMA-MAD-NEXT:    v_fma_f32 v1, v1, 2.0, v21280; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_store_dword v0, v1, s[0:1]1281; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_endpgm1282;1283; GFX9-FLUSH-FMAC-LABEL: fmuladd_neg_2.0_neg_a_b_f32:1284; GFX9-FLUSH-FMAC:       ; %bb.0:1285; GFX9-FLUSH-FMAC-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241286; GFX9-FLUSH-FMAC-NEXT:    v_lshlrev_b32_e32 v0, 2, v01287; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt lgkmcnt(0)1288; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v1, v0, s[0:1] glc1289; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)1290; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1291; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)1292; GFX9-FLUSH-FMAC-NEXT:    v_fmac_f32_e32 v2, 2.0, v11293; GFX9-FLUSH-FMAC-NEXT:    global_store_dword v0, v2, s[0:1]1294; GFX9-FLUSH-FMAC-NEXT:    s_endpgm1295;1296; GFX9-DENORM-FASTFMA-FMAC-LABEL: fmuladd_neg_2.0_neg_a_b_f32:1297; GFX9-DENORM-FASTFMA-FMAC:       ; %bb.0:1298; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241299; GFX9-DENORM-FASTFMA-FMAC-NEXT:    v_lshlrev_b32_e32 v0, 2, v01300; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt lgkmcnt(0)1301; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v1, v0, s[0:1] glc1302; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt vmcnt(0)1303; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1304; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt vmcnt(0)1305; GFX9-DENORM-FASTFMA-FMAC-NEXT:    v_fmac_f32_e32 v2, 2.0, v11306; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_store_dword v0, v2, s[0:1]1307; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_endpgm1308;1309; GFX10-LABEL: fmuladd_neg_2.0_neg_a_b_f32:1310; GFX10:       ; %bb.0:1311; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241312; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v01313; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1314; GFX10-NEXT:    global_load_dword v1, v0, s[0:1] glc dlc1315; GFX10-NEXT:    s_waitcnt vmcnt(0)1316; GFX10-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc dlc1317; GFX10-NEXT:    s_waitcnt vmcnt(0)1318; GFX10-NEXT:    v_fmac_f32_e32 v2, 2.0, v11319; GFX10-NEXT:    global_store_dword v0, v2, s[0:1]1320; GFX10-NEXT:    s_endpgm1321  %tid = call i32 @llvm.amdgcn.workitem.id.x()1322  %gep.0 = getelementptr float, ptr addrspace(1) %out, i32 %tid1323  %gep.1 = getelementptr float, ptr addrspace(1) %gep.0, i32 11324  %gep.out = getelementptr float, ptr addrspace(1) %out, i32 %tid1325 1326  %r1 = load volatile float, ptr addrspace(1) %gep.01327  %r2 = load volatile float, ptr addrspace(1) %gep.11328 1329  %r1.fneg = fneg float %r11330 1331  %r3 = tail call float @llvm.fmuladd.f32(float -2.0, float %r1.fneg, float %r2)1332  store float %r3, ptr addrspace(1) %gep.out1333  ret void1334}1335 1336define amdgpu_kernel void @fmuladd_2.0_neg_a_b_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1337; SI-FLUSH-LABEL: fmuladd_2.0_neg_a_b_f32:1338; SI-FLUSH:       ; %bb.0:1339; SI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x91340; SI-FLUSH-NEXT:    s_mov_b32 s3, 0xf0001341; SI-FLUSH-NEXT:    s_mov_b32 s2, 01342; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v01343; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 01344; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1345; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc1346; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1347; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc1348; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1349; SI-FLUSH-NEXT:    v_mac_f32_e32 v3, -2.0, v21350; SI-FLUSH-NEXT:    buffer_store_dword v3, v[0:1], s[0:3], 0 addr641351; SI-FLUSH-NEXT:    s_endpgm1352;1353; SI-DENORM-FASTFMA-LABEL: fmuladd_2.0_neg_a_b_f32:1354; SI-DENORM-FASTFMA:       ; %bb.0:1355; SI-DENORM-FASTFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x91356; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s3, 0xf0001357; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s2, 01358; SI-DENORM-FASTFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v01359; SI-DENORM-FASTFMA-NEXT:    v_mov_b32_e32 v1, 01360; SI-DENORM-FASTFMA-NEXT:    s_waitcnt lgkmcnt(0)1361; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc1362; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)1363; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc1364; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)1365; SI-DENORM-FASTFMA-NEXT:    v_fma_f32 v2, v2, -2.0, v31366; SI-DENORM-FASTFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641367; SI-DENORM-FASTFMA-NEXT:    s_endpgm1368;1369; SI-DENORM-SLOWFMA-LABEL: fmuladd_2.0_neg_a_b_f32:1370; SI-DENORM-SLOWFMA:       ; %bb.0:1371; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x91372; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s3, 0xf0001373; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s2, 01374; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v01375; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 01376; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)1377; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc1378; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1379; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc1380; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1381; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v2, v21382; SI-DENORM-SLOWFMA-NEXT:    v_sub_f32_e32 v2, v3, v21383; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641384; SI-DENORM-SLOWFMA-NEXT:    s_endpgm1385;1386; GFX9-FLUSH-MAD-LABEL: fmuladd_2.0_neg_a_b_f32:1387; GFX9-FLUSH-MAD:       ; %bb.0:1388; GFX9-FLUSH-MAD-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241389; GFX9-FLUSH-MAD-NEXT:    v_lshlrev_b32_e32 v0, 2, v01390; GFX9-FLUSH-MAD-NEXT:    s_waitcnt lgkmcnt(0)1391; GFX9-FLUSH-MAD-NEXT:    global_load_dword v1, v0, s[0:1] glc1392; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)1393; GFX9-FLUSH-MAD-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1394; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)1395; GFX9-FLUSH-MAD-NEXT:    v_mac_f32_e32 v2, -2.0, v11396; GFX9-FLUSH-MAD-NEXT:    global_store_dword v0, v2, s[0:1]1397; GFX9-FLUSH-MAD-NEXT:    s_endpgm1398;1399; GFX9-DENORM-FASTFMA-MAD-LABEL: fmuladd_2.0_neg_a_b_f32:1400; GFX9-DENORM-FASTFMA-MAD:       ; %bb.0:1401; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241402; GFX9-DENORM-FASTFMA-MAD-NEXT:    v_lshlrev_b32_e32 v0, 2, v01403; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt lgkmcnt(0)1404; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v1, v0, s[0:1] glc1405; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt vmcnt(0)1406; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1407; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_waitcnt vmcnt(0)1408; GFX9-DENORM-FASTFMA-MAD-NEXT:    v_fma_f32 v1, v1, -2.0, v21409; GFX9-DENORM-FASTFMA-MAD-NEXT:    global_store_dword v0, v1, s[0:1]1410; GFX9-DENORM-FASTFMA-MAD-NEXT:    s_endpgm1411;1412; GFX9-FLUSH-FMAC-LABEL: fmuladd_2.0_neg_a_b_f32:1413; GFX9-FLUSH-FMAC:       ; %bb.0:1414; GFX9-FLUSH-FMAC-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241415; GFX9-FLUSH-FMAC-NEXT:    v_lshlrev_b32_e32 v0, 2, v01416; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt lgkmcnt(0)1417; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v1, v0, s[0:1] glc1418; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)1419; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1420; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)1421; GFX9-FLUSH-FMAC-NEXT:    v_fmac_f32_e32 v2, -2.0, v11422; GFX9-FLUSH-FMAC-NEXT:    global_store_dword v0, v2, s[0:1]1423; GFX9-FLUSH-FMAC-NEXT:    s_endpgm1424;1425; GFX9-DENORM-FASTFMA-FMAC-LABEL: fmuladd_2.0_neg_a_b_f32:1426; GFX9-DENORM-FASTFMA-FMAC:       ; %bb.0:1427; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241428; GFX9-DENORM-FASTFMA-FMAC-NEXT:    v_lshlrev_b32_e32 v0, 2, v01429; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt lgkmcnt(0)1430; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v1, v0, s[0:1] glc1431; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt vmcnt(0)1432; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1433; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_waitcnt vmcnt(0)1434; GFX9-DENORM-FASTFMA-FMAC-NEXT:    v_fmac_f32_e32 v2, -2.0, v11435; GFX9-DENORM-FASTFMA-FMAC-NEXT:    global_store_dword v0, v2, s[0:1]1436; GFX9-DENORM-FASTFMA-FMAC-NEXT:    s_endpgm1437;1438; GFX10-LABEL: fmuladd_2.0_neg_a_b_f32:1439; GFX10:       ; %bb.0:1440; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241441; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v01442; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1443; GFX10-NEXT:    global_load_dword v1, v0, s[0:1] glc dlc1444; GFX10-NEXT:    s_waitcnt vmcnt(0)1445; GFX10-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc dlc1446; GFX10-NEXT:    s_waitcnt vmcnt(0)1447; GFX10-NEXT:    v_fmac_f32_e32 v2, -2.0, v11448; GFX10-NEXT:    global_store_dword v0, v2, s[0:1]1449; GFX10-NEXT:    s_endpgm1450  %tid = call i32 @llvm.amdgcn.workitem.id.x()1451  %gep.0 = getelementptr float, ptr addrspace(1) %out, i32 %tid1452  %gep.1 = getelementptr float, ptr addrspace(1) %gep.0, i32 11453  %gep.out = getelementptr float, ptr addrspace(1) %out, i32 %tid1454 1455  %r1 = load volatile float, ptr addrspace(1) %gep.01456  %r2 = load volatile float, ptr addrspace(1) %gep.11457 1458  %r1.fneg = fneg float %r11459 1460  %r3 = tail call float @llvm.fmuladd.f32(float 2.0, float %r1.fneg, float %r2)1461  store float %r3, ptr addrspace(1) %gep.out1462  ret void1463}1464 1465define amdgpu_kernel void @fmuladd_2.0_a_neg_b_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {1466; SI-FLUSH-LABEL: fmuladd_2.0_a_neg_b_f32:1467; SI-FLUSH:       ; %bb.0:1468; SI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x91469; SI-FLUSH-NEXT:    s_mov_b32 s3, 0xf0001470; SI-FLUSH-NEXT:    s_mov_b32 s2, 01471; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v01472; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 01473; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1474; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc1475; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1476; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc1477; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1478; SI-FLUSH-NEXT:    v_mad_f32 v2, v2, 2.0, -v31479; SI-FLUSH-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641480; SI-FLUSH-NEXT:    s_endpgm1481;1482; SI-DENORM-FASTFMA-LABEL: fmuladd_2.0_a_neg_b_f32:1483; SI-DENORM-FASTFMA:       ; %bb.0:1484; SI-DENORM-FASTFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x91485; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s3, 0xf0001486; SI-DENORM-FASTFMA-NEXT:    s_mov_b32 s2, 01487; SI-DENORM-FASTFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v01488; SI-DENORM-FASTFMA-NEXT:    v_mov_b32_e32 v1, 01489; SI-DENORM-FASTFMA-NEXT:    s_waitcnt lgkmcnt(0)1490; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc1491; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)1492; SI-DENORM-FASTFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc1493; SI-DENORM-FASTFMA-NEXT:    s_waitcnt vmcnt(0)1494; SI-DENORM-FASTFMA-NEXT:    v_fma_f32 v2, v2, 2.0, -v31495; SI-DENORM-FASTFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641496; SI-DENORM-FASTFMA-NEXT:    s_endpgm1497;1498; SI-DENORM-SLOWFMA-LABEL: fmuladd_2.0_a_neg_b_f32:1499; SI-DENORM-SLOWFMA:       ; %bb.0:1500; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x91501; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s3, 0xf0001502; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s2, 01503; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v01504; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 01505; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)1506; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc1507; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1508; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc1509; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1510; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v2, v21511; SI-DENORM-SLOWFMA-NEXT:    v_sub_f32_e32 v2, v2, v31512; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641513; SI-DENORM-SLOWFMA-NEXT:    s_endpgm1514;1515; GFX9-FLUSH-MAD-LABEL: fmuladd_2.0_a_neg_b_f32:1516; GFX9-FLUSH-MAD:       ; %bb.0:1517; GFX9-FLUSH-MAD-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241518; GFX9-FLUSH-MAD-NEXT:    v_lshlrev_b32_e32 v0, 2, v01519; GFX9-FLUSH-MAD-NEXT:    s_waitcnt lgkmcnt(0)1520; GFX9-FLUSH-MAD-NEXT:    global_load_dword v1, v0, s[0:1] glc1521; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)1522; GFX9-FLUSH-MAD-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1523; GFX9-FLUSH-MAD-NEXT:    s_waitcnt vmcnt(0)1524; GFX9-FLUSH-MAD-NEXT:    v_mad_f32 v1, v1, 2.0, -v21525; GFX9-FLUSH-MAD-NEXT:    global_store_dword v0, v1, s[0:1]1526; GFX9-FLUSH-MAD-NEXT:    s_endpgm1527;1528; GFX9-DENORM-LABEL: fmuladd_2.0_a_neg_b_f32:1529; GFX9-DENORM:       ; %bb.0:1530; GFX9-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241531; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v01532; GFX9-DENORM-NEXT:    s_waitcnt lgkmcnt(0)1533; GFX9-DENORM-NEXT:    global_load_dword v1, v0, s[0:1] glc1534; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)1535; GFX9-DENORM-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1536; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)1537; GFX9-DENORM-NEXT:    v_fma_f32 v1, v1, 2.0, -v21538; GFX9-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]1539; GFX9-DENORM-NEXT:    s_endpgm1540;1541; GFX9-FLUSH-FMAC-LABEL: fmuladd_2.0_a_neg_b_f32:1542; GFX9-FLUSH-FMAC:       ; %bb.0:1543; GFX9-FLUSH-FMAC-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241544; GFX9-FLUSH-FMAC-NEXT:    v_lshlrev_b32_e32 v0, 2, v01545; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt lgkmcnt(0)1546; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v1, v0, s[0:1] glc1547; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)1548; GFX9-FLUSH-FMAC-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc1549; GFX9-FLUSH-FMAC-NEXT:    s_waitcnt vmcnt(0)1550; GFX9-FLUSH-FMAC-NEXT:    v_fma_f32 v1, v1, 2.0, -v21551; GFX9-FLUSH-FMAC-NEXT:    global_store_dword v0, v1, s[0:1]1552; GFX9-FLUSH-FMAC-NEXT:    s_endpgm1553;1554; GFX10-LABEL: fmuladd_2.0_a_neg_b_f32:1555; GFX10:       ; %bb.0:1556; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x241557; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 2, v01558; GFX10-NEXT:    s_waitcnt lgkmcnt(0)1559; GFX10-NEXT:    global_load_dword v1, v0, s[0:1] glc dlc1560; GFX10-NEXT:    s_waitcnt vmcnt(0)1561; GFX10-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc dlc1562; GFX10-NEXT:    s_waitcnt vmcnt(0)1563; GFX10-NEXT:    v_fma_f32 v1, v1, 2.0, -v21564; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]1565; GFX10-NEXT:    s_endpgm1566  %tid = call i32 @llvm.amdgcn.workitem.id.x()1567  %gep.0 = getelementptr float, ptr addrspace(1) %out, i32 %tid1568  %gep.1 = getelementptr float, ptr addrspace(1) %gep.0, i32 11569  %gep.out = getelementptr float, ptr addrspace(1) %out, i32 %tid1570 1571  %r1 = load volatile float, ptr addrspace(1) %gep.01572  %r2 = load volatile float, ptr addrspace(1) %gep.11573 1574  %r2.fneg = fneg float %r21575 1576  %r3 = tail call float @llvm.fmuladd.f32(float 2.0, float %r1, float %r2.fneg)1577  store float %r3, ptr addrspace(1) %gep.out1578  ret void1579}1580 1581define amdgpu_kernel void @mad_sub_f32(ptr addrspace(1) noalias nocapture %out, ptr addrspace(1) noalias nocapture readonly %ptr) #0 {1582; SI-FLUSH-LABEL: mad_sub_f32:1583; SI-FLUSH:       ; %bb.0:1584; SI-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91585; SI-FLUSH-NEXT:    s_mov_b32 s7, 0xf0001586; SI-FLUSH-NEXT:    s_mov_b32 s6, 01587; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v01588; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 01589; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1590; SI-FLUSH-NEXT:    s_mov_b64 s[4:5], s[2:3]1591; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc1592; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1593; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc1594; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1595; SI-FLUSH-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc1596; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1597; SI-FLUSH-NEXT:    s_mov_b64 s[2:3], s[6:7]1598; SI-FLUSH-NEXT:    v_mad_f32 v2, v2, v3, -v41599; SI-FLUSH-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641600; SI-FLUSH-NEXT:    s_endpgm1601;1602; SI-DENORM-FASTFMA-STRICT-LABEL: mad_sub_f32:1603; SI-DENORM-FASTFMA-STRICT:       ; %bb.0:1604; SI-DENORM-FASTFMA-STRICT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91605; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s7, 0xf0001606; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s6, 01607; SI-DENORM-FASTFMA-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 2, v01608; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mov_b32_e32 v1, 01609; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt lgkmcnt(0)1610; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b64 s[4:5], s[2:3]1611; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc1612; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)1613; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc1614; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)1615; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc1616; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)1617; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b64 s[2:3], s[6:7]1618; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mul_f32_e32 v2, v2, v31619; SI-DENORM-FASTFMA-STRICT-NEXT:    v_sub_f32_e32 v2, v2, v41620; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641621; SI-DENORM-FASTFMA-STRICT-NEXT:    s_endpgm1622;1623; SI-DENORM-SLOWFMA-LABEL: mad_sub_f32:1624; SI-DENORM-SLOWFMA:       ; %bb.0:1625; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91626; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s7, 0xf0001627; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s6, 01628; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v01629; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 01630; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)1631; SI-DENORM-SLOWFMA-NEXT:    s_mov_b64 s[4:5], s[2:3]1632; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc1633; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1634; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc1635; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1636; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc1637; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1638; SI-DENORM-SLOWFMA-NEXT:    s_mov_b64 s[2:3], s[6:7]1639; SI-DENORM-SLOWFMA-NEXT:    v_mul_f32_e32 v2, v2, v31640; SI-DENORM-SLOWFMA-NEXT:    v_sub_f32_e32 v2, v2, v41641; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641642; SI-DENORM-SLOWFMA-NEXT:    s_endpgm1643;1644; SI-DENORM-FASTFMA-CONTRACT-LABEL: mad_sub_f32:1645; SI-DENORM-FASTFMA-CONTRACT:       ; %bb.0:1646; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91647; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s7, 0xf0001648; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s6, 01649; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 2, v01650; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_mov_b32_e32 v1, 01651; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)1652; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b64 s[4:5], s[2:3]1653; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc1654; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)1655; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc1656; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)1657; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc1658; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)1659; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b64 s[2:3], s[6:7]1660; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_fma_f32 v2, v2, v3, -v41661; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641662; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_endpgm1663;1664; GFX9-FLUSH-LABEL: mad_sub_f32:1665; GFX9-FLUSH:       ; %bb.0:1666; GFX9-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241667; GFX9-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v01668; GFX9-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1669; GFX9-FLUSH-NEXT:    global_load_dword v1, v0, s[2:3] glc1670; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)1671; GFX9-FLUSH-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc1672; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)1673; GFX9-FLUSH-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc1674; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)1675; GFX9-FLUSH-NEXT:    v_mad_f32 v1, v1, v2, -v31676; GFX9-FLUSH-NEXT:    global_store_dword v0, v1, s[0:1]1677; GFX9-FLUSH-NEXT:    s_endpgm1678;1679; GFX9-DENORM-LABEL: mad_sub_f32:1680; GFX9-DENORM:       ; %bb.0:1681; GFX9-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241682; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v01683; GFX9-DENORM-NEXT:    s_waitcnt lgkmcnt(0)1684; GFX9-DENORM-NEXT:    global_load_dword v1, v0, s[2:3] glc1685; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)1686; GFX9-DENORM-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc1687; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)1688; GFX9-DENORM-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc1689; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)1690; GFX9-DENORM-NEXT:    v_mul_f32_e32 v1, v1, v21691; GFX9-DENORM-NEXT:    v_sub_f32_e32 v1, v1, v31692; GFX9-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]1693; GFX9-DENORM-NEXT:    s_endpgm1694;1695; GFX10-FLUSH-LABEL: mad_sub_f32:1696; GFX10-FLUSH:       ; %bb.0:1697; GFX10-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241698; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v01699; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1700; GFX10-FLUSH-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc1701; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1702; GFX10-FLUSH-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc dlc1703; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1704; GFX10-FLUSH-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc dlc1705; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1706; GFX10-FLUSH-NEXT:    v_mad_f32 v1, v1, v2, -v31707; GFX10-FLUSH-NEXT:    global_store_dword v0, v1, s[0:1]1708; GFX10-FLUSH-NEXT:    s_endpgm1709;1710; GFX10-DENORM-LABEL: mad_sub_f32:1711; GFX10-DENORM:       ; %bb.0:1712; GFX10-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241713; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v01714; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)1715; GFX10-DENORM-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc1716; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1717; GFX10-DENORM-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc dlc1718; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1719; GFX10-DENORM-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc dlc1720; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1721; GFX10-DENORM-NEXT:    v_mul_f32_e32 v1, v1, v21722; GFX10-DENORM-NEXT:    v_sub_f32_e32 v1, v1, v31723; GFX10-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]1724; GFX10-DENORM-NEXT:    s_endpgm1725  %tid = tail call i32 @llvm.amdgcn.workitem.id.x() #01726  %tid.ext = sext i32 %tid to i641727  %gep0 = getelementptr float, ptr addrspace(1) %ptr, i64 %tid.ext1728  %add1 = add i64 %tid.ext, 11729  %gep1 = getelementptr float, ptr addrspace(1) %ptr, i64 %add11730  %add2 = add i64 %tid.ext, 21731  %gep2 = getelementptr float, ptr addrspace(1) %ptr, i64 %add21732  %outgep = getelementptr float, ptr addrspace(1) %out, i64 %tid.ext1733  %a = load volatile float, ptr addrspace(1) %gep0, align 41734  %b = load volatile float, ptr addrspace(1) %gep1, align 41735  %c = load volatile float, ptr addrspace(1) %gep2, align 41736  %mul = fmul float %a, %b1737  %sub = fsub float %mul, %c1738  store float %sub, ptr addrspace(1) %outgep, align 41739  ret void1740}1741 1742define amdgpu_kernel void @mad_sub_inv_f32(ptr addrspace(1) noalias nocapture %out, ptr addrspace(1) noalias nocapture readonly %ptr) #0 {1743; SI-FLUSH-LABEL: mad_sub_inv_f32:1744; SI-FLUSH:       ; %bb.0:1745; SI-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91746; SI-FLUSH-NEXT:    s_mov_b32 s7, 0xf0001747; SI-FLUSH-NEXT:    s_mov_b32 s6, 01748; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v01749; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 01750; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1751; SI-FLUSH-NEXT:    s_mov_b64 s[4:5], s[2:3]1752; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc1753; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1754; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc1755; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1756; SI-FLUSH-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc1757; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1758; SI-FLUSH-NEXT:    s_mov_b64 s[2:3], s[6:7]1759; SI-FLUSH-NEXT:    v_mad_f32 v2, -v2, v3, v41760; SI-FLUSH-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641761; SI-FLUSH-NEXT:    s_endpgm1762;1763; SI-DENORM-FASTFMA-STRICT-LABEL: mad_sub_inv_f32:1764; SI-DENORM-FASTFMA-STRICT:       ; %bb.0:1765; SI-DENORM-FASTFMA-STRICT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91766; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s7, 0xf0001767; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s6, 01768; SI-DENORM-FASTFMA-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 2, v01769; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mov_b32_e32 v1, 01770; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt lgkmcnt(0)1771; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b64 s[4:5], s[2:3]1772; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc1773; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)1774; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc1775; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)1776; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc1777; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)1778; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b64 s[2:3], s[6:7]1779; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mul_f32_e32 v2, v2, v31780; SI-DENORM-FASTFMA-STRICT-NEXT:    v_sub_f32_e32 v2, v4, v21781; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641782; SI-DENORM-FASTFMA-STRICT-NEXT:    s_endpgm1783;1784; SI-DENORM-SLOWFMA-LABEL: mad_sub_inv_f32:1785; SI-DENORM-SLOWFMA:       ; %bb.0:1786; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91787; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s7, 0xf0001788; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s6, 01789; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v01790; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 01791; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)1792; SI-DENORM-SLOWFMA-NEXT:    s_mov_b64 s[4:5], s[2:3]1793; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc1794; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1795; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc1796; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1797; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc1798; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1799; SI-DENORM-SLOWFMA-NEXT:    s_mov_b64 s[2:3], s[6:7]1800; SI-DENORM-SLOWFMA-NEXT:    v_mul_f32_e32 v2, v2, v31801; SI-DENORM-SLOWFMA-NEXT:    v_sub_f32_e32 v2, v4, v21802; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641803; SI-DENORM-SLOWFMA-NEXT:    s_endpgm1804;1805; SI-DENORM-FASTFMA-CONTRACT-LABEL: mad_sub_inv_f32:1806; SI-DENORM-FASTFMA-CONTRACT:       ; %bb.0:1807; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91808; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s7, 0xf0001809; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s6, 01810; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 2, v01811; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_mov_b32_e32 v1, 01812; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)1813; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b64 s[4:5], s[2:3]1814; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc1815; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)1816; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc1817; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)1818; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc1819; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)1820; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b64 s[2:3], s[6:7]1821; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_fma_f32 v2, -v2, v3, v41822; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641823; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_endpgm1824;1825; GFX9-FLUSH-LABEL: mad_sub_inv_f32:1826; GFX9-FLUSH:       ; %bb.0:1827; GFX9-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241828; GFX9-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v01829; GFX9-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1830; GFX9-FLUSH-NEXT:    global_load_dword v1, v0, s[2:3] glc1831; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)1832; GFX9-FLUSH-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc1833; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)1834; GFX9-FLUSH-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc1835; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)1836; GFX9-FLUSH-NEXT:    v_mad_f32 v1, -v1, v2, v31837; GFX9-FLUSH-NEXT:    global_store_dword v0, v1, s[0:1]1838; GFX9-FLUSH-NEXT:    s_endpgm1839;1840; GFX9-DENORM-LABEL: mad_sub_inv_f32:1841; GFX9-DENORM:       ; %bb.0:1842; GFX9-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241843; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v01844; GFX9-DENORM-NEXT:    s_waitcnt lgkmcnt(0)1845; GFX9-DENORM-NEXT:    global_load_dword v1, v0, s[2:3] glc1846; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)1847; GFX9-DENORM-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc1848; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)1849; GFX9-DENORM-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc1850; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)1851; GFX9-DENORM-NEXT:    v_mul_f32_e32 v1, v1, v21852; GFX9-DENORM-NEXT:    v_sub_f32_e32 v1, v3, v11853; GFX9-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]1854; GFX9-DENORM-NEXT:    s_endpgm1855;1856; GFX10-FLUSH-LABEL: mad_sub_inv_f32:1857; GFX10-FLUSH:       ; %bb.0:1858; GFX10-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241859; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v01860; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1861; GFX10-FLUSH-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc1862; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1863; GFX10-FLUSH-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc dlc1864; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1865; GFX10-FLUSH-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc dlc1866; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)1867; GFX10-FLUSH-NEXT:    v_mad_f32 v1, -v1, v2, v31868; GFX10-FLUSH-NEXT:    global_store_dword v0, v1, s[0:1]1869; GFX10-FLUSH-NEXT:    s_endpgm1870;1871; GFX10-DENORM-LABEL: mad_sub_inv_f32:1872; GFX10-DENORM:       ; %bb.0:1873; GFX10-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241874; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v01875; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)1876; GFX10-DENORM-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc1877; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1878; GFX10-DENORM-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc dlc1879; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1880; GFX10-DENORM-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc dlc1881; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)1882; GFX10-DENORM-NEXT:    v_mul_f32_e32 v1, v1, v21883; GFX10-DENORM-NEXT:    v_sub_f32_e32 v1, v3, v11884; GFX10-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]1885; GFX10-DENORM-NEXT:    s_endpgm1886  %tid = tail call i32 @llvm.amdgcn.workitem.id.x() #01887  %tid.ext = sext i32 %tid to i641888  %gep0 = getelementptr float, ptr addrspace(1) %ptr, i64 %tid.ext1889  %add1 = add i64 %tid.ext, 11890  %gep1 = getelementptr float, ptr addrspace(1) %ptr, i64 %add11891  %add2 = add i64 %tid.ext, 21892  %gep2 = getelementptr float, ptr addrspace(1) %ptr, i64 %add21893  %outgep = getelementptr float, ptr addrspace(1) %out, i64 %tid.ext1894  %a = load volatile float, ptr addrspace(1) %gep0, align 41895  %b = load volatile float, ptr addrspace(1) %gep1, align 41896  %c = load volatile float, ptr addrspace(1) %gep2, align 41897  %mul = fmul float %a, %b1898  %sub = fsub float %c, %mul1899  store float %sub, ptr addrspace(1) %outgep, align 41900  ret void1901}1902 1903define amdgpu_kernel void @mad_sub_fabs_f32(ptr addrspace(1) noalias nocapture %out, ptr addrspace(1) noalias nocapture readonly %ptr) #0 {1904; SI-FLUSH-LABEL: mad_sub_fabs_f32:1905; SI-FLUSH:       ; %bb.0:1906; SI-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91907; SI-FLUSH-NEXT:    s_mov_b32 s7, 0xf0001908; SI-FLUSH-NEXT:    s_mov_b32 s6, 01909; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v01910; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 01911; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1912; SI-FLUSH-NEXT:    s_mov_b64 s[4:5], s[2:3]1913; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc1914; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1915; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc1916; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1917; SI-FLUSH-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc1918; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)1919; SI-FLUSH-NEXT:    s_mov_b64 s[2:3], s[6:7]1920; SI-FLUSH-NEXT:    v_mad_f32 v2, v2, v3, -|v4|1921; SI-FLUSH-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641922; SI-FLUSH-NEXT:    s_endpgm1923;1924; SI-DENORM-FASTFMA-STRICT-LABEL: mad_sub_fabs_f32:1925; SI-DENORM-FASTFMA-STRICT:       ; %bb.0:1926; SI-DENORM-FASTFMA-STRICT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91927; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s7, 0xf0001928; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s6, 01929; SI-DENORM-FASTFMA-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 2, v01930; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mov_b32_e32 v1, 01931; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt lgkmcnt(0)1932; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b64 s[4:5], s[2:3]1933; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc1934; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)1935; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc1936; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)1937; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc1938; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)1939; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b64 s[2:3], s[6:7]1940; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mul_f32_e32 v2, v2, v31941; SI-DENORM-FASTFMA-STRICT-NEXT:    v_sub_f32_e64 v2, v2, |v4|1942; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641943; SI-DENORM-FASTFMA-STRICT-NEXT:    s_endpgm1944;1945; SI-DENORM-SLOWFMA-LABEL: mad_sub_fabs_f32:1946; SI-DENORM-SLOWFMA:       ; %bb.0:1947; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91948; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s7, 0xf0001949; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s6, 01950; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v01951; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 01952; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)1953; SI-DENORM-SLOWFMA-NEXT:    s_mov_b64 s[4:5], s[2:3]1954; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc1955; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1956; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc1957; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1958; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc1959; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)1960; SI-DENORM-SLOWFMA-NEXT:    s_mov_b64 s[2:3], s[6:7]1961; SI-DENORM-SLOWFMA-NEXT:    v_mul_f32_e32 v2, v2, v31962; SI-DENORM-SLOWFMA-NEXT:    v_sub_f32_e64 v2, v2, |v4|1963; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641964; SI-DENORM-SLOWFMA-NEXT:    s_endpgm1965;1966; SI-DENORM-FASTFMA-CONTRACT-LABEL: mad_sub_fabs_f32:1967; SI-DENORM-FASTFMA-CONTRACT:       ; %bb.0:1968; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x91969; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s7, 0xf0001970; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s6, 01971; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 2, v01972; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_mov_b32_e32 v1, 01973; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)1974; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b64 s[4:5], s[2:3]1975; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc1976; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)1977; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc1978; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)1979; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc1980; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)1981; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b64 s[2:3], s[6:7]1982; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_fma_f32 v2, v2, v3, -|v4|1983; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr641984; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_endpgm1985;1986; GFX9-FLUSH-LABEL: mad_sub_fabs_f32:1987; GFX9-FLUSH:       ; %bb.0:1988; GFX9-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241989; GFX9-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v01990; GFX9-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)1991; GFX9-FLUSH-NEXT:    global_load_dword v1, v0, s[2:3] glc1992; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)1993; GFX9-FLUSH-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc1994; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)1995; GFX9-FLUSH-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc1996; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)1997; GFX9-FLUSH-NEXT:    v_mad_f32 v1, v1, v2, -|v3|1998; GFX9-FLUSH-NEXT:    global_store_dword v0, v1, s[0:1]1999; GFX9-FLUSH-NEXT:    s_endpgm2000;2001; GFX9-DENORM-LABEL: mad_sub_fabs_f32:2002; GFX9-DENORM:       ; %bb.0:2003; GFX9-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242004; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v02005; GFX9-DENORM-NEXT:    s_waitcnt lgkmcnt(0)2006; GFX9-DENORM-NEXT:    global_load_dword v1, v0, s[2:3] glc2007; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2008; GFX9-DENORM-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc2009; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2010; GFX9-DENORM-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc2011; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2012; GFX9-DENORM-NEXT:    v_mul_f32_e32 v1, v1, v22013; GFX9-DENORM-NEXT:    v_sub_f32_e64 v1, v1, |v3|2014; GFX9-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]2015; GFX9-DENORM-NEXT:    s_endpgm2016;2017; GFX10-FLUSH-LABEL: mad_sub_fabs_f32:2018; GFX10-FLUSH:       ; %bb.0:2019; GFX10-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242020; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02021; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2022; GFX10-FLUSH-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc2023; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2024; GFX10-FLUSH-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc dlc2025; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2026; GFX10-FLUSH-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc dlc2027; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2028; GFX10-FLUSH-NEXT:    v_mad_f32 v1, v1, v2, -|v3|2029; GFX10-FLUSH-NEXT:    global_store_dword v0, v1, s[0:1]2030; GFX10-FLUSH-NEXT:    s_endpgm2031;2032; GFX10-DENORM-LABEL: mad_sub_fabs_f32:2033; GFX10-DENORM:       ; %bb.0:2034; GFX10-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242035; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v02036; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)2037; GFX10-DENORM-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc2038; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2039; GFX10-DENORM-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc dlc2040; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2041; GFX10-DENORM-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc dlc2042; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2043; GFX10-DENORM-NEXT:    v_mul_f32_e32 v1, v1, v22044; GFX10-DENORM-NEXT:    v_sub_f32_e64 v1, v1, |v3|2045; GFX10-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]2046; GFX10-DENORM-NEXT:    s_endpgm2047  %tid = tail call i32 @llvm.amdgcn.workitem.id.x() #02048  %tid.ext = sext i32 %tid to i642049  %gep0 = getelementptr float, ptr addrspace(1) %ptr, i64 %tid.ext2050  %add1 = add i64 %tid.ext, 12051  %gep1 = getelementptr float, ptr addrspace(1) %ptr, i64 %add12052  %add2 = add i64 %tid.ext, 22053  %gep2 = getelementptr float, ptr addrspace(1) %ptr, i64 %add22054  %outgep = getelementptr float, ptr addrspace(1) %out, i64 %tid.ext2055  %a = load volatile float, ptr addrspace(1) %gep0, align 42056  %b = load volatile float, ptr addrspace(1) %gep1, align 42057  %c = load volatile float, ptr addrspace(1) %gep2, align 42058  %c.abs = call float @llvm.fabs.f32(float %c) #02059  %mul = fmul float %a, %b2060  %sub = fsub float %mul, %c.abs2061  store float %sub, ptr addrspace(1) %outgep, align 42062  ret void2063}2064 2065define amdgpu_kernel void @mad_sub_fabs_inv_f32(ptr addrspace(1) noalias nocapture %out, ptr addrspace(1) noalias nocapture readonly %ptr) #0 {2066; SI-FLUSH-LABEL: mad_sub_fabs_inv_f32:2067; SI-FLUSH:       ; %bb.0:2068; SI-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92069; SI-FLUSH-NEXT:    s_mov_b32 s7, 0xf0002070; SI-FLUSH-NEXT:    s_mov_b32 s6, 02071; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02072; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 02073; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2074; SI-FLUSH-NEXT:    s_mov_b64 s[4:5], s[2:3]2075; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc2076; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2077; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc2078; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2079; SI-FLUSH-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc2080; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2081; SI-FLUSH-NEXT:    s_mov_b64 s[2:3], s[6:7]2082; SI-FLUSH-NEXT:    v_mad_f32 v2, -v2, v3, |v4|2083; SI-FLUSH-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642084; SI-FLUSH-NEXT:    s_endpgm2085;2086; SI-DENORM-FASTFMA-STRICT-LABEL: mad_sub_fabs_inv_f32:2087; SI-DENORM-FASTFMA-STRICT:       ; %bb.0:2088; SI-DENORM-FASTFMA-STRICT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92089; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s7, 0xf0002090; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s6, 02091; SI-DENORM-FASTFMA-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 2, v02092; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mov_b32_e32 v1, 02093; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt lgkmcnt(0)2094; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b64 s[4:5], s[2:3]2095; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc2096; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)2097; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc2098; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)2099; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc2100; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)2101; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b64 s[2:3], s[6:7]2102; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mul_f32_e32 v2, v2, v32103; SI-DENORM-FASTFMA-STRICT-NEXT:    v_sub_f32_e64 v2, |v4|, v22104; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642105; SI-DENORM-FASTFMA-STRICT-NEXT:    s_endpgm2106;2107; SI-DENORM-SLOWFMA-LABEL: mad_sub_fabs_inv_f32:2108; SI-DENORM-SLOWFMA:       ; %bb.0:2109; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92110; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s7, 0xf0002111; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s6, 02112; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v02113; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 02114; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)2115; SI-DENORM-SLOWFMA-NEXT:    s_mov_b64 s[4:5], s[2:3]2116; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc2117; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)2118; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc2119; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)2120; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc2121; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)2122; SI-DENORM-SLOWFMA-NEXT:    s_mov_b64 s[2:3], s[6:7]2123; SI-DENORM-SLOWFMA-NEXT:    v_mul_f32_e32 v2, v2, v32124; SI-DENORM-SLOWFMA-NEXT:    v_sub_f32_e64 v2, |v4|, v22125; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642126; SI-DENORM-SLOWFMA-NEXT:    s_endpgm2127;2128; SI-DENORM-FASTFMA-CONTRACT-LABEL: mad_sub_fabs_inv_f32:2129; SI-DENORM-FASTFMA-CONTRACT:       ; %bb.0:2130; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92131; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s7, 0xf0002132; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s6, 02133; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 2, v02134; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_mov_b32_e32 v1, 02135; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)2136; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b64 s[4:5], s[2:3]2137; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc2138; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2139; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc2140; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2141; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc2142; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2143; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b64 s[2:3], s[6:7]2144; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_fma_f32 v2, -v2, v3, |v4|2145; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642146; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_endpgm2147;2148; GFX9-FLUSH-LABEL: mad_sub_fabs_inv_f32:2149; GFX9-FLUSH:       ; %bb.0:2150; GFX9-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242151; GFX9-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02152; GFX9-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2153; GFX9-FLUSH-NEXT:    global_load_dword v1, v0, s[2:3] glc2154; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)2155; GFX9-FLUSH-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc2156; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)2157; GFX9-FLUSH-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc2158; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)2159; GFX9-FLUSH-NEXT:    v_mad_f32 v1, -v1, v2, |v3|2160; GFX9-FLUSH-NEXT:    global_store_dword v0, v1, s[0:1]2161; GFX9-FLUSH-NEXT:    s_endpgm2162;2163; GFX9-DENORM-LABEL: mad_sub_fabs_inv_f32:2164; GFX9-DENORM:       ; %bb.0:2165; GFX9-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242166; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v02167; GFX9-DENORM-NEXT:    s_waitcnt lgkmcnt(0)2168; GFX9-DENORM-NEXT:    global_load_dword v1, v0, s[2:3] glc2169; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2170; GFX9-DENORM-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc2171; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2172; GFX9-DENORM-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc2173; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2174; GFX9-DENORM-NEXT:    v_mul_f32_e32 v1, v1, v22175; GFX9-DENORM-NEXT:    v_sub_f32_e64 v1, |v3|, v12176; GFX9-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]2177; GFX9-DENORM-NEXT:    s_endpgm2178;2179; GFX10-FLUSH-LABEL: mad_sub_fabs_inv_f32:2180; GFX10-FLUSH:       ; %bb.0:2181; GFX10-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242182; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02183; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2184; GFX10-FLUSH-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc2185; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2186; GFX10-FLUSH-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc dlc2187; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2188; GFX10-FLUSH-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc dlc2189; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2190; GFX10-FLUSH-NEXT:    v_mad_f32 v1, -v1, v2, |v3|2191; GFX10-FLUSH-NEXT:    global_store_dword v0, v1, s[0:1]2192; GFX10-FLUSH-NEXT:    s_endpgm2193;2194; GFX10-DENORM-LABEL: mad_sub_fabs_inv_f32:2195; GFX10-DENORM:       ; %bb.0:2196; GFX10-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242197; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v02198; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)2199; GFX10-DENORM-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc2200; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2201; GFX10-DENORM-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc dlc2202; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2203; GFX10-DENORM-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc dlc2204; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2205; GFX10-DENORM-NEXT:    v_mul_f32_e32 v1, v1, v22206; GFX10-DENORM-NEXT:    v_sub_f32_e64 v1, |v3|, v12207; GFX10-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]2208; GFX10-DENORM-NEXT:    s_endpgm2209  %tid = tail call i32 @llvm.amdgcn.workitem.id.x() #02210  %tid.ext = sext i32 %tid to i642211  %gep0 = getelementptr float, ptr addrspace(1) %ptr, i64 %tid.ext2212  %add1 = add i64 %tid.ext, 12213  %gep1 = getelementptr float, ptr addrspace(1) %ptr, i64 %add12214  %add2 = add i64 %tid.ext, 22215  %gep2 = getelementptr float, ptr addrspace(1) %ptr, i64 %add22216  %outgep = getelementptr float, ptr addrspace(1) %out, i64 %tid.ext2217  %a = load volatile float, ptr addrspace(1) %gep0, align 42218  %b = load volatile float, ptr addrspace(1) %gep1, align 42219  %c = load volatile float, ptr addrspace(1) %gep2, align 42220  %c.abs = call float @llvm.fabs.f32(float %c) #02221  %mul = fmul float %a, %b2222  %sub = fsub float %c.abs, %mul2223  store float %sub, ptr addrspace(1) %outgep, align 42224  ret void2225}2226 2227define amdgpu_kernel void @neg_neg_mad_f32(ptr addrspace(1) noalias nocapture %out, ptr addrspace(1) noalias nocapture readonly %ptr) #0 {2228; SI-FLUSH-LABEL: neg_neg_mad_f32:2229; SI-FLUSH:       ; %bb.0:2230; SI-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92231; SI-FLUSH-NEXT:    s_mov_b32 s7, 0xf0002232; SI-FLUSH-NEXT:    s_mov_b32 s6, 02233; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02234; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 02235; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2236; SI-FLUSH-NEXT:    s_mov_b64 s[4:5], s[2:3]2237; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc2238; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2239; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc2240; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2241; SI-FLUSH-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc2242; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2243; SI-FLUSH-NEXT:    s_mov_b64 s[2:3], s[6:7]2244; SI-FLUSH-NEXT:    v_mac_f32_e32 v4, v2, v32245; SI-FLUSH-NEXT:    buffer_store_dword v4, v[0:1], s[0:3], 0 addr642246; SI-FLUSH-NEXT:    s_endpgm2247;2248; SI-DENORM-FASTFMA-STRICT-LABEL: neg_neg_mad_f32:2249; SI-DENORM-FASTFMA-STRICT:       ; %bb.0:2250; SI-DENORM-FASTFMA-STRICT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92251; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s7, 0xf0002252; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s6, 02253; SI-DENORM-FASTFMA-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 2, v02254; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mov_b32_e32 v1, 02255; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt lgkmcnt(0)2256; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b64 s[4:5], s[2:3]2257; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc2258; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)2259; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc2260; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)2261; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc2262; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)2263; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b64 s[2:3], s[6:7]2264; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mul_f32_e32 v2, v2, v32265; SI-DENORM-FASTFMA-STRICT-NEXT:    v_add_f32_e32 v2, v4, v22266; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642267; SI-DENORM-FASTFMA-STRICT-NEXT:    s_endpgm2268;2269; SI-DENORM-SLOWFMA-LABEL: neg_neg_mad_f32:2270; SI-DENORM-SLOWFMA:       ; %bb.0:2271; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92272; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s7, 0xf0002273; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s6, 02274; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v02275; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 02276; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)2277; SI-DENORM-SLOWFMA-NEXT:    s_mov_b64 s[4:5], s[2:3]2278; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc2279; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)2280; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc2281; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)2282; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc2283; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)2284; SI-DENORM-SLOWFMA-NEXT:    s_mov_b64 s[2:3], s[6:7]2285; SI-DENORM-SLOWFMA-NEXT:    v_mul_f32_e32 v2, v2, v32286; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v4, v22287; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642288; SI-DENORM-SLOWFMA-NEXT:    s_endpgm2289;2290; SI-DENORM-FASTFMA-CONTRACT-LABEL: neg_neg_mad_f32:2291; SI-DENORM-FASTFMA-CONTRACT:       ; %bb.0:2292; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92293; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s7, 0xf0002294; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s6, 02295; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 2, v02296; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_mov_b32_e32 v1, 02297; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)2298; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b64 s[4:5], s[2:3]2299; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc2300; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2301; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc2302; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2303; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc2304; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2305; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b64 s[2:3], s[6:7]2306; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_fma_f32 v2, v2, v3, v42307; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642308; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_endpgm2309;2310; GFX9-FLUSH-LABEL: neg_neg_mad_f32:2311; GFX9-FLUSH:       ; %bb.0:2312; GFX9-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242313; GFX9-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02314; GFX9-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2315; GFX9-FLUSH-NEXT:    global_load_dword v1, v0, s[2:3] glc2316; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)2317; GFX9-FLUSH-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc2318; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)2319; GFX9-FLUSH-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc2320; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)2321; GFX9-FLUSH-NEXT:    v_mac_f32_e32 v3, v1, v22322; GFX9-FLUSH-NEXT:    global_store_dword v0, v3, s[0:1]2323; GFX9-FLUSH-NEXT:    s_endpgm2324;2325; GFX9-DENORM-LABEL: neg_neg_mad_f32:2326; GFX9-DENORM:       ; %bb.0:2327; GFX9-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242328; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v02329; GFX9-DENORM-NEXT:    s_waitcnt lgkmcnt(0)2330; GFX9-DENORM-NEXT:    global_load_dword v1, v0, s[2:3] glc2331; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2332; GFX9-DENORM-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc2333; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2334; GFX9-DENORM-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc2335; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2336; GFX9-DENORM-NEXT:    v_mul_f32_e32 v1, v1, v22337; GFX9-DENORM-NEXT:    v_add_f32_e32 v1, v3, v12338; GFX9-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]2339; GFX9-DENORM-NEXT:    s_endpgm2340;2341; GFX10-FLUSH-LABEL: neg_neg_mad_f32:2342; GFX10-FLUSH:       ; %bb.0:2343; GFX10-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242344; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02345; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2346; GFX10-FLUSH-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc2347; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2348; GFX10-FLUSH-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc dlc2349; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2350; GFX10-FLUSH-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc dlc2351; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2352; GFX10-FLUSH-NEXT:    v_mac_f32_e32 v3, v1, v22353; GFX10-FLUSH-NEXT:    global_store_dword v0, v3, s[0:1]2354; GFX10-FLUSH-NEXT:    s_endpgm2355;2356; GFX10-DENORM-LABEL: neg_neg_mad_f32:2357; GFX10-DENORM:       ; %bb.0:2358; GFX10-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242359; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v02360; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)2361; GFX10-DENORM-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc2362; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2363; GFX10-DENORM-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc dlc2364; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2365; GFX10-DENORM-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc dlc2366; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2367; GFX10-DENORM-NEXT:    v_mul_f32_e32 v1, v1, v22368; GFX10-DENORM-NEXT:    v_add_f32_e32 v1, v3, v12369; GFX10-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]2370; GFX10-DENORM-NEXT:    s_endpgm2371  %tid = tail call i32 @llvm.amdgcn.workitem.id.x() #02372  %tid.ext = sext i32 %tid to i642373  %gep0 = getelementptr float, ptr addrspace(1) %ptr, i64 %tid.ext2374  %add1 = add i64 %tid.ext, 12375  %gep1 = getelementptr float, ptr addrspace(1) %ptr, i64 %add12376  %add2 = add i64 %tid.ext, 22377  %gep2 = getelementptr float, ptr addrspace(1) %ptr, i64 %add22378  %outgep = getelementptr float, ptr addrspace(1) %out, i64 %tid.ext2379  %a = load volatile float, ptr addrspace(1) %gep0, align 42380  %b = load volatile float, ptr addrspace(1) %gep1, align 42381  %c = load volatile float, ptr addrspace(1) %gep2, align 42382  %nega = fneg float %a2383  %negb = fneg float %b2384  %mul = fmul float %nega, %negb2385  %sub = fadd float %mul, %c2386  store float %sub, ptr addrspace(1) %outgep, align 42387  ret void2388}2389 2390define amdgpu_kernel void @mad_fabs_sub_f32(ptr addrspace(1) noalias nocapture %out, ptr addrspace(1) noalias nocapture readonly %ptr) #0 {2391; SI-FLUSH-LABEL: mad_fabs_sub_f32:2392; SI-FLUSH:       ; %bb.0:2393; SI-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92394; SI-FLUSH-NEXT:    s_mov_b32 s7, 0xf0002395; SI-FLUSH-NEXT:    s_mov_b32 s6, 02396; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02397; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 02398; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2399; SI-FLUSH-NEXT:    s_mov_b64 s[4:5], s[2:3]2400; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc2401; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2402; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc2403; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2404; SI-FLUSH-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc2405; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2406; SI-FLUSH-NEXT:    s_mov_b64 s[2:3], s[6:7]2407; SI-FLUSH-NEXT:    v_mad_f32 v2, v2, |v3|, -v42408; SI-FLUSH-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642409; SI-FLUSH-NEXT:    s_endpgm2410;2411; SI-DENORM-FASTFMA-STRICT-LABEL: mad_fabs_sub_f32:2412; SI-DENORM-FASTFMA-STRICT:       ; %bb.0:2413; SI-DENORM-FASTFMA-STRICT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92414; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s7, 0xf0002415; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s6, 02416; SI-DENORM-FASTFMA-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 2, v02417; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mov_b32_e32 v1, 02418; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt lgkmcnt(0)2419; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b64 s[4:5], s[2:3]2420; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc2421; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)2422; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc2423; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)2424; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc2425; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)2426; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b64 s[2:3], s[6:7]2427; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mul_f32_e64 v2, v2, |v3|2428; SI-DENORM-FASTFMA-STRICT-NEXT:    v_sub_f32_e32 v2, v2, v42429; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642430; SI-DENORM-FASTFMA-STRICT-NEXT:    s_endpgm2431;2432; SI-DENORM-SLOWFMA-LABEL: mad_fabs_sub_f32:2433; SI-DENORM-SLOWFMA:       ; %bb.0:2434; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92435; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s7, 0xf0002436; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s6, 02437; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v02438; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 02439; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)2440; SI-DENORM-SLOWFMA-NEXT:    s_mov_b64 s[4:5], s[2:3]2441; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc2442; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)2443; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc2444; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)2445; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc2446; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)2447; SI-DENORM-SLOWFMA-NEXT:    s_mov_b64 s[2:3], s[6:7]2448; SI-DENORM-SLOWFMA-NEXT:    v_mul_f32_e64 v2, v2, |v3|2449; SI-DENORM-SLOWFMA-NEXT:    v_sub_f32_e32 v2, v2, v42450; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642451; SI-DENORM-SLOWFMA-NEXT:    s_endpgm2452;2453; SI-DENORM-FASTFMA-CONTRACT-LABEL: mad_fabs_sub_f32:2454; SI-DENORM-FASTFMA-CONTRACT:       ; %bb.0:2455; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x92456; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s7, 0xf0002457; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s6, 02458; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 2, v02459; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_mov_b32_e32 v1, 02460; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)2461; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b64 s[4:5], s[2:3]2462; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc2463; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2464; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc2465; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2466; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc2467; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2468; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b64 s[2:3], s[6:7]2469; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_fma_f32 v2, v2, |v3|, -v42470; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642471; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_endpgm2472;2473; GFX9-FLUSH-LABEL: mad_fabs_sub_f32:2474; GFX9-FLUSH:       ; %bb.0:2475; GFX9-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242476; GFX9-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02477; GFX9-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2478; GFX9-FLUSH-NEXT:    global_load_dword v1, v0, s[2:3] glc2479; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)2480; GFX9-FLUSH-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc2481; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)2482; GFX9-FLUSH-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc2483; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)2484; GFX9-FLUSH-NEXT:    v_mad_f32 v1, v1, |v2|, -v32485; GFX9-FLUSH-NEXT:    global_store_dword v0, v1, s[0:1]2486; GFX9-FLUSH-NEXT:    s_endpgm2487;2488; GFX9-DENORM-LABEL: mad_fabs_sub_f32:2489; GFX9-DENORM:       ; %bb.0:2490; GFX9-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242491; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v02492; GFX9-DENORM-NEXT:    s_waitcnt lgkmcnt(0)2493; GFX9-DENORM-NEXT:    global_load_dword v1, v0, s[2:3] glc2494; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2495; GFX9-DENORM-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc2496; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2497; GFX9-DENORM-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc2498; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2499; GFX9-DENORM-NEXT:    v_mul_f32_e64 v1, v1, |v2|2500; GFX9-DENORM-NEXT:    v_sub_f32_e32 v1, v1, v32501; GFX9-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]2502; GFX9-DENORM-NEXT:    s_endpgm2503;2504; GFX10-FLUSH-LABEL: mad_fabs_sub_f32:2505; GFX10-FLUSH:       ; %bb.0:2506; GFX10-FLUSH-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242507; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02508; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2509; GFX10-FLUSH-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc2510; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2511; GFX10-FLUSH-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc dlc2512; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2513; GFX10-FLUSH-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc dlc2514; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2515; GFX10-FLUSH-NEXT:    v_mad_f32 v1, v1, |v2|, -v32516; GFX10-FLUSH-NEXT:    global_store_dword v0, v1, s[0:1]2517; GFX10-FLUSH-NEXT:    s_endpgm2518;2519; GFX10-DENORM-LABEL: mad_fabs_sub_f32:2520; GFX10-DENORM:       ; %bb.0:2521; GFX10-DENORM-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x242522; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v02523; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)2524; GFX10-DENORM-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc2525; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2526; GFX10-DENORM-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc dlc2527; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2528; GFX10-DENORM-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc dlc2529; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2530; GFX10-DENORM-NEXT:    v_mul_f32_e64 v1, v1, |v2|2531; GFX10-DENORM-NEXT:    v_sub_f32_e32 v1, v1, v32532; GFX10-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]2533; GFX10-DENORM-NEXT:    s_endpgm2534  %tid = tail call i32 @llvm.amdgcn.workitem.id.x() #02535  %tid.ext = sext i32 %tid to i642536  %gep0 = getelementptr float, ptr addrspace(1) %ptr, i64 %tid.ext2537  %add1 = add i64 %tid.ext, 12538  %gep1 = getelementptr float, ptr addrspace(1) %ptr, i64 %add12539  %add2 = add i64 %tid.ext, 22540  %gep2 = getelementptr float, ptr addrspace(1) %ptr, i64 %add22541  %outgep = getelementptr float, ptr addrspace(1) %out, i64 %tid.ext2542  %a = load volatile float, ptr addrspace(1) %gep0, align 42543  %b = load volatile float, ptr addrspace(1) %gep1, align 42544  %c = load volatile float, ptr addrspace(1) %gep2, align 42545  %b.abs = call float @llvm.fabs.f32(float %b) #02546  %mul = fmul float %a, %b.abs2547  %sub = fsub float %mul, %c2548  store float %sub, ptr addrspace(1) %outgep, align 42549  ret void2550}2551 2552define amdgpu_kernel void @fsub_c_fadd_a_a_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2553; SI-FLUSH-LABEL: fsub_c_fadd_a_a_f32:2554; SI-FLUSH:       ; %bb.0:2555; SI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x92556; SI-FLUSH-NEXT:    s_mov_b32 s3, 0xf0002557; SI-FLUSH-NEXT:    s_mov_b32 s2, 02558; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02559; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 02560; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2561; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc2562; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2563; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc2564; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2565; SI-FLUSH-NEXT:    v_mac_f32_e32 v3, -2.0, v22566; SI-FLUSH-NEXT:    buffer_store_dword v3, v[0:1], s[0:3], 0 addr642567; SI-FLUSH-NEXT:    s_endpgm2568;2569; SI-DENORM-FASTFMA-STRICT-LABEL: fsub_c_fadd_a_a_f32:2570; SI-DENORM-FASTFMA-STRICT:       ; %bb.0:2571; SI-DENORM-FASTFMA-STRICT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x92572; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s3, 0xf0002573; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s2, 02574; SI-DENORM-FASTFMA-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 2, v02575; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mov_b32_e32 v1, 02576; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt lgkmcnt(0)2577; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc2578; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)2579; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc2580; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)2581; SI-DENORM-FASTFMA-STRICT-NEXT:    v_add_f32_e32 v2, v2, v22582; SI-DENORM-FASTFMA-STRICT-NEXT:    v_sub_f32_e32 v2, v3, v22583; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642584; SI-DENORM-FASTFMA-STRICT-NEXT:    s_endpgm2585;2586; SI-DENORM-SLOWFMA-LABEL: fsub_c_fadd_a_a_f32:2587; SI-DENORM-SLOWFMA:       ; %bb.0:2588; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x92589; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s3, 0xf0002590; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s2, 02591; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v02592; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 02593; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)2594; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc2595; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)2596; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc2597; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)2598; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v2, v22599; SI-DENORM-SLOWFMA-NEXT:    v_sub_f32_e32 v2, v3, v22600; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642601; SI-DENORM-SLOWFMA-NEXT:    s_endpgm2602;2603; SI-DENORM-FASTFMA-CONTRACT-LABEL: fsub_c_fadd_a_a_f32:2604; SI-DENORM-FASTFMA-CONTRACT:       ; %bb.0:2605; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x92606; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s3, 0xf0002607; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s2, 02608; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 2, v02609; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_mov_b32_e32 v1, 02610; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)2611; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc2612; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2613; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc2614; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2615; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_fma_f32 v2, v2, -2.0, v32616; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642617; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_endpgm2618;2619; GFX9-FLUSH-LABEL: fsub_c_fadd_a_a_f32:2620; GFX9-FLUSH:       ; %bb.0:2621; GFX9-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x242622; GFX9-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02623; GFX9-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2624; GFX9-FLUSH-NEXT:    global_load_dword v1, v0, s[0:1] glc2625; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)2626; GFX9-FLUSH-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc2627; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)2628; GFX9-FLUSH-NEXT:    v_mac_f32_e32 v2, -2.0, v12629; GFX9-FLUSH-NEXT:    global_store_dword v0, v2, s[0:1]2630; GFX9-FLUSH-NEXT:    s_endpgm2631;2632; GFX9-DENORM-LABEL: fsub_c_fadd_a_a_f32:2633; GFX9-DENORM:       ; %bb.0:2634; GFX9-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x242635; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v02636; GFX9-DENORM-NEXT:    s_waitcnt lgkmcnt(0)2637; GFX9-DENORM-NEXT:    global_load_dword v1, v0, s[0:1] glc2638; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2639; GFX9-DENORM-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc2640; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2641; GFX9-DENORM-NEXT:    v_add_f32_e32 v1, v1, v12642; GFX9-DENORM-NEXT:    v_sub_f32_e32 v1, v2, v12643; GFX9-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]2644; GFX9-DENORM-NEXT:    s_endpgm2645;2646; GFX10-FLUSH-LABEL: fsub_c_fadd_a_a_f32:2647; GFX10-FLUSH:       ; %bb.0:2648; GFX10-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x242649; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02650; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2651; GFX10-FLUSH-NEXT:    global_load_dword v1, v0, s[0:1] glc dlc2652; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2653; GFX10-FLUSH-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc dlc2654; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2655; GFX10-FLUSH-NEXT:    v_mac_f32_e32 v2, -2.0, v12656; GFX10-FLUSH-NEXT:    global_store_dword v0, v2, s[0:1]2657; GFX10-FLUSH-NEXT:    s_endpgm2658;2659; GFX10-DENORM-LABEL: fsub_c_fadd_a_a_f32:2660; GFX10-DENORM:       ; %bb.0:2661; GFX10-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x242662; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v02663; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)2664; GFX10-DENORM-NEXT:    global_load_dword v1, v0, s[0:1] glc dlc2665; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2666; GFX10-DENORM-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc dlc2667; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2668; GFX10-DENORM-NEXT:    v_add_f32_e32 v1, v1, v12669; GFX10-DENORM-NEXT:    v_sub_f32_e32 v1, v2, v12670; GFX10-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]2671; GFX10-DENORM-NEXT:    s_endpgm2672  %tid = call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone2673  %gep.0 = getelementptr float, ptr addrspace(1) %out, i32 %tid2674  %gep.1 = getelementptr float, ptr addrspace(1) %gep.0, i32 12675  %gep.out = getelementptr float, ptr addrspace(1) %out, i32 %tid2676 2677  %r1 = load volatile float, ptr addrspace(1) %gep.02678  %r2 = load volatile float, ptr addrspace(1) %gep.12679 2680  %add = fadd float %r1, %r12681  %r3 = fsub float %r2, %add2682 2683  store float %r3, ptr addrspace(1) %gep.out2684  ret void2685}2686 2687define amdgpu_kernel void @fsub_fadd_a_a_c_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {2688; SI-FLUSH-LABEL: fsub_fadd_a_a_c_f32:2689; SI-FLUSH:       ; %bb.0:2690; SI-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x92691; SI-FLUSH-NEXT:    s_mov_b32 s3, 0xf0002692; SI-FLUSH-NEXT:    s_mov_b32 s2, 02693; SI-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02694; SI-FLUSH-NEXT:    v_mov_b32_e32 v1, 02695; SI-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2696; SI-FLUSH-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc2697; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2698; SI-FLUSH-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc2699; SI-FLUSH-NEXT:    s_waitcnt vmcnt(0)2700; SI-FLUSH-NEXT:    v_mad_f32 v2, v2, 2.0, -v32701; SI-FLUSH-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642702; SI-FLUSH-NEXT:    s_endpgm2703;2704; SI-DENORM-FASTFMA-STRICT-LABEL: fsub_fadd_a_a_c_f32:2705; SI-DENORM-FASTFMA-STRICT:       ; %bb.0:2706; SI-DENORM-FASTFMA-STRICT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x92707; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s3, 0xf0002708; SI-DENORM-FASTFMA-STRICT-NEXT:    s_mov_b32 s2, 02709; SI-DENORM-FASTFMA-STRICT-NEXT:    v_lshlrev_b32_e32 v0, 2, v02710; SI-DENORM-FASTFMA-STRICT-NEXT:    v_mov_b32_e32 v1, 02711; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt lgkmcnt(0)2712; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc2713; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)2714; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc2715; SI-DENORM-FASTFMA-STRICT-NEXT:    s_waitcnt vmcnt(0)2716; SI-DENORM-FASTFMA-STRICT-NEXT:    v_add_f32_e32 v2, v2, v22717; SI-DENORM-FASTFMA-STRICT-NEXT:    v_sub_f32_e32 v2, v2, v32718; SI-DENORM-FASTFMA-STRICT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642719; SI-DENORM-FASTFMA-STRICT-NEXT:    s_endpgm2720;2721; SI-DENORM-SLOWFMA-LABEL: fsub_fadd_a_a_c_f32:2722; SI-DENORM-SLOWFMA:       ; %bb.0:2723; SI-DENORM-SLOWFMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x92724; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s3, 0xf0002725; SI-DENORM-SLOWFMA-NEXT:    s_mov_b32 s2, 02726; SI-DENORM-SLOWFMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v02727; SI-DENORM-SLOWFMA-NEXT:    v_mov_b32_e32 v1, 02728; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt lgkmcnt(0)2729; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc2730; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)2731; SI-DENORM-SLOWFMA-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc2732; SI-DENORM-SLOWFMA-NEXT:    s_waitcnt vmcnt(0)2733; SI-DENORM-SLOWFMA-NEXT:    v_add_f32_e32 v2, v2, v22734; SI-DENORM-SLOWFMA-NEXT:    v_sub_f32_e32 v2, v2, v32735; SI-DENORM-SLOWFMA-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642736; SI-DENORM-SLOWFMA-NEXT:    s_endpgm2737;2738; SI-DENORM-FASTFMA-CONTRACT-LABEL: fsub_fadd_a_a_c_f32:2739; SI-DENORM-FASTFMA-CONTRACT:       ; %bb.0:2740; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x92741; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s3, 0xf0002742; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_mov_b32 s2, 02743; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_lshlrev_b32_e32 v0, 2, v02744; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_mov_b32_e32 v1, 02745; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt lgkmcnt(0)2746; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v2, v[0:1], s[0:3], 0 addr64 glc2747; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2748; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_load_dword v3, v[0:1], s[0:3], 0 addr64 offset:4 glc2749; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_waitcnt vmcnt(0)2750; SI-DENORM-FASTFMA-CONTRACT-NEXT:    v_fma_f32 v2, v2, 2.0, -v32751; SI-DENORM-FASTFMA-CONTRACT-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr642752; SI-DENORM-FASTFMA-CONTRACT-NEXT:    s_endpgm2753;2754; GFX9-FLUSH-LABEL: fsub_fadd_a_a_c_f32:2755; GFX9-FLUSH:       ; %bb.0:2756; GFX9-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x242757; GFX9-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02758; GFX9-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2759; GFX9-FLUSH-NEXT:    global_load_dword v1, v0, s[0:1] glc2760; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)2761; GFX9-FLUSH-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc2762; GFX9-FLUSH-NEXT:    s_waitcnt vmcnt(0)2763; GFX9-FLUSH-NEXT:    v_mad_f32 v1, v1, 2.0, -v22764; GFX9-FLUSH-NEXT:    global_store_dword v0, v1, s[0:1]2765; GFX9-FLUSH-NEXT:    s_endpgm2766;2767; GFX9-DENORM-LABEL: fsub_fadd_a_a_c_f32:2768; GFX9-DENORM:       ; %bb.0:2769; GFX9-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x242770; GFX9-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v02771; GFX9-DENORM-NEXT:    s_waitcnt lgkmcnt(0)2772; GFX9-DENORM-NEXT:    global_load_dword v1, v0, s[0:1] glc2773; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2774; GFX9-DENORM-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc2775; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)2776; GFX9-DENORM-NEXT:    v_add_f32_e32 v1, v1, v12777; GFX9-DENORM-NEXT:    v_sub_f32_e32 v1, v1, v22778; GFX9-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]2779; GFX9-DENORM-NEXT:    s_endpgm2780;2781; GFX10-FLUSH-LABEL: fsub_fadd_a_a_c_f32:2782; GFX10-FLUSH:       ; %bb.0:2783; GFX10-FLUSH-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x242784; GFX10-FLUSH-NEXT:    v_lshlrev_b32_e32 v0, 2, v02785; GFX10-FLUSH-NEXT:    s_waitcnt lgkmcnt(0)2786; GFX10-FLUSH-NEXT:    global_load_dword v1, v0, s[0:1] glc dlc2787; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2788; GFX10-FLUSH-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc dlc2789; GFX10-FLUSH-NEXT:    s_waitcnt vmcnt(0)2790; GFX10-FLUSH-NEXT:    v_mad_f32 v1, v1, 2.0, -v22791; GFX10-FLUSH-NEXT:    global_store_dword v0, v1, s[0:1]2792; GFX10-FLUSH-NEXT:    s_endpgm2793;2794; GFX10-DENORM-LABEL: fsub_fadd_a_a_c_f32:2795; GFX10-DENORM:       ; %bb.0:2796; GFX10-DENORM-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x242797; GFX10-DENORM-NEXT:    v_lshlrev_b32_e32 v0, 2, v02798; GFX10-DENORM-NEXT:    s_waitcnt lgkmcnt(0)2799; GFX10-DENORM-NEXT:    global_load_dword v1, v0, s[0:1] glc dlc2800; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2801; GFX10-DENORM-NEXT:    global_load_dword v2, v0, s[0:1] offset:4 glc dlc2802; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)2803; GFX10-DENORM-NEXT:    v_add_f32_e32 v1, v1, v12804; GFX10-DENORM-NEXT:    v_sub_f32_e32 v1, v1, v22805; GFX10-DENORM-NEXT:    global_store_dword v0, v1, s[0:1]2806; GFX10-DENORM-NEXT:    s_endpgm2807  %tid = call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone2808  %gep.0 = getelementptr float, ptr addrspace(1) %out, i32 %tid2809  %gep.1 = getelementptr float, ptr addrspace(1) %gep.0, i32 12810  %gep.out = getelementptr float, ptr addrspace(1) %out, i32 %tid2811 2812  %r1 = load volatile float, ptr addrspace(1) %gep.02813  %r2 = load volatile float, ptr addrspace(1) %gep.12814 2815  %add = fadd float %r1, %r12816  %r3 = fsub float %add, %r22817 2818  store float %r3, ptr addrspace(1) %gep.out2819  ret void2820}2821 2822attributes #0 = { nounwind }2823attributes #1 = { nounwind readnone }2824