1514 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GFX6 %s3; RUN: llc -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GFX8 %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX10-MAD %s6; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX11-MAD %s7 8; RUN: llc -mtriple=amdgcn -mcpu=gfx942 -fp-contract=fast < %s | FileCheck -check-prefixes=GFX942-FMA %s9; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -fp-contract=fast < %s | FileCheck -check-prefixes=GFX10-FMA %s10; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -fp-contract=fast < %s | FileCheck -check-prefixes=GFX11-FMA %s11 12declare i32 @llvm.amdgcn.workitem.id.x() nounwind readnone13declare float @llvm.fabs.f32(float) nounwind readnone14 15define amdgpu_kernel void @madak_f32(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in.a, ptr addrspace(1) noalias %in.b) #0 {16; GFX6-LABEL: madak_f32:17; GFX6: ; %bb.0:18; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x919; GFX6-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0xd20; GFX6-NEXT: s_mov_b32 s7, 0xf00021; GFX6-NEXT: s_mov_b32 s6, 022; GFX6-NEXT: v_lshlrev_b32_e32 v0, 2, v023; GFX6-NEXT: s_waitcnt lgkmcnt(0)24; GFX6-NEXT: s_mov_b64 s[4:5], s[2:3]25; GFX6-NEXT: v_mov_b32_e32 v1, 026; GFX6-NEXT: s_mov_b64 s[10:11], s[6:7]27; GFX6-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr6428; GFX6-NEXT: buffer_load_dword v3, v[0:1], s[8:11], 0 addr6429; GFX6-NEXT: s_mov_b64 s[2:3], s[6:7]30; GFX6-NEXT: s_waitcnt vmcnt(0)31; GFX6-NEXT: v_madak_f32 v2, v2, v3, 0x4120000032; GFX6-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr6433; GFX6-NEXT: s_endpgm34;35; GFX8-LABEL: madak_f32:36; GFX8: ; %bb.0:37; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2438; GFX8-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x3439; GFX8-NEXT: v_lshlrev_b32_e32 v4, 2, v040; GFX8-NEXT: s_waitcnt lgkmcnt(0)41; GFX8-NEXT: v_mov_b32_e32 v1, s342; GFX8-NEXT: v_add_u32_e32 v0, vcc, s2, v443; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc44; GFX8-NEXT: v_mov_b32_e32 v3, s545; GFX8-NEXT: v_add_u32_e32 v2, vcc, s4, v446; GFX8-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc47; GFX8-NEXT: flat_load_dword v5, v[0:1]48; GFX8-NEXT: flat_load_dword v2, v[2:3]49; GFX8-NEXT: v_mov_b32_e32 v1, s150; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v451; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc52; GFX8-NEXT: s_waitcnt vmcnt(0)53; GFX8-NEXT: v_madak_f32 v2, v5, v2, 0x4120000054; GFX8-NEXT: flat_store_dword v[0:1], v255; GFX8-NEXT: s_endpgm56;57; GFX9-LABEL: madak_f32:58; GFX9: ; %bb.0:59; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2460; GFX9-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x3461; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v062; GFX9-NEXT: s_waitcnt lgkmcnt(0)63; GFX9-NEXT: global_load_dword v1, v0, s[2:3]64; GFX9-NEXT: global_load_dword v2, v0, s[6:7]65; GFX9-NEXT: s_waitcnt vmcnt(0)66; GFX9-NEXT: v_madak_f32 v1, v1, v2, 0x4120000067; GFX9-NEXT: global_store_dword v0, v1, s[0:1]68; GFX9-NEXT: s_endpgm69;70; GFX10-MAD-LABEL: madak_f32:71; GFX10-MAD: ; %bb.0:72; GFX10-MAD-NEXT: s_clause 0x173; GFX10-MAD-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x2474; GFX10-MAD-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x3475; GFX10-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v076; GFX10-MAD-NEXT: s_waitcnt lgkmcnt(0)77; GFX10-MAD-NEXT: s_clause 0x178; GFX10-MAD-NEXT: global_load_dword v1, v0, s[2:3]79; GFX10-MAD-NEXT: global_load_dword v2, v0, s[6:7]80; GFX10-MAD-NEXT: s_waitcnt vmcnt(0)81; GFX10-MAD-NEXT: v_madak_f32 v1, v1, v2, 0x4120000082; GFX10-MAD-NEXT: global_store_dword v0, v1, s[0:1]83; GFX10-MAD-NEXT: s_endpgm84;85; GFX11-MAD-LABEL: madak_f32:86; GFX11-MAD: ; %bb.0:87; GFX11-MAD-NEXT: s_clause 0x188; GFX11-MAD-NEXT: s_load_b128 s[0:3], s[4:5], 0x2489; GFX11-MAD-NEXT: s_load_b64 s[4:5], s[4:5], 0x3490; GFX11-MAD-NEXT: v_and_b32_e32 v0, 0x3ff, v091; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1)92; GFX11-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v093; GFX11-MAD-NEXT: s_waitcnt lgkmcnt(0)94; GFX11-MAD-NEXT: s_clause 0x195; GFX11-MAD-NEXT: global_load_b32 v1, v0, s[2:3]96; GFX11-MAD-NEXT: global_load_b32 v2, v0, s[4:5]97; GFX11-MAD-NEXT: s_waitcnt vmcnt(0)98; GFX11-MAD-NEXT: v_mul_f32_e32 v1, v1, v299; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1)100; GFX11-MAD-NEXT: v_add_f32_e32 v1, 0x41200000, v1101; GFX11-MAD-NEXT: global_store_b32 v0, v1, s[0:1]102; GFX11-MAD-NEXT: s_endpgm103;104; GFX942-FMA-LABEL: madak_f32:105; GFX942-FMA: ; %bb.0:106; GFX942-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24107; GFX942-FMA-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34108; GFX942-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v0109; GFX942-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0110; GFX942-FMA-NEXT: s_waitcnt lgkmcnt(0)111; GFX942-FMA-NEXT: global_load_dword v1, v0, s[2:3]112; GFX942-FMA-NEXT: global_load_dword v2, v0, s[6:7]113; GFX942-FMA-NEXT: s_waitcnt vmcnt(0)114; GFX942-FMA-NEXT: v_fmaak_f32 v1, v1, v2, 0x41200000115; GFX942-FMA-NEXT: global_store_dword v0, v1, s[0:1]116; GFX942-FMA-NEXT: s_endpgm117;118; GFX10-FMA-LABEL: madak_f32:119; GFX10-FMA: ; %bb.0:120; GFX10-FMA-NEXT: s_clause 0x1121; GFX10-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24122; GFX10-FMA-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34123; GFX10-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0124; GFX10-FMA-NEXT: s_waitcnt lgkmcnt(0)125; GFX10-FMA-NEXT: s_clause 0x1126; GFX10-FMA-NEXT: global_load_dword v1, v0, s[2:3]127; GFX10-FMA-NEXT: global_load_dword v2, v0, s[6:7]128; GFX10-FMA-NEXT: s_waitcnt vmcnt(0)129; GFX10-FMA-NEXT: v_fmaak_f32 v1, v1, v2, 0x41200000130; GFX10-FMA-NEXT: global_store_dword v0, v1, s[0:1]131; GFX10-FMA-NEXT: s_endpgm132;133; GFX11-FMA-LABEL: madak_f32:134; GFX11-FMA: ; %bb.0:135; GFX11-FMA-NEXT: s_clause 0x1136; GFX11-FMA-NEXT: s_load_b128 s[0:3], s[4:5], 0x24137; GFX11-FMA-NEXT: s_load_b64 s[4:5], s[4:5], 0x34138; GFX11-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v0139; GFX11-FMA-NEXT: s_delay_alu instid0(VALU_DEP_1)140; GFX11-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0141; GFX11-FMA-NEXT: s_waitcnt lgkmcnt(0)142; GFX11-FMA-NEXT: s_clause 0x1143; GFX11-FMA-NEXT: global_load_b32 v1, v0, s[2:3]144; GFX11-FMA-NEXT: global_load_b32 v2, v0, s[4:5]145; GFX11-FMA-NEXT: s_waitcnt vmcnt(0)146; GFX11-FMA-NEXT: v_fmaak_f32 v1, v1, v2, 0x41200000147; GFX11-FMA-NEXT: global_store_b32 v0, v1, s[0:1]148; GFX11-FMA-NEXT: s_endpgm149 %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone150 %in.a.gep = getelementptr float, ptr addrspace(1) %in.a, i32 %tid151 %in.b.gep = getelementptr float, ptr addrspace(1) %in.b, i32 %tid152 %out.gep = getelementptr float, ptr addrspace(1) %out, i32 %tid153 154 %a = load float, ptr addrspace(1) %in.a.gep, align 4155 %b = load float, ptr addrspace(1) %in.b.gep, align 4156 157 %mul = fmul float %a, %b158 %madak = fadd float %mul, 10.0159 store float %madak, ptr addrspace(1) %out.gep, align 4160 ret void161}162 163; Make sure this is only folded with one use. This is a code size164; optimization and if we fold the immediate multiple times, we'll undo165; it.166define amdgpu_kernel void @madak_2_use_f32(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in) #0 {167; GFX6-LABEL: madak_2_use_f32:168; GFX6: ; %bb.0:169; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9170; GFX6-NEXT: s_mov_b32 s7, 0xf000171; GFX6-NEXT: s_mov_b32 s6, 0172; GFX6-NEXT: v_lshlrev_b32_e32 v0, 2, v0173; GFX6-NEXT: v_mov_b32_e32 v1, 0174; GFX6-NEXT: s_waitcnt lgkmcnt(0)175; GFX6-NEXT: s_mov_b64 s[4:5], s[2:3]176; GFX6-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64 glc177; GFX6-NEXT: s_waitcnt vmcnt(0)178; GFX6-NEXT: buffer_load_dword v3, v[0:1], s[4:7], 0 addr64 offset:4 glc179; GFX6-NEXT: s_waitcnt vmcnt(0)180; GFX6-NEXT: buffer_load_dword v4, v[0:1], s[4:7], 0 addr64 offset:8 glc181; GFX6-NEXT: s_waitcnt vmcnt(0)182; GFX6-NEXT: v_mov_b32_e32 v5, 0x41200000183; GFX6-NEXT: s_mov_b64 s[2:3], s[6:7]184; GFX6-NEXT: v_madak_f32 v3, v2, v3, 0x41200000185; GFX6-NEXT: v_mac_f32_e32 v5, v2, v4186; GFX6-NEXT: buffer_store_dword v3, v[0:1], s[0:3], 0 addr64187; GFX6-NEXT: s_waitcnt vmcnt(0)188; GFX6-NEXT: buffer_store_dword v5, v[0:1], s[4:7], 0 addr64 offset:4189; GFX6-NEXT: s_waitcnt vmcnt(0)190; GFX6-NEXT: s_endpgm191;192; GFX8-LABEL: madak_2_use_f32:193; GFX8: ; %bb.0:194; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24195; GFX8-NEXT: v_lshlrev_b32_e32 v6, 2, v0196; GFX8-NEXT: s_waitcnt lgkmcnt(0)197; GFX8-NEXT: v_mov_b32_e32 v1, s3198; GFX8-NEXT: v_add_u32_e32 v0, vcc, s2, v6199; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc200; GFX8-NEXT: v_add_u32_e32 v2, vcc, 4, v0201; GFX8-NEXT: v_addc_u32_e32 v3, vcc, 0, v1, vcc202; GFX8-NEXT: v_add_u32_e32 v4, vcc, 8, v0203; GFX8-NEXT: v_addc_u32_e32 v5, vcc, 0, v1, vcc204; GFX8-NEXT: flat_load_dword v7, v[0:1] glc205; GFX8-NEXT: s_waitcnt vmcnt(0)206; GFX8-NEXT: flat_load_dword v8, v[2:3] glc207; GFX8-NEXT: s_waitcnt vmcnt(0)208; GFX8-NEXT: flat_load_dword v4, v[4:5] glc209; GFX8-NEXT: s_waitcnt vmcnt(0)210; GFX8-NEXT: v_mov_b32_e32 v1, s1211; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v6212; GFX8-NEXT: v_mov_b32_e32 v5, 0x41200000213; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc214; GFX8-NEXT: v_madak_f32 v6, v7, v8, 0x41200000215; GFX8-NEXT: v_mac_f32_e32 v5, v7, v4216; GFX8-NEXT: flat_store_dword v[0:1], v6217; GFX8-NEXT: s_waitcnt vmcnt(0)218; GFX8-NEXT: flat_store_dword v[2:3], v5219; GFX8-NEXT: s_waitcnt vmcnt(0)220; GFX8-NEXT: s_endpgm221;222; GFX9-LABEL: madak_2_use_f32:223; GFX9: ; %bb.0:224; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24225; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0226; GFX9-NEXT: v_mov_b32_e32 v4, 0x41200000227; GFX9-NEXT: s_waitcnt lgkmcnt(0)228; GFX9-NEXT: global_load_dword v1, v0, s[2:3] glc229; GFX9-NEXT: s_waitcnt vmcnt(0)230; GFX9-NEXT: global_load_dword v2, v0, s[2:3] offset:4 glc231; GFX9-NEXT: s_waitcnt vmcnt(0)232; GFX9-NEXT: global_load_dword v3, v0, s[2:3] offset:8 glc233; GFX9-NEXT: s_waitcnt vmcnt(0)234; GFX9-NEXT: v_madak_f32 v2, v1, v2, 0x41200000235; GFX9-NEXT: v_mac_f32_e32 v4, v1, v3236; GFX9-NEXT: global_store_dword v0, v2, s[0:1]237; GFX9-NEXT: s_waitcnt vmcnt(0)238; GFX9-NEXT: global_store_dword v0, v4, s[2:3] offset:4239; GFX9-NEXT: s_waitcnt vmcnt(0)240; GFX9-NEXT: s_endpgm241;242; GFX10-MAD-LABEL: madak_2_use_f32:243; GFX10-MAD: ; %bb.0:244; GFX10-MAD-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24245; GFX10-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v0246; GFX10-MAD-NEXT: s_waitcnt lgkmcnt(0)247; GFX10-MAD-NEXT: global_load_dword v1, v0, s[2:3] glc dlc248; GFX10-MAD-NEXT: s_waitcnt vmcnt(0)249; GFX10-MAD-NEXT: global_load_dword v2, v0, s[2:3] offset:4 glc dlc250; GFX10-MAD-NEXT: s_waitcnt vmcnt(0)251; GFX10-MAD-NEXT: global_load_dword v3, v0, s[2:3] offset:8 glc dlc252; GFX10-MAD-NEXT: s_waitcnt vmcnt(0)253; GFX10-MAD-NEXT: v_madak_f32 v2, v1, v2, 0x41200000254; GFX10-MAD-NEXT: v_madak_f32 v1, v1, v3, 0x41200000255; GFX10-MAD-NEXT: global_store_dword v0, v2, s[0:1]256; GFX10-MAD-NEXT: s_waitcnt_vscnt null, 0x0257; GFX10-MAD-NEXT: global_store_dword v0, v1, s[2:3] offset:4258; GFX10-MAD-NEXT: s_waitcnt_vscnt null, 0x0259; GFX10-MAD-NEXT: s_endpgm260;261; GFX11-MAD-LABEL: madak_2_use_f32:262; GFX11-MAD: ; %bb.0:263; GFX11-MAD-NEXT: s_load_b128 s[0:3], s[4:5], 0x24264; GFX11-MAD-NEXT: v_and_b32_e32 v0, 0x3ff, v0265; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1)266; GFX11-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v0267; GFX11-MAD-NEXT: s_waitcnt lgkmcnt(0)268; GFX11-MAD-NEXT: global_load_b32 v1, v0, s[2:3] glc dlc269; GFX11-MAD-NEXT: s_waitcnt vmcnt(0)270; GFX11-MAD-NEXT: global_load_b32 v2, v0, s[2:3] offset:4 glc dlc271; GFX11-MAD-NEXT: s_waitcnt vmcnt(0)272; GFX11-MAD-NEXT: global_load_b32 v3, v0, s[2:3] offset:8 glc dlc273; GFX11-MAD-NEXT: s_waitcnt vmcnt(0)274; GFX11-MAD-NEXT: v_mul_f32_e32 v2, v1, v2275; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)276; GFX11-MAD-NEXT: v_dual_mul_f32 v1, v1, v3 :: v_dual_add_f32 v2, 0x41200000, v2277; GFX11-MAD-NEXT: v_add_f32_e32 v1, 0x41200000, v1278; GFX11-MAD-NEXT: global_store_b32 v0, v2, s[0:1] dlc279; GFX11-MAD-NEXT: s_waitcnt_vscnt null, 0x0280; GFX11-MAD-NEXT: global_store_b32 v0, v1, s[2:3] offset:4 dlc281; GFX11-MAD-NEXT: s_waitcnt_vscnt null, 0x0282; GFX11-MAD-NEXT: s_endpgm283;284; GFX942-FMA-LABEL: madak_2_use_f32:285; GFX942-FMA: ; %bb.0:286; GFX942-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24287; GFX942-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v0288; GFX942-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0289; GFX942-FMA-NEXT: v_mov_b32_e32 v4, 0x41200000290; GFX942-FMA-NEXT: s_waitcnt lgkmcnt(0)291; GFX942-FMA-NEXT: global_load_dword v1, v0, s[2:3] sc0 sc1292; GFX942-FMA-NEXT: s_waitcnt vmcnt(0)293; GFX942-FMA-NEXT: global_load_dword v2, v0, s[2:3] offset:4 sc0 sc1294; GFX942-FMA-NEXT: s_waitcnt vmcnt(0)295; GFX942-FMA-NEXT: global_load_dword v3, v0, s[2:3] offset:8 sc0 sc1296; GFX942-FMA-NEXT: s_waitcnt vmcnt(0)297; GFX942-FMA-NEXT: v_fmaak_f32 v2, v1, v2, 0x41200000298; GFX942-FMA-NEXT: v_fmac_f32_e32 v4, v1, v3299; GFX942-FMA-NEXT: global_store_dword v0, v2, s[0:1] sc0 sc1300; GFX942-FMA-NEXT: s_waitcnt vmcnt(0)301; GFX942-FMA-NEXT: global_store_dword v0, v4, s[2:3] offset:4 sc0 sc1302; GFX942-FMA-NEXT: s_waitcnt vmcnt(0)303; GFX942-FMA-NEXT: s_endpgm304;305; GFX10-FMA-LABEL: madak_2_use_f32:306; GFX10-FMA: ; %bb.0:307; GFX10-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24308; GFX10-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0309; GFX10-FMA-NEXT: s_waitcnt lgkmcnt(0)310; GFX10-FMA-NEXT: global_load_dword v1, v0, s[2:3] glc dlc311; GFX10-FMA-NEXT: s_waitcnt vmcnt(0)312; GFX10-FMA-NEXT: global_load_dword v2, v0, s[2:3] offset:4 glc dlc313; GFX10-FMA-NEXT: s_waitcnt vmcnt(0)314; GFX10-FMA-NEXT: global_load_dword v3, v0, s[2:3] offset:8 glc dlc315; GFX10-FMA-NEXT: s_waitcnt vmcnt(0)316; GFX10-FMA-NEXT: v_fmaak_f32 v2, v1, v2, 0x41200000317; GFX10-FMA-NEXT: v_fmaak_f32 v1, v1, v3, 0x41200000318; GFX10-FMA-NEXT: global_store_dword v0, v2, s[0:1]319; GFX10-FMA-NEXT: s_waitcnt_vscnt null, 0x0320; GFX10-FMA-NEXT: global_store_dword v0, v1, s[2:3] offset:4321; GFX10-FMA-NEXT: s_waitcnt_vscnt null, 0x0322; GFX10-FMA-NEXT: s_endpgm323;324; GFX11-FMA-LABEL: madak_2_use_f32:325; GFX11-FMA: ; %bb.0:326; GFX11-FMA-NEXT: s_load_b128 s[0:3], s[4:5], 0x24327; GFX11-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v0328; GFX11-FMA-NEXT: s_delay_alu instid0(VALU_DEP_1)329; GFX11-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0330; GFX11-FMA-NEXT: s_waitcnt lgkmcnt(0)331; GFX11-FMA-NEXT: global_load_b32 v1, v0, s[2:3] glc dlc332; GFX11-FMA-NEXT: s_waitcnt vmcnt(0)333; GFX11-FMA-NEXT: global_load_b32 v2, v0, s[2:3] offset:4 glc dlc334; GFX11-FMA-NEXT: s_waitcnt vmcnt(0)335; GFX11-FMA-NEXT: global_load_b32 v3, v0, s[2:3] offset:8 glc dlc336; GFX11-FMA-NEXT: s_waitcnt vmcnt(0)337; GFX11-FMA-NEXT: v_fmaak_f32 v2, v1, v2, 0x41200000338; GFX11-FMA-NEXT: v_fmaak_f32 v1, v1, v3, 0x41200000339; GFX11-FMA-NEXT: global_store_b32 v0, v2, s[0:1] dlc340; GFX11-FMA-NEXT: s_waitcnt_vscnt null, 0x0341; GFX11-FMA-NEXT: global_store_b32 v0, v1, s[2:3] offset:4 dlc342; GFX11-FMA-NEXT: s_waitcnt_vscnt null, 0x0343; GFX11-FMA-NEXT: s_endpgm344 %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone345 346 %in.gep.0 = getelementptr float, ptr addrspace(1) %in, i32 %tid347 %in.gep.1 = getelementptr float, ptr addrspace(1) %in.gep.0, i32 1348 %in.gep.2 = getelementptr float, ptr addrspace(1) %in.gep.0, i32 2349 350 %out.gep.0 = getelementptr float, ptr addrspace(1) %out, i32 %tid351 %out.gep.1 = getelementptr float, ptr addrspace(1) %in.gep.0, i32 1352 353 %a = load volatile float, ptr addrspace(1) %in.gep.0, align 4354 %b = load volatile float, ptr addrspace(1) %in.gep.1, align 4355 %c = load volatile float, ptr addrspace(1) %in.gep.2, align 4356 357 %mul0 = fmul float %a, %b358 %mul1 = fmul float %a, %c359 %madak0 = fadd float %mul0, 10.0360 %madak1 = fadd float %mul1, 10.0361 362 store volatile float %madak0, ptr addrspace(1) %out.gep.0, align 4363 store volatile float %madak1, ptr addrspace(1) %out.gep.1, align 4364 ret void365}366 367define amdgpu_kernel void @madak_m_inline_imm_f32(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in.a) #0 {368; GFX6-LABEL: madak_m_inline_imm_f32:369; GFX6: ; %bb.0:370; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9371; GFX6-NEXT: s_mov_b32 s7, 0xf000372; GFX6-NEXT: s_mov_b32 s6, 0373; GFX6-NEXT: v_lshlrev_b32_e32 v0, 2, v0374; GFX6-NEXT: v_mov_b32_e32 v1, 0375; GFX6-NEXT: s_waitcnt lgkmcnt(0)376; GFX6-NEXT: s_mov_b64 s[4:5], s[2:3]377; GFX6-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64378; GFX6-NEXT: s_mov_b64 s[2:3], s[6:7]379; GFX6-NEXT: s_waitcnt vmcnt(0)380; GFX6-NEXT: v_madak_f32 v2, 4.0, v2, 0x41200000381; GFX6-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64382; GFX6-NEXT: s_endpgm383;384; GFX8-LABEL: madak_m_inline_imm_f32:385; GFX8: ; %bb.0:386; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24387; GFX8-NEXT: v_lshlrev_b32_e32 v2, 2, v0388; GFX8-NEXT: s_waitcnt lgkmcnt(0)389; GFX8-NEXT: v_mov_b32_e32 v1, s3390; GFX8-NEXT: v_add_u32_e32 v0, vcc, s2, v2391; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc392; GFX8-NEXT: flat_load_dword v3, v[0:1]393; GFX8-NEXT: v_mov_b32_e32 v1, s1394; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v2395; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc396; GFX8-NEXT: s_waitcnt vmcnt(0)397; GFX8-NEXT: v_madak_f32 v2, 4.0, v3, 0x41200000398; GFX8-NEXT: flat_store_dword v[0:1], v2399; GFX8-NEXT: s_endpgm400;401; GFX9-LABEL: madak_m_inline_imm_f32:402; GFX9: ; %bb.0:403; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24404; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0405; GFX9-NEXT: s_waitcnt lgkmcnt(0)406; GFX9-NEXT: global_load_dword v1, v0, s[2:3]407; GFX9-NEXT: s_waitcnt vmcnt(0)408; GFX9-NEXT: v_madak_f32 v1, 4.0, v1, 0x41200000409; GFX9-NEXT: global_store_dword v0, v1, s[0:1]410; GFX9-NEXT: s_endpgm411;412; GFX10-MAD-LABEL: madak_m_inline_imm_f32:413; GFX10-MAD: ; %bb.0:414; GFX10-MAD-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24415; GFX10-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v0416; GFX10-MAD-NEXT: s_waitcnt lgkmcnt(0)417; GFX10-MAD-NEXT: global_load_dword v1, v0, s[2:3]418; GFX10-MAD-NEXT: s_waitcnt vmcnt(0)419; GFX10-MAD-NEXT: v_madak_f32 v1, 4.0, v1, 0x41200000420; GFX10-MAD-NEXT: global_store_dword v0, v1, s[0:1]421; GFX10-MAD-NEXT: s_endpgm422;423; GFX11-MAD-LABEL: madak_m_inline_imm_f32:424; GFX11-MAD: ; %bb.0:425; GFX11-MAD-NEXT: s_load_b128 s[0:3], s[4:5], 0x24426; GFX11-MAD-NEXT: v_and_b32_e32 v0, 0x3ff, v0427; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)428; GFX11-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v0429; GFX11-MAD-NEXT: s_waitcnt lgkmcnt(0)430; GFX11-MAD-NEXT: global_load_b32 v1, v0, s[2:3]431; GFX11-MAD-NEXT: s_waitcnt vmcnt(0)432; GFX11-MAD-NEXT: v_mul_f32_e32 v1, 4.0, v1433; GFX11-MAD-NEXT: v_add_f32_e32 v1, 0x41200000, v1434; GFX11-MAD-NEXT: global_store_b32 v0, v1, s[0:1]435; GFX11-MAD-NEXT: s_endpgm436;437; GFX942-FMA-LABEL: madak_m_inline_imm_f32:438; GFX942-FMA: ; %bb.0:439; GFX942-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24440; GFX942-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v0441; GFX942-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0442; GFX942-FMA-NEXT: s_waitcnt lgkmcnt(0)443; GFX942-FMA-NEXT: global_load_dword v1, v0, s[2:3]444; GFX942-FMA-NEXT: s_waitcnt vmcnt(0)445; GFX942-FMA-NEXT: v_fmaak_f32 v1, 4.0, v1, 0x41200000446; GFX942-FMA-NEXT: global_store_dword v0, v1, s[0:1]447; GFX942-FMA-NEXT: s_endpgm448;449; GFX10-FMA-LABEL: madak_m_inline_imm_f32:450; GFX10-FMA: ; %bb.0:451; GFX10-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24452; GFX10-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0453; GFX10-FMA-NEXT: s_waitcnt lgkmcnt(0)454; GFX10-FMA-NEXT: global_load_dword v1, v0, s[2:3]455; GFX10-FMA-NEXT: s_waitcnt vmcnt(0)456; GFX10-FMA-NEXT: v_fmaak_f32 v1, 4.0, v1, 0x41200000457; GFX10-FMA-NEXT: global_store_dword v0, v1, s[0:1]458; GFX10-FMA-NEXT: s_endpgm459;460; GFX11-FMA-LABEL: madak_m_inline_imm_f32:461; GFX11-FMA: ; %bb.0:462; GFX11-FMA-NEXT: s_load_b128 s[0:3], s[4:5], 0x24463; GFX11-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v0464; GFX11-FMA-NEXT: s_delay_alu instid0(VALU_DEP_1)465; GFX11-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0466; GFX11-FMA-NEXT: s_waitcnt lgkmcnt(0)467; GFX11-FMA-NEXT: global_load_b32 v1, v0, s[2:3]468; GFX11-FMA-NEXT: s_waitcnt vmcnt(0)469; GFX11-FMA-NEXT: v_fmaak_f32 v1, 4.0, v1, 0x41200000470; GFX11-FMA-NEXT: global_store_b32 v0, v1, s[0:1]471; GFX11-FMA-NEXT: s_endpgm472 %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone473 %in.a.gep = getelementptr float, ptr addrspace(1) %in.a, i32 %tid474 %out.gep = getelementptr float, ptr addrspace(1) %out, i32 %tid475 476 %a = load float, ptr addrspace(1) %in.a.gep, align 4477 478 %mul = fmul float 4.0, %a479 %madak = fadd float %mul, 10.0480 store float %madak, ptr addrspace(1) %out.gep, align 4481 ret void482}483 484; Make sure nothing weird happens with a value that is also allowed as485; an inline immediate.486define amdgpu_kernel void @madak_inline_imm_f32(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in.a, ptr addrspace(1) noalias %in.b) #0 {487; GFX6-LABEL: madak_inline_imm_f32:488; GFX6: ; %bb.0:489; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9490; GFX6-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0xd491; GFX6-NEXT: s_mov_b32 s7, 0xf000492; GFX6-NEXT: s_mov_b32 s6, 0493; GFX6-NEXT: v_lshlrev_b32_e32 v0, 2, v0494; GFX6-NEXT: s_waitcnt lgkmcnt(0)495; GFX6-NEXT: s_mov_b64 s[4:5], s[2:3]496; GFX6-NEXT: v_mov_b32_e32 v1, 0497; GFX6-NEXT: s_mov_b64 s[10:11], s[6:7]498; GFX6-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64499; GFX6-NEXT: buffer_load_dword v3, v[0:1], s[8:11], 0 addr64500; GFX6-NEXT: s_mov_b64 s[2:3], s[6:7]501; GFX6-NEXT: s_waitcnt vmcnt(0)502; GFX6-NEXT: v_mad_f32 v2, v2, v3, 4.0503; GFX6-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64504; GFX6-NEXT: s_endpgm505;506; GFX8-LABEL: madak_inline_imm_f32:507; GFX8: ; %bb.0:508; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24509; GFX8-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x34510; GFX8-NEXT: v_lshlrev_b32_e32 v4, 2, v0511; GFX8-NEXT: s_waitcnt lgkmcnt(0)512; GFX8-NEXT: v_mov_b32_e32 v1, s3513; GFX8-NEXT: v_add_u32_e32 v0, vcc, s2, v4514; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc515; GFX8-NEXT: v_mov_b32_e32 v3, s5516; GFX8-NEXT: v_add_u32_e32 v2, vcc, s4, v4517; GFX8-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc518; GFX8-NEXT: flat_load_dword v5, v[0:1]519; GFX8-NEXT: flat_load_dword v2, v[2:3]520; GFX8-NEXT: v_mov_b32_e32 v1, s1521; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v4522; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc523; GFX8-NEXT: s_waitcnt vmcnt(0)524; GFX8-NEXT: v_mad_f32 v2, v5, v2, 4.0525; GFX8-NEXT: flat_store_dword v[0:1], v2526; GFX8-NEXT: s_endpgm527;528; GFX9-LABEL: madak_inline_imm_f32:529; GFX9: ; %bb.0:530; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24531; GFX9-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34532; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0533; GFX9-NEXT: s_waitcnt lgkmcnt(0)534; GFX9-NEXT: global_load_dword v1, v0, s[2:3]535; GFX9-NEXT: global_load_dword v2, v0, s[6:7]536; GFX9-NEXT: s_waitcnt vmcnt(0)537; GFX9-NEXT: v_mad_f32 v1, v1, v2, 4.0538; GFX9-NEXT: global_store_dword v0, v1, s[0:1]539; GFX9-NEXT: s_endpgm540;541; GFX10-MAD-LABEL: madak_inline_imm_f32:542; GFX10-MAD: ; %bb.0:543; GFX10-MAD-NEXT: s_clause 0x1544; GFX10-MAD-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24545; GFX10-MAD-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34546; GFX10-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v0547; GFX10-MAD-NEXT: s_waitcnt lgkmcnt(0)548; GFX10-MAD-NEXT: s_clause 0x1549; GFX10-MAD-NEXT: global_load_dword v1, v0, s[2:3]550; GFX10-MAD-NEXT: global_load_dword v2, v0, s[6:7]551; GFX10-MAD-NEXT: s_waitcnt vmcnt(0)552; GFX10-MAD-NEXT: v_mad_f32 v1, v1, v2, 4.0553; GFX10-MAD-NEXT: global_store_dword v0, v1, s[0:1]554; GFX10-MAD-NEXT: s_endpgm555;556; GFX11-MAD-LABEL: madak_inline_imm_f32:557; GFX11-MAD: ; %bb.0:558; GFX11-MAD-NEXT: s_clause 0x1559; GFX11-MAD-NEXT: s_load_b128 s[0:3], s[4:5], 0x24560; GFX11-MAD-NEXT: s_load_b64 s[4:5], s[4:5], 0x34561; GFX11-MAD-NEXT: v_and_b32_e32 v0, 0x3ff, v0562; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1)563; GFX11-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v0564; GFX11-MAD-NEXT: s_waitcnt lgkmcnt(0)565; GFX11-MAD-NEXT: s_clause 0x1566; GFX11-MAD-NEXT: global_load_b32 v1, v0, s[2:3]567; GFX11-MAD-NEXT: global_load_b32 v2, v0, s[4:5]568; GFX11-MAD-NEXT: s_waitcnt vmcnt(0)569; GFX11-MAD-NEXT: v_mul_f32_e32 v1, v1, v2570; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1)571; GFX11-MAD-NEXT: v_add_f32_e32 v1, 4.0, v1572; GFX11-MAD-NEXT: global_store_b32 v0, v1, s[0:1]573; GFX11-MAD-NEXT: s_endpgm574;575; GFX942-FMA-LABEL: madak_inline_imm_f32:576; GFX942-FMA: ; %bb.0:577; GFX942-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24578; GFX942-FMA-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34579; GFX942-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v0580; GFX942-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0581; GFX942-FMA-NEXT: s_waitcnt lgkmcnt(0)582; GFX942-FMA-NEXT: global_load_dword v1, v0, s[2:3]583; GFX942-FMA-NEXT: global_load_dword v2, v0, s[6:7]584; GFX942-FMA-NEXT: s_waitcnt vmcnt(0)585; GFX942-FMA-NEXT: v_fma_f32 v1, v1, v2, 4.0586; GFX942-FMA-NEXT: global_store_dword v0, v1, s[0:1]587; GFX942-FMA-NEXT: s_endpgm588;589; GFX10-FMA-LABEL: madak_inline_imm_f32:590; GFX10-FMA: ; %bb.0:591; GFX10-FMA-NEXT: s_clause 0x1592; GFX10-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24593; GFX10-FMA-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34594; GFX10-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0595; GFX10-FMA-NEXT: s_waitcnt lgkmcnt(0)596; GFX10-FMA-NEXT: s_clause 0x1597; GFX10-FMA-NEXT: global_load_dword v1, v0, s[2:3]598; GFX10-FMA-NEXT: global_load_dword v2, v0, s[6:7]599; GFX10-FMA-NEXT: s_waitcnt vmcnt(0)600; GFX10-FMA-NEXT: v_fma_f32 v1, v1, v2, 4.0601; GFX10-FMA-NEXT: global_store_dword v0, v1, s[0:1]602; GFX10-FMA-NEXT: s_endpgm603;604; GFX11-FMA-LABEL: madak_inline_imm_f32:605; GFX11-FMA: ; %bb.0:606; GFX11-FMA-NEXT: s_clause 0x1607; GFX11-FMA-NEXT: s_load_b128 s[0:3], s[4:5], 0x24608; GFX11-FMA-NEXT: s_load_b64 s[4:5], s[4:5], 0x34609; GFX11-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v0610; GFX11-FMA-NEXT: s_delay_alu instid0(VALU_DEP_1)611; GFX11-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0612; GFX11-FMA-NEXT: s_waitcnt lgkmcnt(0)613; GFX11-FMA-NEXT: s_clause 0x1614; GFX11-FMA-NEXT: global_load_b32 v1, v0, s[2:3]615; GFX11-FMA-NEXT: global_load_b32 v2, v0, s[4:5]616; GFX11-FMA-NEXT: s_waitcnt vmcnt(0)617; GFX11-FMA-NEXT: v_fma_f32 v1, v1, v2, 4.0618; GFX11-FMA-NEXT: global_store_b32 v0, v1, s[0:1]619; GFX11-FMA-NEXT: s_endpgm620 %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone621 %in.a.gep = getelementptr float, ptr addrspace(1) %in.a, i32 %tid622 %in.b.gep = getelementptr float, ptr addrspace(1) %in.b, i32 %tid623 %out.gep = getelementptr float, ptr addrspace(1) %out, i32 %tid624 625 %a = load float, ptr addrspace(1) %in.a.gep, align 4626 %b = load float, ptr addrspace(1) %in.b.gep, align 4627 628 %mul = fmul float %a, %b629 %madak = fadd float %mul, 4.0630 store float %madak, ptr addrspace(1) %out.gep, align 4631 ret void632}633 634; We can't use an SGPR when forming madak635define amdgpu_kernel void @s_v_madak_f32(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in.a, float %b) #0 {636; GFX6-LABEL: s_v_madak_f32:637; GFX6: ; %bb.0:638; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9639; GFX6-NEXT: s_load_dword s8, s[4:5], 0xd640; GFX6-NEXT: s_mov_b32 s7, 0xf000641; GFX6-NEXT: s_mov_b32 s6, 0642; GFX6-NEXT: v_lshlrev_b32_e32 v0, 2, v0643; GFX6-NEXT: s_waitcnt lgkmcnt(0)644; GFX6-NEXT: s_mov_b64 s[4:5], s[2:3]645; GFX6-NEXT: v_mov_b32_e32 v1, 0646; GFX6-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64647; GFX6-NEXT: v_mov_b32_e32 v3, 0x41200000648; GFX6-NEXT: s_mov_b64 s[2:3], s[6:7]649; GFX6-NEXT: s_waitcnt vmcnt(0)650; GFX6-NEXT: v_mac_f32_e32 v3, s8, v2651; GFX6-NEXT: buffer_store_dword v3, v[0:1], s[0:3], 0 addr64652; GFX6-NEXT: s_endpgm653;654; GFX8-LABEL: s_v_madak_f32:655; GFX8: ; %bb.0:656; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24657; GFX8-NEXT: s_load_dword s4, s[4:5], 0x34658; GFX8-NEXT: v_lshlrev_b32_e32 v2, 2, v0659; GFX8-NEXT: s_waitcnt lgkmcnt(0)660; GFX8-NEXT: v_mov_b32_e32 v1, s3661; GFX8-NEXT: v_add_u32_e32 v0, vcc, s2, v2662; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc663; GFX8-NEXT: flat_load_dword v3, v[0:1]664; GFX8-NEXT: v_mov_b32_e32 v1, s1665; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v2666; GFX8-NEXT: v_mov_b32_e32 v2, 0x41200000667; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc668; GFX8-NEXT: s_waitcnt vmcnt(0)669; GFX8-NEXT: v_mac_f32_e32 v2, s4, v3670; GFX8-NEXT: flat_store_dword v[0:1], v2671; GFX8-NEXT: s_endpgm672;673; GFX9-LABEL: s_v_madak_f32:674; GFX9: ; %bb.0:675; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24676; GFX9-NEXT: s_load_dword s6, s[4:5], 0x34677; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0678; GFX9-NEXT: v_mov_b32_e32 v2, 0x41200000679; GFX9-NEXT: s_waitcnt lgkmcnt(0)680; GFX9-NEXT: global_load_dword v1, v0, s[2:3]681; GFX9-NEXT: s_waitcnt vmcnt(0)682; GFX9-NEXT: v_mac_f32_e32 v2, s6, v1683; GFX9-NEXT: global_store_dword v0, v2, s[0:1]684; GFX9-NEXT: s_endpgm685;686; GFX10-MAD-LABEL: s_v_madak_f32:687; GFX10-MAD: ; %bb.0:688; GFX10-MAD-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24689; GFX10-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v0690; GFX10-MAD-NEXT: s_load_dword s4, s[4:5], 0x34691; GFX10-MAD-NEXT: s_waitcnt lgkmcnt(0)692; GFX10-MAD-NEXT: global_load_dword v1, v0, s[2:3]693; GFX10-MAD-NEXT: s_waitcnt vmcnt(0)694; GFX10-MAD-NEXT: v_madak_f32 v1, s4, v1, 0x41200000695; GFX10-MAD-NEXT: global_store_dword v0, v1, s[0:1]696; GFX10-MAD-NEXT: s_endpgm697;698; GFX11-MAD-LABEL: s_v_madak_f32:699; GFX11-MAD: ; %bb.0:700; GFX11-MAD-NEXT: s_clause 0x1701; GFX11-MAD-NEXT: s_load_b128 s[0:3], s[4:5], 0x24702; GFX11-MAD-NEXT: s_load_b32 s4, s[4:5], 0x34703; GFX11-MAD-NEXT: v_and_b32_e32 v0, 0x3ff, v0704; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)705; GFX11-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v0706; GFX11-MAD-NEXT: s_waitcnt lgkmcnt(0)707; GFX11-MAD-NEXT: global_load_b32 v1, v0, s[2:3]708; GFX11-MAD-NEXT: s_waitcnt vmcnt(0)709; GFX11-MAD-NEXT: v_mul_f32_e32 v1, s4, v1710; GFX11-MAD-NEXT: v_add_f32_e32 v1, 0x41200000, v1711; GFX11-MAD-NEXT: global_store_b32 v0, v1, s[0:1]712; GFX11-MAD-NEXT: s_endpgm713;714; GFX942-FMA-LABEL: s_v_madak_f32:715; GFX942-FMA: ; %bb.0:716; GFX942-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24717; GFX942-FMA-NEXT: s_load_dword s6, s[4:5], 0x34718; GFX942-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v0719; GFX942-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0720; GFX942-FMA-NEXT: v_mov_b32_e32 v2, 0x41200000721; GFX942-FMA-NEXT: s_waitcnt lgkmcnt(0)722; GFX942-FMA-NEXT: global_load_dword v1, v0, s[2:3]723; GFX942-FMA-NEXT: s_waitcnt vmcnt(0)724; GFX942-FMA-NEXT: v_fmac_f32_e32 v2, s6, v1725; GFX942-FMA-NEXT: global_store_dword v0, v2, s[0:1]726; GFX942-FMA-NEXT: s_endpgm727;728; GFX10-FMA-LABEL: s_v_madak_f32:729; GFX10-FMA: ; %bb.0:730; GFX10-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24731; GFX10-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0732; GFX10-FMA-NEXT: s_load_dword s4, s[4:5], 0x34733; GFX10-FMA-NEXT: s_waitcnt lgkmcnt(0)734; GFX10-FMA-NEXT: global_load_dword v1, v0, s[2:3]735; GFX10-FMA-NEXT: s_waitcnt vmcnt(0)736; GFX10-FMA-NEXT: v_fmaak_f32 v1, s4, v1, 0x41200000737; GFX10-FMA-NEXT: global_store_dword v0, v1, s[0:1]738; GFX10-FMA-NEXT: s_endpgm739;740; GFX11-FMA-LABEL: s_v_madak_f32:741; GFX11-FMA: ; %bb.0:742; GFX11-FMA-NEXT: s_load_b128 s[0:3], s[4:5], 0x24743; GFX11-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v0744; GFX11-FMA-NEXT: s_load_b32 s4, s[4:5], 0x34745; GFX11-FMA-NEXT: s_delay_alu instid0(VALU_DEP_1)746; GFX11-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0747; GFX11-FMA-NEXT: s_waitcnt lgkmcnt(0)748; GFX11-FMA-NEXT: global_load_b32 v1, v0, s[2:3]749; GFX11-FMA-NEXT: s_waitcnt vmcnt(0)750; GFX11-FMA-NEXT: v_fmaak_f32 v1, s4, v1, 0x41200000751; GFX11-FMA-NEXT: global_store_b32 v0, v1, s[0:1]752; GFX11-FMA-NEXT: s_endpgm753 %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone754 %in.a.gep = getelementptr float, ptr addrspace(1) %in.a, i32 %tid755 %out.gep = getelementptr float, ptr addrspace(1) %out, i32 %tid756 757 %a = load float, ptr addrspace(1) %in.a.gep, align 4758 759 %mul = fmul float %a, %b760 %madak = fadd float %mul, 10.0761 store float %madak, ptr addrspace(1) %out.gep, align 4762 ret void763}764 765define amdgpu_kernel void @v_s_madak_f32(ptr addrspace(1) noalias %out, float %a, ptr addrspace(1) noalias %in.b) #0 {766; GFX6-LABEL: v_s_madak_f32:767; GFX6: ; %bb.0:768; GFX6-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0xd769; GFX6-NEXT: s_mov_b32 s3, 0xf000770; GFX6-NEXT: s_mov_b32 s2, 0771; GFX6-NEXT: v_lshlrev_b32_e32 v0, 2, v0772; GFX6-NEXT: v_mov_b32_e32 v1, 0773; GFX6-NEXT: s_waitcnt lgkmcnt(0)774; GFX6-NEXT: buffer_load_dword v2, v[0:1], s[0:3], 0 addr64775; GFX6-NEXT: s_load_dword s6, s[4:5], 0xb776; GFX6-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9777; GFX6-NEXT: v_mov_b32_e32 v3, 0x41200000778; GFX6-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)779; GFX6-NEXT: v_mac_f32_e32 v3, s6, v2780; GFX6-NEXT: buffer_store_dword v3, v[0:1], s[0:3], 0 addr64781; GFX6-NEXT: s_endpgm782;783; GFX8-LABEL: v_s_madak_f32:784; GFX8: ; %bb.0:785; GFX8-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x34786; GFX8-NEXT: v_lshlrev_b32_e32 v2, 2, v0787; GFX8-NEXT: s_waitcnt lgkmcnt(0)788; GFX8-NEXT: v_mov_b32_e32 v1, s1789; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v2790; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc791; GFX8-NEXT: flat_load_dword v3, v[0:1]792; GFX8-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24793; GFX8-NEXT: s_load_dword s2, s[4:5], 0x2c794; GFX8-NEXT: s_waitcnt lgkmcnt(0)795; GFX8-NEXT: v_mov_b32_e32 v1, s1796; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v2797; GFX8-NEXT: v_mov_b32_e32 v2, 0x41200000798; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc799; GFX8-NEXT: s_waitcnt vmcnt(0)800; GFX8-NEXT: v_mac_f32_e32 v2, s2, v3801; GFX8-NEXT: flat_store_dword v[0:1], v2802; GFX8-NEXT: s_endpgm803;804; GFX9-LABEL: v_s_madak_f32:805; GFX9: ; %bb.0:806; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x34807; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v0808; GFX9-NEXT: v_mov_b32_e32 v2, 0x41200000809; GFX9-NEXT: s_waitcnt lgkmcnt(0)810; GFX9-NEXT: global_load_dword v1, v0, s[0:1]811; GFX9-NEXT: s_load_dword s2, s[4:5], 0x2c812; GFX9-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24813; GFX9-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)814; GFX9-NEXT: v_mac_f32_e32 v2, s2, v1815; GFX9-NEXT: global_store_dword v0, v2, s[0:1]816; GFX9-NEXT: s_endpgm817;818; GFX10-MAD-LABEL: v_s_madak_f32:819; GFX10-MAD: ; %bb.0:820; GFX10-MAD-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x34821; GFX10-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v0822; GFX10-MAD-NEXT: s_waitcnt lgkmcnt(0)823; GFX10-MAD-NEXT: global_load_dword v1, v0, s[0:1]824; GFX10-MAD-NEXT: s_clause 0x1825; GFX10-MAD-NEXT: s_load_dword s2, s[4:5], 0x2c826; GFX10-MAD-NEXT: s_waitcnt_depctr depctr_vm_vsrc(0)827; GFX10-MAD-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24828; GFX10-MAD-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)829; GFX10-MAD-NEXT: v_madak_f32 v1, s2, v1, 0x41200000830; GFX10-MAD-NEXT: global_store_dword v0, v1, s[0:1]831; GFX10-MAD-NEXT: s_endpgm832;833; GFX11-MAD-LABEL: v_s_madak_f32:834; GFX11-MAD: ; %bb.0:835; GFX11-MAD-NEXT: s_load_b64 s[0:1], s[4:5], 0x34836; GFX11-MAD-NEXT: v_and_b32_e32 v0, 0x3ff, v0837; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1)838; GFX11-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v0839; GFX11-MAD-NEXT: s_waitcnt lgkmcnt(0)840; GFX11-MAD-NEXT: global_load_b32 v1, v0, s[0:1]841; GFX11-MAD-NEXT: s_clause 0x1842; GFX11-MAD-NEXT: s_load_b32 s2, s[4:5], 0x2c843; GFX11-MAD-NEXT: s_load_b64 s[0:1], s[4:5], 0x24844; GFX11-MAD-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)845; GFX11-MAD-NEXT: v_mul_f32_e32 v1, s2, v1846; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1)847; GFX11-MAD-NEXT: v_add_f32_e32 v1, 0x41200000, v1848; GFX11-MAD-NEXT: global_store_b32 v0, v1, s[0:1]849; GFX11-MAD-NEXT: s_endpgm850;851; GFX942-FMA-LABEL: v_s_madak_f32:852; GFX942-FMA: ; %bb.0:853; GFX942-FMA-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x34854; GFX942-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v0855; GFX942-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0856; GFX942-FMA-NEXT: v_mov_b32_e32 v2, 0x41200000857; GFX942-FMA-NEXT: s_waitcnt lgkmcnt(0)858; GFX942-FMA-NEXT: global_load_dword v1, v0, s[0:1]859; GFX942-FMA-NEXT: s_load_dword s2, s[4:5], 0x2c860; GFX942-FMA-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24861; GFX942-FMA-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)862; GFX942-FMA-NEXT: v_fmac_f32_e32 v2, s2, v1863; GFX942-FMA-NEXT: global_store_dword v0, v2, s[0:1]864; GFX942-FMA-NEXT: s_endpgm865;866; GFX10-FMA-LABEL: v_s_madak_f32:867; GFX10-FMA: ; %bb.0:868; GFX10-FMA-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x34869; GFX10-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0870; GFX10-FMA-NEXT: s_waitcnt lgkmcnt(0)871; GFX10-FMA-NEXT: global_load_dword v1, v0, s[0:1]872; GFX10-FMA-NEXT: s_clause 0x1873; GFX10-FMA-NEXT: s_load_dword s2, s[4:5], 0x2c874; GFX10-FMA-NEXT: s_waitcnt_depctr depctr_vm_vsrc(0)875; GFX10-FMA-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24876; GFX10-FMA-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)877; GFX10-FMA-NEXT: v_fmaak_f32 v1, s2, v1, 0x41200000878; GFX10-FMA-NEXT: global_store_dword v0, v1, s[0:1]879; GFX10-FMA-NEXT: s_endpgm880;881; GFX11-FMA-LABEL: v_s_madak_f32:882; GFX11-FMA: ; %bb.0:883; GFX11-FMA-NEXT: s_load_b64 s[0:1], s[4:5], 0x34884; GFX11-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v0885; GFX11-FMA-NEXT: s_delay_alu instid0(VALU_DEP_1)886; GFX11-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v0887; GFX11-FMA-NEXT: s_waitcnt lgkmcnt(0)888; GFX11-FMA-NEXT: global_load_b32 v1, v0, s[0:1]889; GFX11-FMA-NEXT: s_clause 0x1890; GFX11-FMA-NEXT: s_load_b32 s2, s[4:5], 0x2c891; GFX11-FMA-NEXT: s_load_b64 s[0:1], s[4:5], 0x24892; GFX11-FMA-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)893; GFX11-FMA-NEXT: v_fmaak_f32 v1, s2, v1, 0x41200000894; GFX11-FMA-NEXT: global_store_b32 v0, v1, s[0:1]895; GFX11-FMA-NEXT: s_endpgm896 %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone897 %in.b.gep = getelementptr float, ptr addrspace(1) %in.b, i32 %tid898 %out.gep = getelementptr float, ptr addrspace(1) %out, i32 %tid899 900 %b = load float, ptr addrspace(1) %in.b.gep, align 4901 902 %mul = fmul float %a, %b903 %madak = fadd float %mul, 10.0904 store float %madak, ptr addrspace(1) %out.gep, align 4905 ret void906}907 908define amdgpu_kernel void @s_s_madak_f32(ptr addrspace(1) %out, float %a, float %b) #0 {909; GFX6-LABEL: s_s_madak_f32:910; GFX6: ; %bb.0:911; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9912; GFX6-NEXT: v_mov_b32_e32 v0, 0x41200000913; GFX6-NEXT: s_mov_b32 s7, 0xf000914; GFX6-NEXT: s_mov_b32 s6, -1915; GFX6-NEXT: s_waitcnt lgkmcnt(0)916; GFX6-NEXT: v_mov_b32_e32 v1, s3917; GFX6-NEXT: s_mov_b32 s4, s0918; GFX6-NEXT: s_mov_b32 s5, s1919; GFX6-NEXT: v_mac_f32_e32 v0, s2, v1920; GFX6-NEXT: buffer_store_dword v0, off, s[4:7], 0921; GFX6-NEXT: s_endpgm922;923; GFX8-LABEL: s_s_madak_f32:924; GFX8: ; %bb.0:925; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24926; GFX8-NEXT: v_mov_b32_e32 v2, 0x41200000927; GFX8-NEXT: s_waitcnt lgkmcnt(0)928; GFX8-NEXT: v_mov_b32_e32 v0, s3929; GFX8-NEXT: v_mac_f32_e32 v2, s2, v0930; GFX8-NEXT: v_mov_b32_e32 v0, s0931; GFX8-NEXT: v_mov_b32_e32 v1, s1932; GFX8-NEXT: flat_store_dword v[0:1], v2933; GFX8-NEXT: s_endpgm934;935; GFX9-LABEL: s_s_madak_f32:936; GFX9: ; %bb.0:937; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24938; GFX9-NEXT: v_mov_b32_e32 v1, 0x41200000939; GFX9-NEXT: v_mov_b32_e32 v0, 0940; GFX9-NEXT: s_waitcnt lgkmcnt(0)941; GFX9-NEXT: v_mov_b32_e32 v2, s3942; GFX9-NEXT: v_mac_f32_e32 v1, s2, v2943; GFX9-NEXT: global_store_dword v0, v1, s[0:1]944; GFX9-NEXT: s_endpgm945;946; GFX10-MAD-LABEL: s_s_madak_f32:947; GFX10-MAD: ; %bb.0:948; GFX10-MAD-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24949; GFX10-MAD-NEXT: v_mov_b32_e32 v1, 0950; GFX10-MAD-NEXT: s_waitcnt lgkmcnt(0)951; GFX10-MAD-NEXT: v_mov_b32_e32 v0, s3952; GFX10-MAD-NEXT: v_madak_f32 v0, s2, v0, 0x41200000953; GFX10-MAD-NEXT: global_store_dword v1, v0, s[0:1]954; GFX10-MAD-NEXT: s_endpgm955;956; GFX11-MAD-LABEL: s_s_madak_f32:957; GFX11-MAD: ; %bb.0:958; GFX11-MAD-NEXT: s_load_b128 s[0:3], s[4:5], 0x24959; GFX11-MAD-NEXT: s_waitcnt lgkmcnt(0)960; GFX11-MAD-NEXT: v_mul_f32_e64 v0, s2, s3961; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1)962; GFX11-MAD-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_add_f32 v0, 0x41200000, v0963; GFX11-MAD-NEXT: global_store_b32 v1, v0, s[0:1]964; GFX11-MAD-NEXT: s_endpgm965;966; GFX942-FMA-LABEL: s_s_madak_f32:967; GFX942-FMA: ; %bb.0:968; GFX942-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24969; GFX942-FMA-NEXT: v_mov_b32_e32 v1, 0x41200000970; GFX942-FMA-NEXT: v_mov_b32_e32 v0, 0971; GFX942-FMA-NEXT: s_waitcnt lgkmcnt(0)972; GFX942-FMA-NEXT: v_mov_b32_e32 v2, s3973; GFX942-FMA-NEXT: v_fmac_f32_e32 v1, s2, v2974; GFX942-FMA-NEXT: global_store_dword v0, v1, s[0:1]975; GFX942-FMA-NEXT: s_endpgm976;977; GFX10-FMA-LABEL: s_s_madak_f32:978; GFX10-FMA: ; %bb.0:979; GFX10-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24980; GFX10-FMA-NEXT: v_mov_b32_e32 v1, 0981; GFX10-FMA-NEXT: s_waitcnt lgkmcnt(0)982; GFX10-FMA-NEXT: v_mov_b32_e32 v0, s3983; GFX10-FMA-NEXT: v_fmaak_f32 v0, s2, v0, 0x41200000984; GFX10-FMA-NEXT: global_store_dword v1, v0, s[0:1]985; GFX10-FMA-NEXT: s_endpgm986;987; GFX11-FMA-LABEL: s_s_madak_f32:988; GFX11-FMA: ; %bb.0:989; GFX11-FMA-NEXT: s_load_b128 s[0:3], s[4:5], 0x24990; GFX11-FMA-NEXT: s_waitcnt lgkmcnt(0)991; GFX11-FMA-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s3992; GFX11-FMA-NEXT: s_delay_alu instid0(VALU_DEP_1)993; GFX11-FMA-NEXT: v_fmaak_f32 v0, s2, v0, 0x41200000994; GFX11-FMA-NEXT: global_store_b32 v1, v0, s[0:1]995; GFX11-FMA-NEXT: s_endpgm996 %mul = fmul float %a, %b997 %madak = fadd float %mul, 10.0998 store float %madak, ptr addrspace(1) %out, align 4999 ret void1000}1001 1002define amdgpu_kernel void @no_madak_src0_modifier_f32(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in.a, ptr addrspace(1) noalias %in.b) #0 {1003; GFX6-LABEL: no_madak_src0_modifier_f32:1004; GFX6: ; %bb.0:1005; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91006; GFX6-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0xd1007; GFX6-NEXT: s_mov_b32 s7, 0xf0001008; GFX6-NEXT: s_mov_b32 s6, 01009; GFX6-NEXT: v_lshlrev_b32_e32 v0, 2, v01010; GFX6-NEXT: s_waitcnt lgkmcnt(0)1011; GFX6-NEXT: s_mov_b64 s[4:5], s[2:3]1012; GFX6-NEXT: v_mov_b32_e32 v1, 01013; GFX6-NEXT: s_mov_b64 s[10:11], s[6:7]1014; GFX6-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr641015; GFX6-NEXT: buffer_load_dword v3, v[0:1], s[8:11], 0 addr641016; GFX6-NEXT: s_mov_b32 s4, 0x412000001017; GFX6-NEXT: s_mov_b64 s[2:3], s[6:7]1018; GFX6-NEXT: s_waitcnt vmcnt(0)1019; GFX6-NEXT: v_mad_f32 v2, |v2|, v3, s41020; GFX6-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr641021; GFX6-NEXT: s_endpgm1022;1023; GFX8-LABEL: no_madak_src0_modifier_f32:1024; GFX8: ; %bb.0:1025; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241026; GFX8-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x341027; GFX8-NEXT: v_lshlrev_b32_e32 v4, 2, v01028; GFX8-NEXT: s_waitcnt lgkmcnt(0)1029; GFX8-NEXT: v_mov_b32_e32 v1, s31030; GFX8-NEXT: v_add_u32_e32 v0, vcc, s2, v41031; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1032; GFX8-NEXT: v_mov_b32_e32 v3, s51033; GFX8-NEXT: v_add_u32_e32 v2, vcc, s4, v41034; GFX8-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc1035; GFX8-NEXT: flat_load_dword v5, v[0:1]1036; GFX8-NEXT: flat_load_dword v2, v[2:3]1037; GFX8-NEXT: v_mov_b32_e32 v1, s11038; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v41039; GFX8-NEXT: s_mov_b32 s0, 0x412000001040; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1041; GFX8-NEXT: s_waitcnt vmcnt(0)1042; GFX8-NEXT: v_mad_f32 v2, |v5|, v2, s01043; GFX8-NEXT: flat_store_dword v[0:1], v21044; GFX8-NEXT: s_endpgm1045;1046; GFX9-LABEL: no_madak_src0_modifier_f32:1047; GFX9: ; %bb.0:1048; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241049; GFX9-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341050; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v01051; GFX9-NEXT: s_waitcnt lgkmcnt(0)1052; GFX9-NEXT: global_load_dword v1, v0, s[2:3]1053; GFX9-NEXT: global_load_dword v2, v0, s[6:7]1054; GFX9-NEXT: s_mov_b32 s2, 0x412000001055; GFX9-NEXT: s_waitcnt vmcnt(0)1056; GFX9-NEXT: v_mad_f32 v1, |v1|, v2, s21057; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1058; GFX9-NEXT: s_endpgm1059;1060; GFX10-MAD-LABEL: no_madak_src0_modifier_f32:1061; GFX10-MAD: ; %bb.0:1062; GFX10-MAD-NEXT: s_clause 0x11063; GFX10-MAD-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241064; GFX10-MAD-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341065; GFX10-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v01066; GFX10-MAD-NEXT: s_waitcnt lgkmcnt(0)1067; GFX10-MAD-NEXT: s_clause 0x11068; GFX10-MAD-NEXT: global_load_dword v1, v0, s[2:3]1069; GFX10-MAD-NEXT: global_load_dword v2, v0, s[6:7]1070; GFX10-MAD-NEXT: s_waitcnt vmcnt(0)1071; GFX10-MAD-NEXT: v_mad_f32 v1, |v1|, v2, 0x412000001072; GFX10-MAD-NEXT: global_store_dword v0, v1, s[0:1]1073; GFX10-MAD-NEXT: s_endpgm1074;1075; GFX11-MAD-LABEL: no_madak_src0_modifier_f32:1076; GFX11-MAD: ; %bb.0:1077; GFX11-MAD-NEXT: s_clause 0x11078; GFX11-MAD-NEXT: s_load_b128 s[0:3], s[4:5], 0x241079; GFX11-MAD-NEXT: s_load_b64 s[4:5], s[4:5], 0x341080; GFX11-MAD-NEXT: v_and_b32_e32 v0, 0x3ff, v01081; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1)1082; GFX11-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v01083; GFX11-MAD-NEXT: s_waitcnt lgkmcnt(0)1084; GFX11-MAD-NEXT: s_clause 0x11085; GFX11-MAD-NEXT: global_load_b32 v1, v0, s[2:3]1086; GFX11-MAD-NEXT: global_load_b32 v2, v0, s[4:5]1087; GFX11-MAD-NEXT: s_waitcnt vmcnt(0)1088; GFX11-MAD-NEXT: v_mul_f32_e64 v1, |v1|, v21089; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1)1090; GFX11-MAD-NEXT: v_add_f32_e32 v1, 0x41200000, v11091; GFX11-MAD-NEXT: global_store_b32 v0, v1, s[0:1]1092; GFX11-MAD-NEXT: s_endpgm1093;1094; GFX942-FMA-LABEL: no_madak_src0_modifier_f32:1095; GFX942-FMA: ; %bb.0:1096; GFX942-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241097; GFX942-FMA-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341098; GFX942-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v01099; GFX942-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v01100; GFX942-FMA-NEXT: s_waitcnt lgkmcnt(0)1101; GFX942-FMA-NEXT: global_load_dword v1, v0, s[2:3]1102; GFX942-FMA-NEXT: global_load_dword v2, v0, s[6:7]1103; GFX942-FMA-NEXT: s_mov_b32 s2, 0x412000001104; GFX942-FMA-NEXT: s_waitcnt vmcnt(0)1105; GFX942-FMA-NEXT: v_fma_f32 v1, |v1|, v2, s21106; GFX942-FMA-NEXT: global_store_dword v0, v1, s[0:1]1107; GFX942-FMA-NEXT: s_endpgm1108;1109; GFX10-FMA-LABEL: no_madak_src0_modifier_f32:1110; GFX10-FMA: ; %bb.0:1111; GFX10-FMA-NEXT: s_clause 0x11112; GFX10-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241113; GFX10-FMA-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341114; GFX10-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v01115; GFX10-FMA-NEXT: s_waitcnt lgkmcnt(0)1116; GFX10-FMA-NEXT: s_clause 0x11117; GFX10-FMA-NEXT: global_load_dword v1, v0, s[2:3]1118; GFX10-FMA-NEXT: global_load_dword v2, v0, s[6:7]1119; GFX10-FMA-NEXT: s_waitcnt vmcnt(0)1120; GFX10-FMA-NEXT: v_fma_f32 v1, |v1|, v2, 0x412000001121; GFX10-FMA-NEXT: global_store_dword v0, v1, s[0:1]1122; GFX10-FMA-NEXT: s_endpgm1123;1124; GFX11-FMA-LABEL: no_madak_src0_modifier_f32:1125; GFX11-FMA: ; %bb.0:1126; GFX11-FMA-NEXT: s_clause 0x11127; GFX11-FMA-NEXT: s_load_b128 s[0:3], s[4:5], 0x241128; GFX11-FMA-NEXT: s_load_b64 s[4:5], s[4:5], 0x341129; GFX11-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v01130; GFX11-FMA-NEXT: s_delay_alu instid0(VALU_DEP_1)1131; GFX11-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v01132; GFX11-FMA-NEXT: s_waitcnt lgkmcnt(0)1133; GFX11-FMA-NEXT: s_clause 0x11134; GFX11-FMA-NEXT: global_load_b32 v1, v0, s[2:3]1135; GFX11-FMA-NEXT: global_load_b32 v2, v0, s[4:5]1136; GFX11-FMA-NEXT: s_waitcnt vmcnt(0)1137; GFX11-FMA-NEXT: v_fma_f32 v1, |v1|, v2, 0x412000001138; GFX11-FMA-NEXT: global_store_b32 v0, v1, s[0:1]1139; GFX11-FMA-NEXT: s_endpgm1140 %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone1141 %in.a.gep = getelementptr float, ptr addrspace(1) %in.a, i32 %tid1142 %in.b.gep = getelementptr float, ptr addrspace(1) %in.b, i32 %tid1143 %out.gep = getelementptr float, ptr addrspace(1) %out, i32 %tid1144 1145 %a = load float, ptr addrspace(1) %in.a.gep, align 41146 %b = load float, ptr addrspace(1) %in.b.gep, align 41147 1148 %a.fabs = call float @llvm.fabs.f32(float %a) nounwind readnone1149 1150 %mul = fmul float %a.fabs, %b1151 %madak = fadd float %mul, 10.01152 store float %madak, ptr addrspace(1) %out.gep, align 41153 ret void1154}1155 1156define amdgpu_kernel void @no_madak_src1_modifier_f32(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in.a, ptr addrspace(1) noalias %in.b) #0 {1157; GFX6-LABEL: no_madak_src1_modifier_f32:1158; GFX6: ; %bb.0:1159; GFX6-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91160; GFX6-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0xd1161; GFX6-NEXT: s_mov_b32 s7, 0xf0001162; GFX6-NEXT: s_mov_b32 s6, 01163; GFX6-NEXT: v_lshlrev_b32_e32 v0, 2, v01164; GFX6-NEXT: s_waitcnt lgkmcnt(0)1165; GFX6-NEXT: s_mov_b64 s[4:5], s[2:3]1166; GFX6-NEXT: v_mov_b32_e32 v1, 01167; GFX6-NEXT: s_mov_b64 s[10:11], s[6:7]1168; GFX6-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr641169; GFX6-NEXT: buffer_load_dword v3, v[0:1], s[8:11], 0 addr641170; GFX6-NEXT: s_mov_b32 s4, 0x412000001171; GFX6-NEXT: s_mov_b64 s[2:3], s[6:7]1172; GFX6-NEXT: s_waitcnt vmcnt(0)1173; GFX6-NEXT: v_mad_f32 v2, v2, |v3|, s41174; GFX6-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr641175; GFX6-NEXT: s_endpgm1176;1177; GFX8-LABEL: no_madak_src1_modifier_f32:1178; GFX8: ; %bb.0:1179; GFX8-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241180; GFX8-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x341181; GFX8-NEXT: v_lshlrev_b32_e32 v4, 2, v01182; GFX8-NEXT: s_waitcnt lgkmcnt(0)1183; GFX8-NEXT: v_mov_b32_e32 v1, s31184; GFX8-NEXT: v_add_u32_e32 v0, vcc, s2, v41185; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1186; GFX8-NEXT: v_mov_b32_e32 v3, s51187; GFX8-NEXT: v_add_u32_e32 v2, vcc, s4, v41188; GFX8-NEXT: v_addc_u32_e32 v3, vcc, 0, v3, vcc1189; GFX8-NEXT: flat_load_dword v5, v[0:1]1190; GFX8-NEXT: flat_load_dword v2, v[2:3]1191; GFX8-NEXT: v_mov_b32_e32 v1, s11192; GFX8-NEXT: v_add_u32_e32 v0, vcc, s0, v41193; GFX8-NEXT: s_mov_b32 s0, 0x412000001194; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1195; GFX8-NEXT: s_waitcnt vmcnt(0)1196; GFX8-NEXT: v_mad_f32 v2, v5, |v2|, s01197; GFX8-NEXT: flat_store_dword v[0:1], v21198; GFX8-NEXT: s_endpgm1199;1200; GFX9-LABEL: no_madak_src1_modifier_f32:1201; GFX9: ; %bb.0:1202; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241203; GFX9-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341204; GFX9-NEXT: v_lshlrev_b32_e32 v0, 2, v01205; GFX9-NEXT: s_waitcnt lgkmcnt(0)1206; GFX9-NEXT: global_load_dword v1, v0, s[2:3]1207; GFX9-NEXT: global_load_dword v2, v0, s[6:7]1208; GFX9-NEXT: s_mov_b32 s2, 0x412000001209; GFX9-NEXT: s_waitcnt vmcnt(0)1210; GFX9-NEXT: v_mad_f32 v1, v1, |v2|, s21211; GFX9-NEXT: global_store_dword v0, v1, s[0:1]1212; GFX9-NEXT: s_endpgm1213;1214; GFX10-MAD-LABEL: no_madak_src1_modifier_f32:1215; GFX10-MAD: ; %bb.0:1216; GFX10-MAD-NEXT: s_clause 0x11217; GFX10-MAD-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241218; GFX10-MAD-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341219; GFX10-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v01220; GFX10-MAD-NEXT: s_waitcnt lgkmcnt(0)1221; GFX10-MAD-NEXT: s_clause 0x11222; GFX10-MAD-NEXT: global_load_dword v1, v0, s[2:3]1223; GFX10-MAD-NEXT: global_load_dword v2, v0, s[6:7]1224; GFX10-MAD-NEXT: s_waitcnt vmcnt(0)1225; GFX10-MAD-NEXT: v_mad_f32 v1, v1, |v2|, 0x412000001226; GFX10-MAD-NEXT: global_store_dword v0, v1, s[0:1]1227; GFX10-MAD-NEXT: s_endpgm1228;1229; GFX11-MAD-LABEL: no_madak_src1_modifier_f32:1230; GFX11-MAD: ; %bb.0:1231; GFX11-MAD-NEXT: s_clause 0x11232; GFX11-MAD-NEXT: s_load_b128 s[0:3], s[4:5], 0x241233; GFX11-MAD-NEXT: s_load_b64 s[4:5], s[4:5], 0x341234; GFX11-MAD-NEXT: v_and_b32_e32 v0, 0x3ff, v01235; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1)1236; GFX11-MAD-NEXT: v_lshlrev_b32_e32 v0, 2, v01237; GFX11-MAD-NEXT: s_waitcnt lgkmcnt(0)1238; GFX11-MAD-NEXT: s_clause 0x11239; GFX11-MAD-NEXT: global_load_b32 v1, v0, s[2:3]1240; GFX11-MAD-NEXT: global_load_b32 v2, v0, s[4:5]1241; GFX11-MAD-NEXT: s_waitcnt vmcnt(0)1242; GFX11-MAD-NEXT: v_mul_f32_e64 v1, v1, |v2|1243; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1)1244; GFX11-MAD-NEXT: v_add_f32_e32 v1, 0x41200000, v11245; GFX11-MAD-NEXT: global_store_b32 v0, v1, s[0:1]1246; GFX11-MAD-NEXT: s_endpgm1247;1248; GFX942-FMA-LABEL: no_madak_src1_modifier_f32:1249; GFX942-FMA: ; %bb.0:1250; GFX942-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241251; GFX942-FMA-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341252; GFX942-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v01253; GFX942-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v01254; GFX942-FMA-NEXT: s_waitcnt lgkmcnt(0)1255; GFX942-FMA-NEXT: global_load_dword v1, v0, s[2:3]1256; GFX942-FMA-NEXT: global_load_dword v2, v0, s[6:7]1257; GFX942-FMA-NEXT: s_mov_b32 s2, 0x412000001258; GFX942-FMA-NEXT: s_waitcnt vmcnt(0)1259; GFX942-FMA-NEXT: v_fma_f32 v1, v1, |v2|, s21260; GFX942-FMA-NEXT: global_store_dword v0, v1, s[0:1]1261; GFX942-FMA-NEXT: s_endpgm1262;1263; GFX10-FMA-LABEL: no_madak_src1_modifier_f32:1264; GFX10-FMA: ; %bb.0:1265; GFX10-FMA-NEXT: s_clause 0x11266; GFX10-FMA-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241267; GFX10-FMA-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341268; GFX10-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v01269; GFX10-FMA-NEXT: s_waitcnt lgkmcnt(0)1270; GFX10-FMA-NEXT: s_clause 0x11271; GFX10-FMA-NEXT: global_load_dword v1, v0, s[2:3]1272; GFX10-FMA-NEXT: global_load_dword v2, v0, s[6:7]1273; GFX10-FMA-NEXT: s_waitcnt vmcnt(0)1274; GFX10-FMA-NEXT: v_fma_f32 v1, v1, |v2|, 0x412000001275; GFX10-FMA-NEXT: global_store_dword v0, v1, s[0:1]1276; GFX10-FMA-NEXT: s_endpgm1277;1278; GFX11-FMA-LABEL: no_madak_src1_modifier_f32:1279; GFX11-FMA: ; %bb.0:1280; GFX11-FMA-NEXT: s_clause 0x11281; GFX11-FMA-NEXT: s_load_b128 s[0:3], s[4:5], 0x241282; GFX11-FMA-NEXT: s_load_b64 s[4:5], s[4:5], 0x341283; GFX11-FMA-NEXT: v_and_b32_e32 v0, 0x3ff, v01284; GFX11-FMA-NEXT: s_delay_alu instid0(VALU_DEP_1)1285; GFX11-FMA-NEXT: v_lshlrev_b32_e32 v0, 2, v01286; GFX11-FMA-NEXT: s_waitcnt lgkmcnt(0)1287; GFX11-FMA-NEXT: s_clause 0x11288; GFX11-FMA-NEXT: global_load_b32 v1, v0, s[2:3]1289; GFX11-FMA-NEXT: global_load_b32 v2, v0, s[4:5]1290; GFX11-FMA-NEXT: s_waitcnt vmcnt(0)1291; GFX11-FMA-NEXT: v_fma_f32 v1, v1, |v2|, 0x412000001292; GFX11-FMA-NEXT: global_store_b32 v0, v1, s[0:1]1293; GFX11-FMA-NEXT: s_endpgm1294 %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone1295 %in.a.gep = getelementptr float, ptr addrspace(1) %in.a, i32 %tid1296 %in.b.gep = getelementptr float, ptr addrspace(1) %in.b, i32 %tid1297 %out.gep = getelementptr float, ptr addrspace(1) %out, i32 %tid1298 1299 %a = load float, ptr addrspace(1) %in.a.gep, align 41300 %b = load float, ptr addrspace(1) %in.b.gep, align 41301 1302 %b.fabs = call float @llvm.fabs.f32(float %b) nounwind readnone1303 1304 %mul = fmul float %a, %b.fabs1305 %madak = fadd float %mul, 10.01306 store float %madak, ptr addrspace(1) %out.gep, align 41307 ret void1308}1309 1310; SIFoldOperands should not fold the SGPR copy into the instruction before GFX101311; because the implicit immediate already uses the constant bus.1312; On GFX10+ we can use two scalar operands.1313define amdgpu_kernel void @madak_constant_bus_violation(i32 %arg1, [8 x i32], float %sgpr0, float %sgpr1) #0 {1314; GFX6-LABEL: madak_constant_bus_violation:1315; GFX6: ; %bb.0: ; %bb1316; GFX6-NEXT: s_load_dword s0, s[4:5], 0x91317; GFX6-NEXT: s_waitcnt lgkmcnt(0)1318; GFX6-NEXT: s_cmp_lg_u32 s0, 01319; GFX6-NEXT: s_cbranch_scc1 .LBB9_21320; GFX6-NEXT: ; %bb.1: ; %bb31321; GFX6-NEXT: s_mov_b32 s3, 0xf0001322; GFX6-NEXT: s_mov_b32 s2, -11323; GFX6-NEXT: v_mov_b32_e32 v0, 01324; GFX6-NEXT: buffer_store_dword v0, off, s[0:3], 01325; GFX6-NEXT: s_waitcnt vmcnt(0)1326; GFX6-NEXT: .LBB9_2: ; %bb41327; GFX6-NEXT: s_mov_b32 s3, 0xf0001328; GFX6-NEXT: s_mov_b32 s2, -11329; GFX6-NEXT: s_waitcnt expcnt(0)1330; GFX6-NEXT: buffer_load_dword v0, off, s[0:3], 0 glc1331; GFX6-NEXT: s_waitcnt vmcnt(0)1332; GFX6-NEXT: s_load_dword s0, s[4:5], 0x121333; GFX6-NEXT: v_mov_b32_e32 v1, 0x422800001334; GFX6-NEXT: s_waitcnt lgkmcnt(0)1335; GFX6-NEXT: v_mac_f32_e64 v1, s0, 0.51336; GFX6-NEXT: v_mul_f32_e32 v0, v1, v01337; GFX6-NEXT: buffer_store_dword v0, off, s[0:3], 01338; GFX6-NEXT: s_waitcnt vmcnt(0)1339; GFX6-NEXT: s_endpgm1340;1341; GFX8-LABEL: madak_constant_bus_violation:1342; GFX8: ; %bb.0: ; %bb1343; GFX8-NEXT: s_load_dword s0, s[4:5], 0x241344; GFX8-NEXT: s_waitcnt lgkmcnt(0)1345; GFX8-NEXT: s_cmp_lg_u32 s0, 01346; GFX8-NEXT: s_cbranch_scc1 .LBB9_21347; GFX8-NEXT: ; %bb.1: ; %bb31348; GFX8-NEXT: v_mov_b32_e32 v0, 01349; GFX8-NEXT: flat_store_dword v[0:1], v01350; GFX8-NEXT: s_waitcnt vmcnt(0)1351; GFX8-NEXT: .LBB9_2: ; %bb41352; GFX8-NEXT: flat_load_dword v0, v[0:1] glc1353; GFX8-NEXT: s_waitcnt vmcnt(0)1354; GFX8-NEXT: s_load_dword s0, s[4:5], 0x481355; GFX8-NEXT: v_mov_b32_e32 v1, 0x422800001356; GFX8-NEXT: s_waitcnt lgkmcnt(0)1357; GFX8-NEXT: v_mac_f32_e64 v1, s0, 0.51358; GFX8-NEXT: v_mul_f32_e32 v0, v1, v01359; GFX8-NEXT: flat_store_dword v[0:1], v01360; GFX8-NEXT: s_waitcnt vmcnt(0)1361; GFX8-NEXT: s_endpgm1362;1363; GFX9-LABEL: madak_constant_bus_violation:1364; GFX9: ; %bb.0: ; %bb1365; GFX9-NEXT: s_load_dword s0, s[4:5], 0x241366; GFX9-NEXT: s_waitcnt lgkmcnt(0)1367; GFX9-NEXT: s_cmp_lg_u32 s0, 01368; GFX9-NEXT: s_cbranch_scc1 .LBB9_21369; GFX9-NEXT: ; %bb.1: ; %bb31370; GFX9-NEXT: v_mov_b32_e32 v0, 01371; GFX9-NEXT: global_store_dword v[0:1], v0, off1372; GFX9-NEXT: s_waitcnt vmcnt(0)1373; GFX9-NEXT: .LBB9_2: ; %bb41374; GFX9-NEXT: global_load_dword v0, v[0:1], off glc1375; GFX9-NEXT: s_waitcnt vmcnt(0)1376; GFX9-NEXT: s_load_dword s0, s[4:5], 0x481377; GFX9-NEXT: v_mov_b32_e32 v1, 0x422800001378; GFX9-NEXT: s_waitcnt lgkmcnt(0)1379; GFX9-NEXT: v_mac_f32_e64 v1, s0, 0.51380; GFX9-NEXT: v_mul_f32_e32 v0, v1, v01381; GFX9-NEXT: global_store_dword v[0:1], v0, off1382; GFX9-NEXT: s_waitcnt vmcnt(0)1383; GFX9-NEXT: s_endpgm1384;1385; GFX10-MAD-LABEL: madak_constant_bus_violation:1386; GFX10-MAD: ; %bb.0: ; %bb1387; GFX10-MAD-NEXT: s_load_dword s0, s[4:5], 0x241388; GFX10-MAD-NEXT: s_waitcnt lgkmcnt(0)1389; GFX10-MAD-NEXT: s_cmp_lg_u32 s0, 01390; GFX10-MAD-NEXT: s_cbranch_scc1 .LBB9_21391; GFX10-MAD-NEXT: ; %bb.1: ; %bb31392; GFX10-MAD-NEXT: v_mov_b32_e32 v0, 01393; GFX10-MAD-NEXT: global_store_dword v[0:1], v0, off1394; GFX10-MAD-NEXT: s_waitcnt_vscnt null, 0x01395; GFX10-MAD-NEXT: .LBB9_2: ; %bb41396; GFX10-MAD-NEXT: global_load_dword v0, v[0:1], off glc dlc1397; GFX10-MAD-NEXT: s_waitcnt vmcnt(0)1398; GFX10-MAD-NEXT: s_load_dword s0, s[4:5], 0x481399; GFX10-MAD-NEXT: v_mov_b32_e32 v1, 0.51400; GFX10-MAD-NEXT: s_waitcnt lgkmcnt(0)1401; GFX10-MAD-NEXT: v_madak_f32 v1, s0, v1, 0x422800001402; GFX10-MAD-NEXT: v_mul_f32_e32 v0, v1, v01403; GFX10-MAD-NEXT: global_store_dword v[0:1], v0, off1404; GFX10-MAD-NEXT: s_waitcnt_vscnt null, 0x01405; GFX10-MAD-NEXT: s_endpgm1406;1407; GFX11-MAD-LABEL: madak_constant_bus_violation:1408; GFX11-MAD: ; %bb.0: ; %bb1409; GFX11-MAD-NEXT: s_load_b32 s0, s[4:5], 0x241410; GFX11-MAD-NEXT: s_waitcnt lgkmcnt(0)1411; GFX11-MAD-NEXT: s_cmp_lg_u32 s0, 01412; GFX11-MAD-NEXT: s_cbranch_scc1 .LBB9_21413; GFX11-MAD-NEXT: ; %bb.1: ; %bb31414; GFX11-MAD-NEXT: v_mov_b32_e32 v0, 01415; GFX11-MAD-NEXT: global_store_b32 v[0:1], v0, off dlc1416; GFX11-MAD-NEXT: s_waitcnt_vscnt null, 0x01417; GFX11-MAD-NEXT: .LBB9_2: ; %bb41418; GFX11-MAD-NEXT: global_load_b32 v0, v[0:1], off glc dlc1419; GFX11-MAD-NEXT: s_waitcnt vmcnt(0)1420; GFX11-MAD-NEXT: s_load_b32 s0, s[4:5], 0x481421; GFX11-MAD-NEXT: s_waitcnt lgkmcnt(0)1422; GFX11-MAD-NEXT: v_mul_f32_e64 v1, s0, 0.51423; GFX11-MAD-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1424; GFX11-MAD-NEXT: v_add_f32_e32 v1, 0x42280000, v11425; GFX11-MAD-NEXT: v_mul_f32_e32 v0, v1, v01426; GFX11-MAD-NEXT: global_store_b32 v[0:1], v0, off dlc1427; GFX11-MAD-NEXT: s_waitcnt_vscnt null, 0x01428; GFX11-MAD-NEXT: s_endpgm1429;1430; GFX942-FMA-LABEL: madak_constant_bus_violation:1431; GFX942-FMA: ; %bb.0: ; %bb1432; GFX942-FMA-NEXT: s_load_dword s0, s[4:5], 0x241433; GFX942-FMA-NEXT: s_waitcnt lgkmcnt(0)1434; GFX942-FMA-NEXT: s_cmp_lg_u32 s0, 01435; GFX942-FMA-NEXT: s_cbranch_scc1 .LBB9_21436; GFX942-FMA-NEXT: ; %bb.1: ; %bb31437; GFX942-FMA-NEXT: v_mov_b32_e32 v0, 01438; GFX942-FMA-NEXT: global_store_dword v[0:1], v0, off sc0 sc11439; GFX942-FMA-NEXT: s_waitcnt vmcnt(0)1440; GFX942-FMA-NEXT: .LBB9_2: ; %bb41441; GFX942-FMA-NEXT: global_load_dword v0, v[0:1], off sc0 sc11442; GFX942-FMA-NEXT: s_waitcnt vmcnt(0)1443; GFX942-FMA-NEXT: s_load_dword s0, s[4:5], 0x481444; GFX942-FMA-NEXT: v_mov_b32_e32 v1, 0x422800001445; GFX942-FMA-NEXT: s_waitcnt lgkmcnt(0)1446; GFX942-FMA-NEXT: v_fmac_f32_e64 v1, s0, 0.51447; GFX942-FMA-NEXT: v_mul_f32_e32 v0, v1, v01448; GFX942-FMA-NEXT: global_store_dword v[0:1], v0, off sc0 sc11449; GFX942-FMA-NEXT: s_waitcnt vmcnt(0)1450; GFX942-FMA-NEXT: s_endpgm1451;1452; GFX10-FMA-LABEL: madak_constant_bus_violation:1453; GFX10-FMA: ; %bb.0: ; %bb1454; GFX10-FMA-NEXT: s_load_dword s0, s[4:5], 0x241455; GFX10-FMA-NEXT: s_waitcnt lgkmcnt(0)1456; GFX10-FMA-NEXT: s_cmp_lg_u32 s0, 01457; GFX10-FMA-NEXT: s_cbranch_scc1 .LBB9_21458; GFX10-FMA-NEXT: ; %bb.1: ; %bb31459; GFX10-FMA-NEXT: v_mov_b32_e32 v0, 01460; GFX10-FMA-NEXT: global_store_dword v[0:1], v0, off1461; GFX10-FMA-NEXT: s_waitcnt_vscnt null, 0x01462; GFX10-FMA-NEXT: .LBB9_2: ; %bb41463; GFX10-FMA-NEXT: global_load_dword v0, v[0:1], off glc dlc1464; GFX10-FMA-NEXT: s_waitcnt vmcnt(0)1465; GFX10-FMA-NEXT: s_load_dword s0, s[4:5], 0x481466; GFX10-FMA-NEXT: v_mov_b32_e32 v1, 0.51467; GFX10-FMA-NEXT: s_waitcnt lgkmcnt(0)1468; GFX10-FMA-NEXT: v_fmaak_f32 v1, s0, v1, 0x422800001469; GFX10-FMA-NEXT: v_mul_f32_e32 v0, v1, v01470; GFX10-FMA-NEXT: global_store_dword v[0:1], v0, off1471; GFX10-FMA-NEXT: s_waitcnt_vscnt null, 0x01472; GFX10-FMA-NEXT: s_endpgm1473;1474; GFX11-FMA-LABEL: madak_constant_bus_violation:1475; GFX11-FMA: ; %bb.0: ; %bb1476; GFX11-FMA-NEXT: s_load_b32 s0, s[4:5], 0x241477; GFX11-FMA-NEXT: s_waitcnt lgkmcnt(0)1478; GFX11-FMA-NEXT: s_cmp_lg_u32 s0, 01479; GFX11-FMA-NEXT: s_cbranch_scc1 .LBB9_21480; GFX11-FMA-NEXT: ; %bb.1: ; %bb31481; GFX11-FMA-NEXT: v_mov_b32_e32 v0, 01482; GFX11-FMA-NEXT: global_store_b32 v[0:1], v0, off dlc1483; GFX11-FMA-NEXT: s_waitcnt_vscnt null, 0x01484; GFX11-FMA-NEXT: .LBB9_2: ; %bb41485; GFX11-FMA-NEXT: global_load_b32 v0, v[0:1], off glc dlc1486; GFX11-FMA-NEXT: s_waitcnt vmcnt(0)1487; GFX11-FMA-NEXT: s_load_b32 s0, s[4:5], 0x481488; GFX11-FMA-NEXT: v_mov_b32_e32 v1, 0.51489; GFX11-FMA-NEXT: s_waitcnt lgkmcnt(0)1490; GFX11-FMA-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1491; GFX11-FMA-NEXT: v_fmaak_f32 v1, s0, v1, 0x422800001492; GFX11-FMA-NEXT: v_mul_f32_e32 v0, v1, v01493; GFX11-FMA-NEXT: global_store_b32 v[0:1], v0, off dlc1494; GFX11-FMA-NEXT: s_waitcnt_vscnt null, 0x01495; GFX11-FMA-NEXT: s_endpgm1496bb:1497 %tmp = icmp eq i32 %arg1, 01498 br i1 %tmp, label %bb3, label %bb41499 1500bb3:1501 store volatile float 0.0, ptr addrspace(1) poison1502 br label %bb41503 1504bb4:1505 %vgpr = load volatile float, ptr addrspace(1) poison1506 %tmp0 = fmul float %sgpr0, 0.51507 %tmp1 = fadd float %tmp0, 42.01508 %tmp2 = fmul float %tmp1, %vgpr1509 store volatile float %tmp2, ptr addrspace(1) poison, align 41510 ret void1511}1512 1513attributes #0 = { nounwind "denormal-fp-math-f32"="preserve-sign,preserve-sign" }1514