1678 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx942 < %s | FileCheck %s -check-prefixes=GFX942-SDAG3; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx942 < %s | FileCheck %s -check-prefixes=GFX942-GISEL4; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck %s -check-prefixes=GFX11-SDAG,GFX11-SDAG-TRUE165; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck %s -check-prefixes=GFX11-SDAG,GFX11-SDAG-FAKE166; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck %s -check-prefixes=GFX11-GISEL,GFX11-GISEL-TRUE167; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck %s -check-prefixes=GFX11-GISEL,GFX11-GISEL-FAKE168; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 < %s | FileCheck %s -check-prefixes=GFX12-SDAG,GFX12-SDAG-TRUE169; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 < %s | FileCheck %s -check-prefixes=GFX12-SDAG,GFX12-SDAG-FAKE1610; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 < %s | FileCheck %s -check-prefixes=GFX12-GISEL,GFX12-GISEL-TRUE1611; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 < %s | FileCheck %s -check-prefixes=GFX12-GISEL,GFX12-GISEL-FAKE1612 13; Test flat scratch SVS addressing mode with various combinations of alignment14; of soffset, voffset and inst_offset.15 16declare i32 @llvm.amdgcn.workitem.id.x()17 18define amdgpu_kernel void @soff1_voff1(i32 %soff) {19; GFX942-SDAG-LABEL: soff1_voff1:20; GFX942-SDAG: ; %bb.0: ; %bb21; GFX942-SDAG-NEXT: s_load_dword s0, s[4:5], 0x2422; GFX942-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v023; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 124; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0)25; GFX942-SDAG-NEXT: v_add_u32_e32 v0, s0, v026; GFX942-SDAG-NEXT: v_add_u32_e32 v2, 1, v027; GFX942-SDAG-NEXT: v_add_u32_e32 v3, 2, v028; GFX942-SDAG-NEXT: scratch_store_byte v2, v1, off sc0 sc129; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)30; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 231; GFX942-SDAG-NEXT: scratch_store_byte v3, v1, off sc0 sc132; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)33; GFX942-SDAG-NEXT: v_add_u32_e32 v0, 4, v034; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 435; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off sc0 sc136; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)37; GFX942-SDAG-NEXT: s_endpgm38;39; GFX942-GISEL-LABEL: soff1_voff1:40; GFX942-GISEL: ; %bb.0: ; %bb41; GFX942-GISEL-NEXT: s_load_dword s0, s[4:5], 0x2442; GFX942-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v043; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 144; GFX942-GISEL-NEXT: s_waitcnt lgkmcnt(0)45; GFX942-GISEL-NEXT: v_add_u32_e32 v0, s0, v046; GFX942-GISEL-NEXT: v_add_u32_e32 v2, 1, v047; GFX942-GISEL-NEXT: v_add_u32_e32 v3, 2, v048; GFX942-GISEL-NEXT: scratch_store_byte v2, v1, off sc0 sc149; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)50; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 251; GFX942-GISEL-NEXT: scratch_store_byte v3, v1, off sc0 sc152; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)53; GFX942-GISEL-NEXT: v_add_u32_e32 v0, 4, v054; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 455; GFX942-GISEL-NEXT: scratch_store_byte v0, v1, off sc0 sc156; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)57; GFX942-GISEL-NEXT: s_endpgm58;59; GFX11-SDAG-TRUE16-LABEL: soff1_voff1:60; GFX11-SDAG-TRUE16: ; %bb.0: ; %bb61; GFX11-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x2462; GFX11-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v063; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 464; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)65; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)66; GFX11-SDAG-TRUE16-NEXT: v_add3_u32 v2, 0, s0, v067; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 168; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 269; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v3, 1, v270; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v4, 2, v271; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v2, 4, v272; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v3, v0, off dlc73; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x074; GFX11-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v4, v0, off dlc75; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x076; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v1, off dlc77; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x078; GFX11-SDAG-TRUE16-NEXT: s_endpgm79;80; GFX11-SDAG-FAKE16-LABEL: soff1_voff1:81; GFX11-SDAG-FAKE16: ; %bb.0: ; %bb82; GFX11-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x2483; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v084; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 485; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)86; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)87; GFX11-SDAG-FAKE16-NEXT: v_add3_u32 v0, 0, s0, v088; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v4, 1, v089; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v5, 2, v090; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v0, 4, v091; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v4, v1, off dlc92; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x093; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v5, v2, off dlc94; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x095; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v3, off dlc96; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x097; GFX11-SDAG-FAKE16-NEXT: s_endpgm98;99; GFX11-GISEL-LABEL: soff1_voff1:100; GFX11-GISEL: ; %bb.0: ; %bb101; GFX11-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x24102; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0103; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)104; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)105; GFX11-GISEL-NEXT: v_dual_mov_b32 v3, 4 :: v_dual_add_nc_u32 v0, s0, v0106; GFX11-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_add_nc_u32 v5, 2, v0107; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v4, 1, v0108; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, 4, v0109; GFX11-GISEL-NEXT: scratch_store_b8 v4, v1, off dlc110; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0111; GFX11-GISEL-NEXT: scratch_store_b8 v5, v2, off dlc112; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0113; GFX11-GISEL-NEXT: scratch_store_b8 v0, v3, off dlc114; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0115; GFX11-GISEL-NEXT: s_endpgm116;117; GFX12-SDAG-TRUE16-LABEL: soff1_voff1:118; GFX12-SDAG-TRUE16: ; %bb.0: ; %bb119; GFX12-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x24120; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 1121; GFX12-SDAG-TRUE16-NEXT: v_and_b32_e32 v2, 0x3ff, v0122; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 2123; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 4124; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0125; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v1, s0 offset:1 scope:SCOPE_SYS126; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0127; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v0, s0 offset:2 scope:SCOPE_SYS128; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0129; GFX12-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v2, v0, s0 offset:4 scope:SCOPE_SYS130; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0131; GFX12-SDAG-TRUE16-NEXT: s_endpgm132;133; GFX12-SDAG-FAKE16-LABEL: soff1_voff1:134; GFX12-SDAG-FAKE16: ; %bb.0: ; %bb135; GFX12-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x24136; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0137; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4138; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0139; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS140; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x0141; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS142; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x0143; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS144; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x0145; GFX12-SDAG-FAKE16-NEXT: s_endpgm146;147; GFX12-GISEL-LABEL: soff1_voff1:148; GFX12-GISEL: ; %bb.0: ; %bb149; GFX12-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x24150; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0151; GFX12-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4152; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0153; GFX12-GISEL-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS154; GFX12-GISEL-NEXT: s_wait_storecnt 0x0155; GFX12-GISEL-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS156; GFX12-GISEL-NEXT: s_wait_storecnt 0x0157; GFX12-GISEL-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS158; GFX12-GISEL-NEXT: s_wait_storecnt 0x0159; GFX12-GISEL-NEXT: s_endpgm160bb:161 %soff1 = mul i32 %soff, 1162 %a = alloca i8, i32 64, align 4, addrspace(5)163 %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff1164 %voff = call i32 @llvm.amdgcn.workitem.id.x()165 %voff1 = mul i32 %voff, 1166 %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff1167 %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 1168 store volatile i8 1, ptr addrspace(5) %p1169 %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 2170 store volatile i8 2, ptr addrspace(5) %p2171 %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 4172 store volatile i8 4, ptr addrspace(5) %p4173 ret void174}175 176define amdgpu_kernel void @soff1_voff2(i32 %soff) {177; GFX942-SDAG-LABEL: soff1_voff2:178; GFX942-SDAG: ; %bb.0: ; %bb179; GFX942-SDAG-NEXT: s_load_dword s0, s[4:5], 0x24180; GFX942-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0181; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 1182; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0)183; GFX942-SDAG-NEXT: v_mad_u32_u24 v0, v0, 2, s0184; GFX942-SDAG-NEXT: v_add_u32_e32 v2, 1, v0185; GFX942-SDAG-NEXT: v_add_u32_e32 v3, 2, v0186; GFX942-SDAG-NEXT: scratch_store_byte v2, v1, off sc0 sc1187; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)188; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 2189; GFX942-SDAG-NEXT: scratch_store_byte v3, v1, off sc0 sc1190; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)191; GFX942-SDAG-NEXT: v_add_u32_e32 v0, 4, v0192; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 4193; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off sc0 sc1194; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)195; GFX942-SDAG-NEXT: s_endpgm196;197; GFX942-GISEL-LABEL: soff1_voff2:198; GFX942-GISEL: ; %bb.0: ; %bb199; GFX942-GISEL-NEXT: s_load_dword s0, s[4:5], 0x24200; GFX942-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0201; GFX942-GISEL-NEXT: v_mul_u32_u24_e32 v0, 2, v0202; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 1203; GFX942-GISEL-NEXT: s_waitcnt lgkmcnt(0)204; GFX942-GISEL-NEXT: v_add_u32_e32 v0, s0, v0205; GFX942-GISEL-NEXT: v_add_u32_e32 v2, 1, v0206; GFX942-GISEL-NEXT: scratch_store_byte v2, v1, off sc0 sc1207; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)208; GFX942-GISEL-NEXT: v_add_u32_e32 v1, 2, v0209; GFX942-GISEL-NEXT: v_mov_b32_e32 v2, 2210; GFX942-GISEL-NEXT: scratch_store_byte v1, v2, off sc0 sc1211; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)212; GFX942-GISEL-NEXT: v_add_u32_e32 v0, 4, v0213; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 4214; GFX942-GISEL-NEXT: scratch_store_byte v0, v1, off sc0 sc1215; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)216; GFX942-GISEL-NEXT: s_endpgm217;218; GFX11-SDAG-TRUE16-LABEL: soff1_voff2:219; GFX11-SDAG-TRUE16: ; %bb.0: ; %bb220; GFX11-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x24221; GFX11-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0222; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 4223; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)224; GFX11-SDAG-TRUE16-NEXT: v_mul_u32_u24_e32 v0, 2, v0225; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)226; GFX11-SDAG-TRUE16-NEXT: v_add3_u32 v2, 0, s0, v0227; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 1228; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 2229; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)230; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v3, 1, v2231; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v4, 2, v2232; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v2, 4, v2233; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v3, v0, off dlc234; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x0235; GFX11-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v4, v0, off dlc236; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x0237; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v1, off dlc238; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x0239; GFX11-SDAG-TRUE16-NEXT: s_endpgm240;241; GFX11-SDAG-FAKE16-LABEL: soff1_voff2:242; GFX11-SDAG-FAKE16: ; %bb.0: ; %bb243; GFX11-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x24244; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0245; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4246; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)247; GFX11-SDAG-FAKE16-NEXT: v_mul_u32_u24_e32 v0, 2, v0248; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)249; GFX11-SDAG-FAKE16-NEXT: v_add3_u32 v0, 0, s0, v0250; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)251; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v4, 1, v0252; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v5, 2, v0253; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v0, 4, v0254; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v4, v1, off dlc255; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x0256; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v5, v2, off dlc257; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x0258; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v3, off dlc259; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x0260; GFX11-SDAG-FAKE16-NEXT: s_endpgm261;262; GFX11-GISEL-LABEL: soff1_voff2:263; GFX11-GISEL: ; %bb.0: ; %bb264; GFX11-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x24265; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0266; GFX11-GISEL-NEXT: v_mov_b32_e32 v3, 4267; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)268; GFX11-GISEL-NEXT: v_mul_u32_u24_e32 v0, 2, v0269; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)270; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, s0, v0271; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)272; GFX11-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_add_nc_u32 v5, 2, v0273; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v4, 1, v0274; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, 4, v0275; GFX11-GISEL-NEXT: scratch_store_b8 v4, v1, off dlc276; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0277; GFX11-GISEL-NEXT: scratch_store_b8 v5, v2, off dlc278; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0279; GFX11-GISEL-NEXT: scratch_store_b8 v0, v3, off dlc280; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0281; GFX11-GISEL-NEXT: s_endpgm282;283; GFX12-SDAG-TRUE16-LABEL: soff1_voff2:284; GFX12-SDAG-TRUE16: ; %bb.0: ; %bb285; GFX12-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x24286; GFX12-SDAG-TRUE16-NEXT: v_and_b32_e32 v1, 0x3ff, v0287; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 1288; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 2289; GFX12-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)290; GFX12-SDAG-TRUE16-NEXT: v_mul_u32_u24_e32 v2, 2, v1291; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 4292; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0293; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v0, s0 offset:1 scope:SCOPE_SYS294; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0295; GFX12-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v2, v0, s0 offset:2 scope:SCOPE_SYS296; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0297; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v1, s0 offset:4 scope:SCOPE_SYS298; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0299; GFX12-SDAG-TRUE16-NEXT: s_endpgm300;301; GFX12-SDAG-FAKE16-LABEL: soff1_voff2:302; GFX12-SDAG-FAKE16: ; %bb.0: ; %bb303; GFX12-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x24304; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0305; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4306; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)307; GFX12-SDAG-FAKE16-NEXT: v_mul_u32_u24_e32 v0, 2, v0308; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0309; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS310; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x0311; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS312; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x0313; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS314; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x0315; GFX12-SDAG-FAKE16-NEXT: s_endpgm316;317; GFX12-GISEL-LABEL: soff1_voff2:318; GFX12-GISEL: ; %bb.0: ; %bb319; GFX12-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x24320; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0321; GFX12-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4322; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)323; GFX12-GISEL-NEXT: v_mul_u32_u24_e32 v0, 2, v0324; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0325; GFX12-GISEL-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS326; GFX12-GISEL-NEXT: s_wait_storecnt 0x0327; GFX12-GISEL-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS328; GFX12-GISEL-NEXT: s_wait_storecnt 0x0329; GFX12-GISEL-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS330; GFX12-GISEL-NEXT: s_wait_storecnt 0x0331; GFX12-GISEL-NEXT: s_endpgm332bb:333 %soff1 = mul i32 %soff, 1334 %a = alloca i8, i32 64, align 4, addrspace(5)335 %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff1336 %voff = call i32 @llvm.amdgcn.workitem.id.x()337 %voff2 = mul i32 %voff, 2338 %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff2339 %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 1340 store volatile i8 1, ptr addrspace(5) %p1341 %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 2342 store volatile i8 2, ptr addrspace(5) %p2343 %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 4344 store volatile i8 4, ptr addrspace(5) %p4345 ret void346}347 348define amdgpu_kernel void @soff1_voff4(i32 %soff) {349; GFX942-SDAG-LABEL: soff1_voff4:350; GFX942-SDAG: ; %bb.0: ; %bb351; GFX942-SDAG-NEXT: s_load_dword s0, s[4:5], 0x24352; GFX942-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0353; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 1354; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0)355; GFX942-SDAG-NEXT: v_mad_u32_u24 v0, v0, 4, s0356; GFX942-SDAG-NEXT: v_add_u32_e32 v2, 1, v0357; GFX942-SDAG-NEXT: v_add_u32_e32 v3, 2, v0358; GFX942-SDAG-NEXT: scratch_store_byte v2, v1, off sc0 sc1359; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)360; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 2361; GFX942-SDAG-NEXT: scratch_store_byte v3, v1, off sc0 sc1362; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)363; GFX942-SDAG-NEXT: v_add_u32_e32 v0, 4, v0364; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 4365; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off sc0 sc1366; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)367; GFX942-SDAG-NEXT: s_endpgm368;369; GFX942-GISEL-LABEL: soff1_voff4:370; GFX942-GISEL: ; %bb.0: ; %bb371; GFX942-GISEL-NEXT: s_load_dword s0, s[4:5], 0x24372; GFX942-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0373; GFX942-GISEL-NEXT: v_mul_u32_u24_e32 v0, 4, v0374; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 1375; GFX942-GISEL-NEXT: s_waitcnt lgkmcnt(0)376; GFX942-GISEL-NEXT: v_add_u32_e32 v0, s0, v0377; GFX942-GISEL-NEXT: v_add_u32_e32 v2, 1, v0378; GFX942-GISEL-NEXT: scratch_store_byte v2, v1, off sc0 sc1379; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)380; GFX942-GISEL-NEXT: v_add_u32_e32 v1, 2, v0381; GFX942-GISEL-NEXT: v_mov_b32_e32 v2, 2382; GFX942-GISEL-NEXT: scratch_store_byte v1, v2, off sc0 sc1383; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)384; GFX942-GISEL-NEXT: v_add_u32_e32 v0, 4, v0385; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 4386; GFX942-GISEL-NEXT: scratch_store_byte v0, v1, off sc0 sc1387; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)388; GFX942-GISEL-NEXT: s_endpgm389;390; GFX11-SDAG-TRUE16-LABEL: soff1_voff4:391; GFX11-SDAG-TRUE16: ; %bb.0: ; %bb392; GFX11-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x24393; GFX11-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0394; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 4395; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)396; GFX11-SDAG-TRUE16-NEXT: v_mul_u32_u24_e32 v0, 4, v0397; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)398; GFX11-SDAG-TRUE16-NEXT: v_add3_u32 v2, 0, s0, v0399; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 1400; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 2401; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)402; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v3, 1, v2403; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v4, 2, v2404; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v2, 4, v2405; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v3, v0, off dlc406; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x0407; GFX11-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v4, v0, off dlc408; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x0409; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v1, off dlc410; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x0411; GFX11-SDAG-TRUE16-NEXT: s_endpgm412;413; GFX11-SDAG-FAKE16-LABEL: soff1_voff4:414; GFX11-SDAG-FAKE16: ; %bb.0: ; %bb415; GFX11-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x24416; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0417; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4418; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)419; GFX11-SDAG-FAKE16-NEXT: v_mul_u32_u24_e32 v0, 4, v0420; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)421; GFX11-SDAG-FAKE16-NEXT: v_add3_u32 v0, 0, s0, v0422; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)423; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v4, 1, v0424; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v5, 2, v0425; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v0, 4, v0426; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v4, v1, off dlc427; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x0428; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v5, v2, off dlc429; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x0430; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v3, off dlc431; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x0432; GFX11-SDAG-FAKE16-NEXT: s_endpgm433;434; GFX11-GISEL-LABEL: soff1_voff4:435; GFX11-GISEL: ; %bb.0: ; %bb436; GFX11-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x24437; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0438; GFX11-GISEL-NEXT: v_mov_b32_e32 v3, 4439; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)440; GFX11-GISEL-NEXT: v_mul_u32_u24_e32 v0, 4, v0441; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)442; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, s0, v0443; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)444; GFX11-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_add_nc_u32 v5, 2, v0445; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v4, 1, v0446; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, 4, v0447; GFX11-GISEL-NEXT: scratch_store_b8 v4, v1, off dlc448; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0449; GFX11-GISEL-NEXT: scratch_store_b8 v5, v2, off dlc450; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0451; GFX11-GISEL-NEXT: scratch_store_b8 v0, v3, off dlc452; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0453; GFX11-GISEL-NEXT: s_endpgm454;455; GFX12-SDAG-TRUE16-LABEL: soff1_voff4:456; GFX12-SDAG-TRUE16: ; %bb.0: ; %bb457; GFX12-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x24458; GFX12-SDAG-TRUE16-NEXT: v_and_b32_e32 v1, 0x3ff, v0459; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 1460; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 2461; GFX12-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)462; GFX12-SDAG-TRUE16-NEXT: v_mul_u32_u24_e32 v2, 4, v1463; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 4464; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0465; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v0, s0 offset:1 scope:SCOPE_SYS466; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0467; GFX12-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v2, v0, s0 offset:2 scope:SCOPE_SYS468; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0469; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v1, s0 offset:4 scope:SCOPE_SYS470; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0471; GFX12-SDAG-TRUE16-NEXT: s_endpgm472;473; GFX12-SDAG-FAKE16-LABEL: soff1_voff4:474; GFX12-SDAG-FAKE16: ; %bb.0: ; %bb475; GFX12-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x24476; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0477; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4478; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)479; GFX12-SDAG-FAKE16-NEXT: v_mul_u32_u24_e32 v0, 4, v0480; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0481; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS482; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x0483; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS484; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x0485; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS486; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x0487; GFX12-SDAG-FAKE16-NEXT: s_endpgm488;489; GFX12-GISEL-LABEL: soff1_voff4:490; GFX12-GISEL: ; %bb.0: ; %bb491; GFX12-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x24492; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0493; GFX12-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4494; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)495; GFX12-GISEL-NEXT: v_mul_u32_u24_e32 v0, 4, v0496; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0497; GFX12-GISEL-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS498; GFX12-GISEL-NEXT: s_wait_storecnt 0x0499; GFX12-GISEL-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS500; GFX12-GISEL-NEXT: s_wait_storecnt 0x0501; GFX12-GISEL-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS502; GFX12-GISEL-NEXT: s_wait_storecnt 0x0503; GFX12-GISEL-NEXT: s_endpgm504bb:505 %soff1 = mul i32 %soff, 1506 %a = alloca i8, i32 64, align 4, addrspace(5)507 %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff1508 %voff = call i32 @llvm.amdgcn.workitem.id.x()509 %voff4 = mul i32 %voff, 4510 %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff4511 %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 1512 store volatile i8 1, ptr addrspace(5) %p1513 %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 2514 store volatile i8 2, ptr addrspace(5) %p2515 %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 4516 store volatile i8 4, ptr addrspace(5) %p4517 ret void518}519 520define amdgpu_kernel void @soff2_voff1(i32 %soff) {521; GFX942-SDAG-LABEL: soff2_voff1:522; GFX942-SDAG: ; %bb.0: ; %bb523; GFX942-SDAG-NEXT: s_load_dword s0, s[4:5], 0x24524; GFX942-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0525; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 1526; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0)527; GFX942-SDAG-NEXT: s_lshl1_add_u32 s0, s0, 0528; GFX942-SDAG-NEXT: v_add_u32_e32 v0, s0, v0529; GFX942-SDAG-NEXT: v_add_u32_e32 v2, 1, v0530; GFX942-SDAG-NEXT: v_add_u32_e32 v3, 2, v0531; GFX942-SDAG-NEXT: scratch_store_byte v2, v1, off sc0 sc1532; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)533; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 2534; GFX942-SDAG-NEXT: scratch_store_byte v3, v1, off sc0 sc1535; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)536; GFX942-SDAG-NEXT: v_add_u32_e32 v0, 4, v0537; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 4538; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off sc0 sc1539; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)540; GFX942-SDAG-NEXT: s_endpgm541;542; GFX942-GISEL-LABEL: soff2_voff1:543; GFX942-GISEL: ; %bb.0: ; %bb544; GFX942-GISEL-NEXT: s_load_dword s0, s[4:5], 0x24545; GFX942-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0546; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 1547; GFX942-GISEL-NEXT: s_waitcnt lgkmcnt(0)548; GFX942-GISEL-NEXT: s_lshl_b32 s0, s0, 1549; GFX942-GISEL-NEXT: v_add_u32_e32 v0, s0, v0550; GFX942-GISEL-NEXT: v_add_u32_e32 v2, 1, v0551; GFX942-GISEL-NEXT: v_add_u32_e32 v3, 2, v0552; GFX942-GISEL-NEXT: scratch_store_byte v2, v1, off sc0 sc1553; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)554; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 2555; GFX942-GISEL-NEXT: scratch_store_byte v3, v1, off sc0 sc1556; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)557; GFX942-GISEL-NEXT: v_add_u32_e32 v0, 4, v0558; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 4559; GFX942-GISEL-NEXT: scratch_store_byte v0, v1, off sc0 sc1560; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)561; GFX942-GISEL-NEXT: s_endpgm562;563; GFX11-SDAG-TRUE16-LABEL: soff2_voff1:564; GFX11-SDAG-TRUE16: ; %bb.0: ; %bb565; GFX11-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x24566; GFX11-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0567; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 4568; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)569; GFX11-SDAG-TRUE16-NEXT: s_lshl_b32 s0, s0, 1570; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)571; GFX11-SDAG-TRUE16-NEXT: v_add3_u32 v2, 0, s0, v0572; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 1573; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 2574; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)575; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v3, 1, v2576; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v4, 2, v2577; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v2, 4, v2578; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v3, v0, off dlc579; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x0580; GFX11-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v4, v0, off dlc581; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x0582; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v1, off dlc583; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x0584; GFX11-SDAG-TRUE16-NEXT: s_endpgm585;586; GFX11-SDAG-FAKE16-LABEL: soff2_voff1:587; GFX11-SDAG-FAKE16: ; %bb.0: ; %bb588; GFX11-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x24589; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0590; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4591; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)592; GFX11-SDAG-FAKE16-NEXT: s_lshl_b32 s0, s0, 1593; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)594; GFX11-SDAG-FAKE16-NEXT: v_add3_u32 v0, 0, s0, v0595; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)596; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v4, 1, v0597; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v5, 2, v0598; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v0, 4, v0599; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v4, v1, off dlc600; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x0601; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v5, v2, off dlc602; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x0603; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v3, off dlc604; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x0605; GFX11-SDAG-FAKE16-NEXT: s_endpgm606;607; GFX11-GISEL-LABEL: soff2_voff1:608; GFX11-GISEL: ; %bb.0: ; %bb609; GFX11-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x24610; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0611; GFX11-GISEL-NEXT: v_mov_b32_e32 v3, 4612; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)613; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 1614; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)615; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, s0, v0616; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)617; GFX11-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_add_nc_u32 v5, 2, v0618; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v4, 1, v0619; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, 4, v0620; GFX11-GISEL-NEXT: scratch_store_b8 v4, v1, off dlc621; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0622; GFX11-GISEL-NEXT: scratch_store_b8 v5, v2, off dlc623; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0624; GFX11-GISEL-NEXT: scratch_store_b8 v0, v3, off dlc625; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0626; GFX11-GISEL-NEXT: s_endpgm627;628; GFX12-SDAG-TRUE16-LABEL: soff2_voff1:629; GFX12-SDAG-TRUE16: ; %bb.0: ; %bb630; GFX12-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x24631; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 1632; GFX12-SDAG-TRUE16-NEXT: v_and_b32_e32 v2, 0x3ff, v0633; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.h, 2634; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 4635; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0636; GFX12-SDAG-TRUE16-NEXT: s_lshl_b32 s0, s0, 1637; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v1, s0 offset:1 scope:SCOPE_SYS638; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0639; GFX12-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v2, v1, s0 offset:2 scope:SCOPE_SYS640; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0641; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v0, s0 offset:4 scope:SCOPE_SYS642; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0643; GFX12-SDAG-TRUE16-NEXT: s_endpgm644;645; GFX12-SDAG-FAKE16-LABEL: soff2_voff1:646; GFX12-SDAG-FAKE16: ; %bb.0: ; %bb647; GFX12-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x24648; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_mov_b32 v2, 2649; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v3, 4 :: v_dual_and_b32 v0, 0x3ff, v0650; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0651; GFX12-SDAG-FAKE16-NEXT: s_lshl_b32 s0, s0, 1652; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS653; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x0654; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS655; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x0656; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS657; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x0658; GFX12-SDAG-FAKE16-NEXT: s_endpgm659;660; GFX12-GISEL-LABEL: soff2_voff1:661; GFX12-GISEL: ; %bb.0: ; %bb662; GFX12-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x24663; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_mov_b32 v2, 2664; GFX12-GISEL-NEXT: v_dual_mov_b32 v3, 4 :: v_dual_and_b32 v0, 0x3ff, v0665; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0666; GFX12-GISEL-NEXT: s_lshl_b32 s0, s0, 1667; GFX12-GISEL-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS668; GFX12-GISEL-NEXT: s_wait_storecnt 0x0669; GFX12-GISEL-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS670; GFX12-GISEL-NEXT: s_wait_storecnt 0x0671; GFX12-GISEL-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS672; GFX12-GISEL-NEXT: s_wait_storecnt 0x0673; GFX12-GISEL-NEXT: s_endpgm674bb:675 %soff2 = mul i32 %soff, 2676 %a = alloca i8, i32 64, align 4, addrspace(5)677 %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff2678 %voff = call i32 @llvm.amdgcn.workitem.id.x()679 %voff1 = mul i32 %voff, 1680 %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff1681 %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 1682 store volatile i8 1, ptr addrspace(5) %p1683 %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 2684 store volatile i8 2, ptr addrspace(5) %p2685 %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 4686 store volatile i8 4, ptr addrspace(5) %p4687 ret void688}689 690define amdgpu_kernel void @soff2_voff2(i32 %soff) {691; GFX942-SDAG-LABEL: soff2_voff2:692; GFX942-SDAG: ; %bb.0: ; %bb693; GFX942-SDAG-NEXT: s_load_dword s0, s[4:5], 0x24694; GFX942-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0695; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 1696; GFX942-SDAG-NEXT: v_mov_b32_e32 v2, 2697; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0)698; GFX942-SDAG-NEXT: s_lshl1_add_u32 s0, s0, 0699; GFX942-SDAG-NEXT: v_mad_u32_u24 v0, v0, 2, s0700; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off offset:1 sc0 sc1701; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)702; GFX942-SDAG-NEXT: v_add_u32_e32 v1, 2, v0703; GFX942-SDAG-NEXT: scratch_store_byte v1, v2, off sc0 sc1704; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)705; GFX942-SDAG-NEXT: v_add_u32_e32 v0, 4, v0706; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 4707; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off sc0 sc1708; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)709; GFX942-SDAG-NEXT: s_endpgm710;711; GFX942-GISEL-LABEL: soff2_voff2:712; GFX942-GISEL: ; %bb.0: ; %bb713; GFX942-GISEL-NEXT: s_load_dword s0, s[4:5], 0x24714; GFX942-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0715; GFX942-GISEL-NEXT: v_mul_u32_u24_e32 v0, 2, v0716; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 1717; GFX942-GISEL-NEXT: s_waitcnt lgkmcnt(0)718; GFX942-GISEL-NEXT: s_lshl_b32 s0, s0, 1719; GFX942-GISEL-NEXT: v_add_u32_e32 v0, s0, v0720; GFX942-GISEL-NEXT: v_add_u32_e32 v2, 1, v0721; GFX942-GISEL-NEXT: scratch_store_byte v2, v1, off sc0 sc1722; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)723; GFX942-GISEL-NEXT: v_add_u32_e32 v1, 2, v0724; GFX942-GISEL-NEXT: v_mov_b32_e32 v2, 2725; GFX942-GISEL-NEXT: scratch_store_byte v1, v2, off sc0 sc1726; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)727; GFX942-GISEL-NEXT: v_add_u32_e32 v0, 4, v0728; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 4729; GFX942-GISEL-NEXT: scratch_store_byte v0, v1, off sc0 sc1730; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)731; GFX942-GISEL-NEXT: s_endpgm732;733; GFX11-SDAG-TRUE16-LABEL: soff2_voff2:734; GFX11-SDAG-TRUE16: ; %bb.0: ; %bb735; GFX11-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x24736; GFX11-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0737; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 4738; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)739; GFX11-SDAG-TRUE16-NEXT: v_mul_u32_u24_e32 v0, 2, v0740; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)741; GFX11-SDAG-TRUE16-NEXT: s_lshl_b32 s0, s0, 1742; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)743; GFX11-SDAG-TRUE16-NEXT: v_add3_u32 v2, 0, s0, v0744; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 1745; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 2746; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)747; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v3, 2, v2748; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v4, 4, v2749; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v0, off offset:1 dlc750; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x0751; GFX11-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v3, v0, off dlc752; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x0753; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v4, v1, off dlc754; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x0755; GFX11-SDAG-TRUE16-NEXT: s_endpgm756;757; GFX11-SDAG-FAKE16-LABEL: soff2_voff2:758; GFX11-SDAG-FAKE16: ; %bb.0: ; %bb759; GFX11-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x24760; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0761; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4762; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)763; GFX11-SDAG-FAKE16-NEXT: v_mul_u32_u24_e32 v0, 2, v0764; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)765; GFX11-SDAG-FAKE16-NEXT: s_lshl_b32 s0, s0, 1766; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)767; GFX11-SDAG-FAKE16-NEXT: v_add3_u32 v0, 0, s0, v0768; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)769; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v4, 2, v0770; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v5, 4, v0771; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v1, off offset:1 dlc772; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x0773; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v4, v2, off dlc774; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x0775; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v5, v3, off dlc776; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x0777; GFX11-SDAG-FAKE16-NEXT: s_endpgm778;779; GFX11-GISEL-LABEL: soff2_voff2:780; GFX11-GISEL: ; %bb.0: ; %bb781; GFX11-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x24782; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0783; GFX11-GISEL-NEXT: v_mov_b32_e32 v3, 4784; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)785; GFX11-GISEL-NEXT: v_mul_u32_u24_e32 v0, 2, v0786; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)787; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 1788; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)789; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, s0, v0790; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)791; GFX11-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_add_nc_u32 v5, 2, v0792; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v4, 1, v0793; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, 4, v0794; GFX11-GISEL-NEXT: scratch_store_b8 v4, v1, off dlc795; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0796; GFX11-GISEL-NEXT: scratch_store_b8 v5, v2, off dlc797; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0798; GFX11-GISEL-NEXT: scratch_store_b8 v0, v3, off dlc799; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0800; GFX11-GISEL-NEXT: s_endpgm801;802; GFX12-SDAG-TRUE16-LABEL: soff2_voff2:803; GFX12-SDAG-TRUE16: ; %bb.0: ; %bb804; GFX12-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x24805; GFX12-SDAG-TRUE16-NEXT: v_and_b32_e32 v1, 0x3ff, v0806; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 1807; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 2808; GFX12-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)809; GFX12-SDAG-TRUE16-NEXT: v_mul_u32_u24_e32 v2, 2, v1810; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 4811; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0812; GFX12-SDAG-TRUE16-NEXT: s_lshl_b32 s0, s0, 1813; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v0, s0 offset:1 scope:SCOPE_SYS814; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0815; GFX12-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v2, v0, s0 offset:2 scope:SCOPE_SYS816; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0817; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v1, s0 offset:4 scope:SCOPE_SYS818; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0819; GFX12-SDAG-TRUE16-NEXT: s_endpgm820;821; GFX12-SDAG-FAKE16-LABEL: soff2_voff2:822; GFX12-SDAG-FAKE16: ; %bb.0: ; %bb823; GFX12-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x24824; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0825; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4826; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)827; GFX12-SDAG-FAKE16-NEXT: v_mul_u32_u24_e32 v0, 2, v0828; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0829; GFX12-SDAG-FAKE16-NEXT: s_lshl_b32 s0, s0, 1830; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS831; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x0832; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS833; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x0834; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS835; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x0836; GFX12-SDAG-FAKE16-NEXT: s_endpgm837;838; GFX12-GISEL-LABEL: soff2_voff2:839; GFX12-GISEL: ; %bb.0: ; %bb840; GFX12-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x24841; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0842; GFX12-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4843; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)844; GFX12-GISEL-NEXT: v_mul_u32_u24_e32 v0, 2, v0845; GFX12-GISEL-NEXT: s_wait_kmcnt 0x0846; GFX12-GISEL-NEXT: s_lshl_b32 s0, s0, 1847; GFX12-GISEL-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS848; GFX12-GISEL-NEXT: s_wait_storecnt 0x0849; GFX12-GISEL-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS850; GFX12-GISEL-NEXT: s_wait_storecnt 0x0851; GFX12-GISEL-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS852; GFX12-GISEL-NEXT: s_wait_storecnt 0x0853; GFX12-GISEL-NEXT: s_endpgm854bb:855 %soff2 = mul i32 %soff, 2856 %a = alloca i8, i32 64, align 4, addrspace(5)857 %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff2858 %voff = call i32 @llvm.amdgcn.workitem.id.x()859 %voff2 = mul i32 %voff, 2860 %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff2861 %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 1862 store volatile i8 1, ptr addrspace(5) %p1863 %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 2864 store volatile i8 2, ptr addrspace(5) %p2865 %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 4866 store volatile i8 4, ptr addrspace(5) %p4867 ret void868}869 870define amdgpu_kernel void @soff2_voff4(i32 %soff) {871; GFX942-SDAG-LABEL: soff2_voff4:872; GFX942-SDAG: ; %bb.0: ; %bb873; GFX942-SDAG-NEXT: s_load_dword s0, s[4:5], 0x24874; GFX942-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0875; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 1876; GFX942-SDAG-NEXT: v_mov_b32_e32 v2, 2877; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0)878; GFX942-SDAG-NEXT: s_lshl1_add_u32 s0, s0, 0879; GFX942-SDAG-NEXT: v_mad_u32_u24 v0, v0, 4, s0880; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off offset:1 sc0 sc1881; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)882; GFX942-SDAG-NEXT: v_add_u32_e32 v1, 2, v0883; GFX942-SDAG-NEXT: scratch_store_byte v1, v2, off sc0 sc1884; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)885; GFX942-SDAG-NEXT: v_add_u32_e32 v0, 4, v0886; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 4887; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off sc0 sc1888; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)889; GFX942-SDAG-NEXT: s_endpgm890;891; GFX942-GISEL-LABEL: soff2_voff4:892; GFX942-GISEL: ; %bb.0: ; %bb893; GFX942-GISEL-NEXT: s_load_dword s0, s[4:5], 0x24894; GFX942-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0895; GFX942-GISEL-NEXT: v_mul_u32_u24_e32 v0, 4, v0896; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 1897; GFX942-GISEL-NEXT: s_waitcnt lgkmcnt(0)898; GFX942-GISEL-NEXT: s_lshl_b32 s0, s0, 1899; GFX942-GISEL-NEXT: v_add_u32_e32 v0, s0, v0900; GFX942-GISEL-NEXT: v_add_u32_e32 v2, 1, v0901; GFX942-GISEL-NEXT: scratch_store_byte v2, v1, off sc0 sc1902; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)903; GFX942-GISEL-NEXT: v_add_u32_e32 v1, 2, v0904; GFX942-GISEL-NEXT: v_mov_b32_e32 v2, 2905; GFX942-GISEL-NEXT: scratch_store_byte v1, v2, off sc0 sc1906; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)907; GFX942-GISEL-NEXT: v_add_u32_e32 v0, 4, v0908; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 4909; GFX942-GISEL-NEXT: scratch_store_byte v0, v1, off sc0 sc1910; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)911; GFX942-GISEL-NEXT: s_endpgm912;913; GFX11-SDAG-TRUE16-LABEL: soff2_voff4:914; GFX11-SDAG-TRUE16: ; %bb.0: ; %bb915; GFX11-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x24916; GFX11-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v0917; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 4918; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)919; GFX11-SDAG-TRUE16-NEXT: v_mul_u32_u24_e32 v0, 4, v0920; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)921; GFX11-SDAG-TRUE16-NEXT: s_lshl_b32 s0, s0, 1922; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)923; GFX11-SDAG-TRUE16-NEXT: v_add3_u32 v2, 0, s0, v0924; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 1925; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 2926; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)927; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v3, 2, v2928; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v4, 4, v2929; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v0, off offset:1 dlc930; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x0931; GFX11-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v3, v0, off dlc932; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x0933; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v4, v1, off dlc934; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x0935; GFX11-SDAG-TRUE16-NEXT: s_endpgm936;937; GFX11-SDAG-FAKE16-LABEL: soff2_voff4:938; GFX11-SDAG-FAKE16: ; %bb.0: ; %bb939; GFX11-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x24940; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0941; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4942; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)943; GFX11-SDAG-FAKE16-NEXT: v_mul_u32_u24_e32 v0, 4, v0944; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)945; GFX11-SDAG-FAKE16-NEXT: s_lshl_b32 s0, s0, 1946; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)947; GFX11-SDAG-FAKE16-NEXT: v_add3_u32 v0, 0, s0, v0948; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)949; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v4, 2, v0950; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v5, 4, v0951; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v1, off offset:1 dlc952; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x0953; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v4, v2, off dlc954; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x0955; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v5, v3, off dlc956; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x0957; GFX11-SDAG-FAKE16-NEXT: s_endpgm958;959; GFX11-GISEL-LABEL: soff2_voff4:960; GFX11-GISEL: ; %bb.0: ; %bb961; GFX11-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x24962; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v0963; GFX11-GISEL-NEXT: v_mov_b32_e32 v3, 4964; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)965; GFX11-GISEL-NEXT: v_mul_u32_u24_e32 v0, 4, v0966; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)967; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 1968; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)969; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, s0, v0970; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)971; GFX11-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_add_nc_u32 v5, 2, v0972; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v4, 1, v0973; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, 4, v0974; GFX11-GISEL-NEXT: scratch_store_b8 v4, v1, off dlc975; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0976; GFX11-GISEL-NEXT: scratch_store_b8 v5, v2, off dlc977; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0978; GFX11-GISEL-NEXT: scratch_store_b8 v0, v3, off dlc979; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0980; GFX11-GISEL-NEXT: s_endpgm981;982; GFX12-SDAG-TRUE16-LABEL: soff2_voff4:983; GFX12-SDAG-TRUE16: ; %bb.0: ; %bb984; GFX12-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x24985; GFX12-SDAG-TRUE16-NEXT: v_and_b32_e32 v1, 0x3ff, v0986; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 1987; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 2988; GFX12-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)989; GFX12-SDAG-TRUE16-NEXT: v_mul_u32_u24_e32 v2, 4, v1990; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 4991; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0992; GFX12-SDAG-TRUE16-NEXT: s_lshl_b32 s0, s0, 1993; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v0, s0 offset:1 scope:SCOPE_SYS994; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0995; GFX12-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v2, v0, s0 offset:2 scope:SCOPE_SYS996; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0997; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v1, s0 offset:4 scope:SCOPE_SYS998; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x0999; GFX12-SDAG-TRUE16-NEXT: s_endpgm1000;1001; GFX12-SDAG-FAKE16-LABEL: soff2_voff4:1002; GFX12-SDAG-FAKE16: ; %bb.0: ; %bb1003; GFX12-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x241004; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01005; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 41006; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1007; GFX12-SDAG-FAKE16-NEXT: v_mul_u32_u24_e32 v0, 4, v01008; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x01009; GFX12-SDAG-FAKE16-NEXT: s_lshl_b32 s0, s0, 11010; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS1011; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x01012; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS1013; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x01014; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS1015; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x01016; GFX12-SDAG-FAKE16-NEXT: s_endpgm1017;1018; GFX12-GISEL-LABEL: soff2_voff4:1019; GFX12-GISEL: ; %bb.0: ; %bb1020; GFX12-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x241021; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01022; GFX12-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 41023; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)1024; GFX12-GISEL-NEXT: v_mul_u32_u24_e32 v0, 4, v01025; GFX12-GISEL-NEXT: s_wait_kmcnt 0x01026; GFX12-GISEL-NEXT: s_lshl_b32 s0, s0, 11027; GFX12-GISEL-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS1028; GFX12-GISEL-NEXT: s_wait_storecnt 0x01029; GFX12-GISEL-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS1030; GFX12-GISEL-NEXT: s_wait_storecnt 0x01031; GFX12-GISEL-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS1032; GFX12-GISEL-NEXT: s_wait_storecnt 0x01033; GFX12-GISEL-NEXT: s_endpgm1034bb:1035 %soff2 = mul i32 %soff, 21036 %a = alloca i8, i32 64, align 4, addrspace(5)1037 %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff21038 %voff = call i32 @llvm.amdgcn.workitem.id.x()1039 %voff4 = mul i32 %voff, 41040 %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff41041 %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 11042 store volatile i8 1, ptr addrspace(5) %p11043 %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 21044 store volatile i8 2, ptr addrspace(5) %p21045 %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 41046 store volatile i8 4, ptr addrspace(5) %p41047 ret void1048}1049 1050define amdgpu_kernel void @soff4_voff1(i32 %soff) {1051; GFX942-SDAG-LABEL: soff4_voff1:1052; GFX942-SDAG: ; %bb.0: ; %bb1053; GFX942-SDAG-NEXT: s_load_dword s0, s[4:5], 0x241054; GFX942-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v01055; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 11056; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0)1057; GFX942-SDAG-NEXT: s_lshl2_add_u32 s0, s0, 01058; GFX942-SDAG-NEXT: v_add_u32_e32 v0, s0, v01059; GFX942-SDAG-NEXT: v_add_u32_e32 v2, 1, v01060; GFX942-SDAG-NEXT: v_add_u32_e32 v3, 2, v01061; GFX942-SDAG-NEXT: scratch_store_byte v2, v1, off sc0 sc11062; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)1063; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 21064; GFX942-SDAG-NEXT: scratch_store_byte v3, v1, off sc0 sc11065; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)1066; GFX942-SDAG-NEXT: v_add_u32_e32 v0, 4, v01067; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 41068; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off sc0 sc11069; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)1070; GFX942-SDAG-NEXT: s_endpgm1071;1072; GFX942-GISEL-LABEL: soff4_voff1:1073; GFX942-GISEL: ; %bb.0: ; %bb1074; GFX942-GISEL-NEXT: s_load_dword s0, s[4:5], 0x241075; GFX942-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01076; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 11077; GFX942-GISEL-NEXT: s_waitcnt lgkmcnt(0)1078; GFX942-GISEL-NEXT: s_lshl_b32 s0, s0, 21079; GFX942-GISEL-NEXT: v_add_u32_e32 v0, s0, v01080; GFX942-GISEL-NEXT: v_add_u32_e32 v2, 1, v01081; GFX942-GISEL-NEXT: v_add_u32_e32 v3, 2, v01082; GFX942-GISEL-NEXT: scratch_store_byte v2, v1, off sc0 sc11083; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)1084; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 21085; GFX942-GISEL-NEXT: scratch_store_byte v3, v1, off sc0 sc11086; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)1087; GFX942-GISEL-NEXT: v_add_u32_e32 v0, 4, v01088; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 41089; GFX942-GISEL-NEXT: scratch_store_byte v0, v1, off sc0 sc11090; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)1091; GFX942-GISEL-NEXT: s_endpgm1092;1093; GFX11-SDAG-TRUE16-LABEL: soff4_voff1:1094; GFX11-SDAG-TRUE16: ; %bb.0: ; %bb1095; GFX11-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x241096; GFX11-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01097; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 41098; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1099; GFX11-SDAG-TRUE16-NEXT: s_lshl_b32 s0, s0, 21100; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)1101; GFX11-SDAG-TRUE16-NEXT: v_add3_u32 v2, 0, s0, v01102; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 11103; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 21104; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)1105; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v3, 1, v21106; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v4, 2, v21107; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v2, 4, v21108; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v3, v0, off dlc1109; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x01110; GFX11-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v4, v0, off dlc1111; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x01112; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v1, off dlc1113; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x01114; GFX11-SDAG-TRUE16-NEXT: s_endpgm1115;1116; GFX11-SDAG-FAKE16-LABEL: soff4_voff1:1117; GFX11-SDAG-FAKE16: ; %bb.0: ; %bb1118; GFX11-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x241119; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01120; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 41121; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1122; GFX11-SDAG-FAKE16-NEXT: s_lshl_b32 s0, s0, 21123; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)1124; GFX11-SDAG-FAKE16-NEXT: v_add3_u32 v0, 0, s0, v01125; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1126; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v4, 1, v01127; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v5, 2, v01128; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v0, 4, v01129; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v4, v1, off dlc1130; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x01131; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v5, v2, off dlc1132; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x01133; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v3, off dlc1134; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x01135; GFX11-SDAG-FAKE16-NEXT: s_endpgm1136;1137; GFX11-GISEL-LABEL: soff4_voff1:1138; GFX11-GISEL: ; %bb.0: ; %bb1139; GFX11-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x241140; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01141; GFX11-GISEL-NEXT: v_mov_b32_e32 v3, 41142; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)1143; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 21144; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)1145; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, s0, v01146; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1147; GFX11-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_add_nc_u32 v5, 2, v01148; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v4, 1, v01149; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, 4, v01150; GFX11-GISEL-NEXT: scratch_store_b8 v4, v1, off dlc1151; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01152; GFX11-GISEL-NEXT: scratch_store_b8 v5, v2, off dlc1153; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01154; GFX11-GISEL-NEXT: scratch_store_b8 v0, v3, off dlc1155; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01156; GFX11-GISEL-NEXT: s_endpgm1157;1158; GFX12-SDAG-TRUE16-LABEL: soff4_voff1:1159; GFX12-SDAG-TRUE16: ; %bb.0: ; %bb1160; GFX12-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x241161; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 11162; GFX12-SDAG-TRUE16-NEXT: v_and_b32_e32 v2, 0x3ff, v01163; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.h, 21164; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 41165; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x01166; GFX12-SDAG-TRUE16-NEXT: s_lshl_b32 s0, s0, 21167; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v1, s0 offset:1 scope:SCOPE_SYS1168; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x01169; GFX12-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v2, v1, s0 offset:2 scope:SCOPE_SYS1170; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x01171; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v0, s0 offset:4 scope:SCOPE_SYS1172; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x01173; GFX12-SDAG-TRUE16-NEXT: s_endpgm1174;1175; GFX12-SDAG-FAKE16-LABEL: soff4_voff1:1176; GFX12-SDAG-FAKE16: ; %bb.0: ; %bb1177; GFX12-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x241178; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_mov_b32 v2, 21179; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v3, 4 :: v_dual_and_b32 v0, 0x3ff, v01180; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x01181; GFX12-SDAG-FAKE16-NEXT: s_lshl_b32 s0, s0, 21182; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS1183; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x01184; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS1185; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x01186; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS1187; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x01188; GFX12-SDAG-FAKE16-NEXT: s_endpgm1189;1190; GFX12-GISEL-LABEL: soff4_voff1:1191; GFX12-GISEL: ; %bb.0: ; %bb1192; GFX12-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x241193; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_mov_b32 v2, 21194; GFX12-GISEL-NEXT: v_dual_mov_b32 v3, 4 :: v_dual_and_b32 v0, 0x3ff, v01195; GFX12-GISEL-NEXT: s_wait_kmcnt 0x01196; GFX12-GISEL-NEXT: s_lshl_b32 s0, s0, 21197; GFX12-GISEL-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS1198; GFX12-GISEL-NEXT: s_wait_storecnt 0x01199; GFX12-GISEL-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS1200; GFX12-GISEL-NEXT: s_wait_storecnt 0x01201; GFX12-GISEL-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS1202; GFX12-GISEL-NEXT: s_wait_storecnt 0x01203; GFX12-GISEL-NEXT: s_endpgm1204bb:1205 %soff4 = mul i32 %soff, 41206 %a = alloca i8, i32 64, align 4, addrspace(5)1207 %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff41208 %voff = call i32 @llvm.amdgcn.workitem.id.x()1209 %voff1 = mul i32 %voff, 11210 %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff11211 %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 11212 store volatile i8 1, ptr addrspace(5) %p11213 %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 21214 store volatile i8 2, ptr addrspace(5) %p21215 %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 41216 store volatile i8 4, ptr addrspace(5) %p41217 ret void1218}1219 1220define amdgpu_kernel void @soff4_voff2(i32 %soff) {1221; GFX942-SDAG-LABEL: soff4_voff2:1222; GFX942-SDAG: ; %bb.0: ; %bb1223; GFX942-SDAG-NEXT: s_load_dword s0, s[4:5], 0x241224; GFX942-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v01225; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 11226; GFX942-SDAG-NEXT: v_mov_b32_e32 v2, 21227; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0)1228; GFX942-SDAG-NEXT: s_lshl2_add_u32 s0, s0, 01229; GFX942-SDAG-NEXT: v_mad_u32_u24 v0, v0, 2, s01230; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off offset:1 sc0 sc11231; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)1232; GFX942-SDAG-NEXT: v_add_u32_e32 v1, 2, v01233; GFX942-SDAG-NEXT: scratch_store_byte v1, v2, off sc0 sc11234; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)1235; GFX942-SDAG-NEXT: v_add_u32_e32 v0, 4, v01236; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 41237; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off sc0 sc11238; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)1239; GFX942-SDAG-NEXT: s_endpgm1240;1241; GFX942-GISEL-LABEL: soff4_voff2:1242; GFX942-GISEL: ; %bb.0: ; %bb1243; GFX942-GISEL-NEXT: s_load_dword s0, s[4:5], 0x241244; GFX942-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01245; GFX942-GISEL-NEXT: v_mul_u32_u24_e32 v0, 2, v01246; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 11247; GFX942-GISEL-NEXT: s_waitcnt lgkmcnt(0)1248; GFX942-GISEL-NEXT: s_lshl_b32 s0, s0, 21249; GFX942-GISEL-NEXT: v_add_u32_e32 v0, s0, v01250; GFX942-GISEL-NEXT: v_add_u32_e32 v2, 1, v01251; GFX942-GISEL-NEXT: scratch_store_byte v2, v1, off sc0 sc11252; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)1253; GFX942-GISEL-NEXT: v_add_u32_e32 v1, 2, v01254; GFX942-GISEL-NEXT: v_mov_b32_e32 v2, 21255; GFX942-GISEL-NEXT: scratch_store_byte v1, v2, off sc0 sc11256; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)1257; GFX942-GISEL-NEXT: v_add_u32_e32 v0, 4, v01258; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 41259; GFX942-GISEL-NEXT: scratch_store_byte v0, v1, off sc0 sc11260; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)1261; GFX942-GISEL-NEXT: s_endpgm1262;1263; GFX11-SDAG-TRUE16-LABEL: soff4_voff2:1264; GFX11-SDAG-TRUE16: ; %bb.0: ; %bb1265; GFX11-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x241266; GFX11-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01267; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 41268; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1269; GFX11-SDAG-TRUE16-NEXT: v_mul_u32_u24_e32 v0, 2, v01270; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1271; GFX11-SDAG-TRUE16-NEXT: s_lshl_b32 s0, s0, 21272; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1273; GFX11-SDAG-TRUE16-NEXT: v_add3_u32 v2, 0, s0, v01274; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 11275; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 21276; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)1277; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v3, 2, v21278; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v4, 4, v21279; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v0, off offset:1 dlc1280; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x01281; GFX11-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v3, v0, off dlc1282; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x01283; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v4, v1, off dlc1284; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x01285; GFX11-SDAG-TRUE16-NEXT: s_endpgm1286;1287; GFX11-SDAG-FAKE16-LABEL: soff4_voff2:1288; GFX11-SDAG-FAKE16: ; %bb.0: ; %bb1289; GFX11-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x241290; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01291; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 41292; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1293; GFX11-SDAG-FAKE16-NEXT: v_mul_u32_u24_e32 v0, 2, v01294; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1295; GFX11-SDAG-FAKE16-NEXT: s_lshl_b32 s0, s0, 21296; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1297; GFX11-SDAG-FAKE16-NEXT: v_add3_u32 v0, 0, s0, v01298; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1299; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v4, 2, v01300; GFX11-SDAG-FAKE16-NEXT: v_add_nc_u32_e32 v5, 4, v01301; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v1, off offset:1 dlc1302; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x01303; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v4, v2, off dlc1304; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x01305; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v5, v3, off dlc1306; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x01307; GFX11-SDAG-FAKE16-NEXT: s_endpgm1308;1309; GFX11-GISEL-LABEL: soff4_voff2:1310; GFX11-GISEL: ; %bb.0: ; %bb1311; GFX11-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x241312; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01313; GFX11-GISEL-NEXT: v_mov_b32_e32 v3, 41314; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)1315; GFX11-GISEL-NEXT: v_mul_u32_u24_e32 v0, 2, v01316; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)1317; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 21318; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1319; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, s0, v01320; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1321; GFX11-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_add_nc_u32 v5, 2, v01322; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v4, 1, v01323; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, 4, v01324; GFX11-GISEL-NEXT: scratch_store_b8 v4, v1, off dlc1325; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01326; GFX11-GISEL-NEXT: scratch_store_b8 v5, v2, off dlc1327; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01328; GFX11-GISEL-NEXT: scratch_store_b8 v0, v3, off dlc1329; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01330; GFX11-GISEL-NEXT: s_endpgm1331;1332; GFX12-SDAG-TRUE16-LABEL: soff4_voff2:1333; GFX12-SDAG-TRUE16: ; %bb.0: ; %bb1334; GFX12-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x241335; GFX12-SDAG-TRUE16-NEXT: v_and_b32_e32 v1, 0x3ff, v01336; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 11337; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 21338; GFX12-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)1339; GFX12-SDAG-TRUE16-NEXT: v_mul_u32_u24_e32 v2, 2, v11340; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 41341; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x01342; GFX12-SDAG-TRUE16-NEXT: s_lshl_b32 s0, s0, 21343; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v0, s0 offset:1 scope:SCOPE_SYS1344; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x01345; GFX12-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v2, v0, s0 offset:2 scope:SCOPE_SYS1346; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x01347; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v1, s0 offset:4 scope:SCOPE_SYS1348; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x01349; GFX12-SDAG-TRUE16-NEXT: s_endpgm1350;1351; GFX12-SDAG-FAKE16-LABEL: soff4_voff2:1352; GFX12-SDAG-FAKE16: ; %bb.0: ; %bb1353; GFX12-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x241354; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01355; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 41356; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1357; GFX12-SDAG-FAKE16-NEXT: v_mul_u32_u24_e32 v0, 2, v01358; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x01359; GFX12-SDAG-FAKE16-NEXT: s_lshl_b32 s0, s0, 21360; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS1361; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x01362; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS1363; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x01364; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS1365; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x01366; GFX12-SDAG-FAKE16-NEXT: s_endpgm1367;1368; GFX12-GISEL-LABEL: soff4_voff2:1369; GFX12-GISEL: ; %bb.0: ; %bb1370; GFX12-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x241371; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01372; GFX12-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 41373; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)1374; GFX12-GISEL-NEXT: v_mul_u32_u24_e32 v0, 2, v01375; GFX12-GISEL-NEXT: s_wait_kmcnt 0x01376; GFX12-GISEL-NEXT: s_lshl_b32 s0, s0, 21377; GFX12-GISEL-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS1378; GFX12-GISEL-NEXT: s_wait_storecnt 0x01379; GFX12-GISEL-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS1380; GFX12-GISEL-NEXT: s_wait_storecnt 0x01381; GFX12-GISEL-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS1382; GFX12-GISEL-NEXT: s_wait_storecnt 0x01383; GFX12-GISEL-NEXT: s_endpgm1384bb:1385 %soff4 = mul i32 %soff, 41386 %a = alloca i8, i32 64, align 4, addrspace(5)1387 %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff41388 %voff = call i32 @llvm.amdgcn.workitem.id.x()1389 %voff2 = mul i32 %voff, 21390 %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff21391 %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 11392 store volatile i8 1, ptr addrspace(5) %p11393 %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 21394 store volatile i8 2, ptr addrspace(5) %p21395 %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 41396 store volatile i8 4, ptr addrspace(5) %p41397 ret void1398}1399 1400define amdgpu_kernel void @soff4_voff4(i32 %soff) {1401; GFX942-SDAG-LABEL: soff4_voff4:1402; GFX942-SDAG: ; %bb.0: ; %bb1403; GFX942-SDAG-NEXT: s_load_dword s0, s[4:5], 0x241404; GFX942-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v01405; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 11406; GFX942-SDAG-NEXT: v_mov_b32_e32 v2, 21407; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0)1408; GFX942-SDAG-NEXT: s_lshl2_add_u32 s0, s0, 01409; GFX942-SDAG-NEXT: v_mad_u32_u24 v0, v0, 4, s01410; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off offset:1 sc0 sc11411; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)1412; GFX942-SDAG-NEXT: scratch_store_byte v0, v2, off offset:2 sc0 sc11413; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)1414; GFX942-SDAG-NEXT: v_add_u32_e32 v0, 4, v01415; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 41416; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off sc0 sc11417; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)1418; GFX942-SDAG-NEXT: s_endpgm1419;1420; GFX942-GISEL-LABEL: soff4_voff4:1421; GFX942-GISEL: ; %bb.0: ; %bb1422; GFX942-GISEL-NEXT: s_load_dword s0, s[4:5], 0x241423; GFX942-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01424; GFX942-GISEL-NEXT: v_mul_u32_u24_e32 v0, 4, v01425; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 11426; GFX942-GISEL-NEXT: s_waitcnt lgkmcnt(0)1427; GFX942-GISEL-NEXT: s_lshl_b32 s0, s0, 21428; GFX942-GISEL-NEXT: v_add_u32_e32 v0, s0, v01429; GFX942-GISEL-NEXT: v_add_u32_e32 v2, 1, v01430; GFX942-GISEL-NEXT: scratch_store_byte v2, v1, off sc0 sc11431; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)1432; GFX942-GISEL-NEXT: v_add_u32_e32 v1, 2, v01433; GFX942-GISEL-NEXT: v_mov_b32_e32 v2, 21434; GFX942-GISEL-NEXT: scratch_store_byte v1, v2, off sc0 sc11435; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)1436; GFX942-GISEL-NEXT: v_add_u32_e32 v0, 4, v01437; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 41438; GFX942-GISEL-NEXT: scratch_store_byte v0, v1, off sc0 sc11439; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)1440; GFX942-GISEL-NEXT: s_endpgm1441;1442; GFX11-SDAG-TRUE16-LABEL: soff4_voff4:1443; GFX11-SDAG-TRUE16: ; %bb.0: ; %bb1444; GFX11-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x241445; GFX11-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01446; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 41447; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1448; GFX11-SDAG-TRUE16-NEXT: v_mul_u32_u24_e32 v0, 4, v01449; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1450; GFX11-SDAG-TRUE16-NEXT: s_lshl_b32 s0, s0, 21451; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1452; GFX11-SDAG-TRUE16-NEXT: v_add3_u32 v2, 0, s0, v01453; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 11454; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 21455; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)1456; GFX11-SDAG-TRUE16-NEXT: v_add_nc_u32_e32 v3, 4, v21457; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v0, off offset:1 dlc1458; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x01459; GFX11-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v2, v0, off offset:2 dlc1460; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x01461; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v3, v1, off dlc1462; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x01463; GFX11-SDAG-TRUE16-NEXT: s_endpgm1464;1465; GFX11-SDAG-FAKE16-LABEL: soff4_voff4:1466; GFX11-SDAG-FAKE16: ; %bb.0: ; %bb1467; GFX11-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x241468; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01469; GFX11-SDAG-FAKE16-NEXT: v_mov_b32_e32 v4, 41470; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1471; GFX11-SDAG-FAKE16-NEXT: v_mul_u32_u24_e32 v0, 4, v01472; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1473; GFX11-SDAG-FAKE16-NEXT: s_lshl_b32 s0, s0, 21474; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1475; GFX11-SDAG-FAKE16-NEXT: v_add3_u32 v0, 0, s0, v01476; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1477; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_add_nc_u32 v3, 4, v01478; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v1, off offset:1 dlc1479; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x01480; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v2, off offset:2 dlc1481; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x01482; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v3, v4, off dlc1483; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x01484; GFX11-SDAG-FAKE16-NEXT: s_endpgm1485;1486; GFX11-GISEL-LABEL: soff4_voff4:1487; GFX11-GISEL: ; %bb.0: ; %bb1488; GFX11-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x241489; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01490; GFX11-GISEL-NEXT: v_mov_b32_e32 v3, 41491; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)1492; GFX11-GISEL-NEXT: v_mul_u32_u24_e32 v0, 4, v01493; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)1494; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 21495; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1496; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, s0, v01497; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1498; GFX11-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_add_nc_u32 v5, 2, v01499; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v4, 1, v01500; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, 4, v01501; GFX11-GISEL-NEXT: scratch_store_b8 v4, v1, off dlc1502; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01503; GFX11-GISEL-NEXT: scratch_store_b8 v5, v2, off dlc1504; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01505; GFX11-GISEL-NEXT: scratch_store_b8 v0, v3, off dlc1506; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01507; GFX11-GISEL-NEXT: s_endpgm1508;1509; GFX12-SDAG-TRUE16-LABEL: soff4_voff4:1510; GFX12-SDAG-TRUE16: ; %bb.0: ; %bb1511; GFX12-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x241512; GFX12-SDAG-TRUE16-NEXT: v_and_b32_e32 v1, 0x3ff, v01513; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 11514; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 21515; GFX12-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)1516; GFX12-SDAG-TRUE16-NEXT: v_mul_u32_u24_e32 v2, 4, v11517; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 41518; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x01519; GFX12-SDAG-TRUE16-NEXT: s_lshl_b32 s0, s0, 21520; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v0, s0 offset:1 scope:SCOPE_SYS1521; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x01522; GFX12-SDAG-TRUE16-NEXT: scratch_store_d16_hi_b8 v2, v0, s0 offset:2 scope:SCOPE_SYS1523; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x01524; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v2, v1, s0 offset:4 scope:SCOPE_SYS1525; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x01526; GFX12-SDAG-TRUE16-NEXT: s_endpgm1527;1528; GFX12-SDAG-FAKE16-LABEL: soff4_voff4:1529; GFX12-SDAG-FAKE16: ; %bb.0: ; %bb1530; GFX12-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x241531; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01532; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 41533; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1534; GFX12-SDAG-FAKE16-NEXT: v_mul_u32_u24_e32 v0, 4, v01535; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x01536; GFX12-SDAG-FAKE16-NEXT: s_lshl_b32 s0, s0, 21537; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS1538; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x01539; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS1540; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x01541; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS1542; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x01543; GFX12-SDAG-FAKE16-NEXT: s_endpgm1544;1545; GFX12-GISEL-LABEL: soff4_voff4:1546; GFX12-GISEL: ; %bb.0: ; %bb1547; GFX12-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x241548; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01549; GFX12-GISEL-NEXT: v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 41550; GFX12-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)1551; GFX12-GISEL-NEXT: v_mul_u32_u24_e32 v0, 4, v01552; GFX12-GISEL-NEXT: s_wait_kmcnt 0x01553; GFX12-GISEL-NEXT: s_lshl_b32 s0, s0, 21554; GFX12-GISEL-NEXT: scratch_store_b8 v0, v1, s0 offset:1 scope:SCOPE_SYS1555; GFX12-GISEL-NEXT: s_wait_storecnt 0x01556; GFX12-GISEL-NEXT: scratch_store_b8 v0, v2, s0 offset:2 scope:SCOPE_SYS1557; GFX12-GISEL-NEXT: s_wait_storecnt 0x01558; GFX12-GISEL-NEXT: scratch_store_b8 v0, v3, s0 offset:4 scope:SCOPE_SYS1559; GFX12-GISEL-NEXT: s_wait_storecnt 0x01560; GFX12-GISEL-NEXT: s_endpgm1561bb:1562 %soff4 = mul i32 %soff, 41563 %a = alloca i8, i32 64, align 4, addrspace(5)1564 %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff41565 %voff = call i32 @llvm.amdgcn.workitem.id.x()1566 %voff4 = mul i32 %voff, 41567 %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff41568 %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 11569 store volatile i8 1, ptr addrspace(5) %p11570 %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 21571 store volatile i8 2, ptr addrspace(5) %p21572 %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 41573 store volatile i8 4, ptr addrspace(5) %p41574 ret void1575}1576 1577define amdgpu_kernel void @soff1_voff1_negative(i32 %soff) {1578; GFX942-SDAG-LABEL: soff1_voff1_negative:1579; GFX942-SDAG: ; %bb.0: ; %bb1580; GFX942-SDAG-NEXT: s_load_dword s0, s[4:5], 0x241581; GFX942-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v01582; GFX942-SDAG-NEXT: v_mov_b32_e32 v1, 11583; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0)1584; GFX942-SDAG-NEXT: v_add_u32_e32 v0, s0, v01585; GFX942-SDAG-NEXT: v_add_u32_e32 v0, -1, v01586; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off sc0 sc11587; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0)1588; GFX942-SDAG-NEXT: s_endpgm1589;1590; GFX942-GISEL-LABEL: soff1_voff1_negative:1591; GFX942-GISEL: ; %bb.0: ; %bb1592; GFX942-GISEL-NEXT: s_load_dword s0, s[4:5], 0x241593; GFX942-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01594; GFX942-GISEL-NEXT: v_mov_b32_e32 v1, 11595; GFX942-GISEL-NEXT: s_waitcnt lgkmcnt(0)1596; GFX942-GISEL-NEXT: v_add3_u32 v0, s0, v0, -11597; GFX942-GISEL-NEXT: scratch_store_byte v0, v1, off sc0 sc11598; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0)1599; GFX942-GISEL-NEXT: s_endpgm1600;1601; GFX11-SDAG-TRUE16-LABEL: soff1_voff1_negative:1602; GFX11-SDAG-TRUE16: ; %bb.0: ; %bb1603; GFX11-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x241604; GFX11-SDAG-TRUE16-NEXT: v_and_b32_e32 v0, 0x3ff, v01605; GFX11-SDAG-TRUE16-NEXT: s_waitcnt lgkmcnt(0)1606; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1607; GFX11-SDAG-TRUE16-NEXT: v_add3_u32 v1, 0, s0, v01608; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 11609; GFX11-SDAG-TRUE16-NEXT: scratch_store_b8 v1, v0, off offset:-1 dlc1610; GFX11-SDAG-TRUE16-NEXT: s_waitcnt_vscnt null, 0x01611; GFX11-SDAG-TRUE16-NEXT: s_endpgm1612;1613; GFX11-SDAG-FAKE16-LABEL: soff1_voff1_negative:1614; GFX11-SDAG-FAKE16: ; %bb.0: ; %bb1615; GFX11-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x241616; GFX11-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01617; GFX11-SDAG-FAKE16-NEXT: s_waitcnt lgkmcnt(0)1618; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1619; GFX11-SDAG-FAKE16-NEXT: v_add3_u32 v0, 0, s0, v01620; GFX11-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v1, off offset:-1 dlc1621; GFX11-SDAG-FAKE16-NEXT: s_waitcnt_vscnt null, 0x01622; GFX11-SDAG-FAKE16-NEXT: s_endpgm1623;1624; GFX11-GISEL-LABEL: soff1_voff1_negative:1625; GFX11-GISEL: ; %bb.0: ; %bb1626; GFX11-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x241627; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01628; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)1629; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1630; GFX11-GISEL-NEXT: v_add_nc_u32_e32 v0, s0, v01631; GFX11-GISEL-NEXT: scratch_store_b8 v0, v1, off offset:-1 dlc1632; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01633; GFX11-GISEL-NEXT: s_endpgm1634;1635; GFX12-SDAG-TRUE16-LABEL: soff1_voff1_negative:1636; GFX12-SDAG-TRUE16: ; %bb.0: ; %bb1637; GFX12-SDAG-TRUE16-NEXT: s_load_b32 s0, s[4:5], 0x241638; GFX12-SDAG-TRUE16-NEXT: v_and_b32_e32 v1, 0x3ff, v01639; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.l, 11640; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x01641; GFX12-SDAG-TRUE16-NEXT: scratch_store_b8 v1, v0, s0 offset:-1 scope:SCOPE_SYS1642; GFX12-SDAG-TRUE16-NEXT: s_wait_storecnt 0x01643; GFX12-SDAG-TRUE16-NEXT: s_endpgm1644;1645; GFX12-SDAG-FAKE16-LABEL: soff1_voff1_negative:1646; GFX12-SDAG-FAKE16: ; %bb.0: ; %bb1647; GFX12-SDAG-FAKE16-NEXT: s_load_b32 s0, s[4:5], 0x241648; GFX12-SDAG-FAKE16-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01649; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x01650; GFX12-SDAG-FAKE16-NEXT: scratch_store_b8 v0, v1, s0 offset:-1 scope:SCOPE_SYS1651; GFX12-SDAG-FAKE16-NEXT: s_wait_storecnt 0x01652; GFX12-SDAG-FAKE16-NEXT: s_endpgm1653;1654; GFX12-GISEL-LABEL: soff1_voff1_negative:1655; GFX12-GISEL: ; %bb.0: ; %bb1656; GFX12-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x241657; GFX12-GISEL-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_and_b32 v0, 0x3ff, v01658; GFX12-GISEL-NEXT: s_wait_kmcnt 0x01659; GFX12-GISEL-NEXT: scratch_store_b8 v0, v1, s0 offset:-1 scope:SCOPE_SYS1660; GFX12-GISEL-NEXT: s_wait_storecnt 0x01661; GFX12-GISEL-NEXT: s_endpgm1662bb:1663 %a = alloca [64 x i8], align 4, addrspace(5)1664 %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff1665 %voff = call i32 @llvm.amdgcn.workitem.id.x()1666 %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff1667 %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 -11668 store volatile i8 1, ptr addrspace(5) %p11669 ret void1670}1671;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1672; GFX11-GISEL-FAKE16: {{.*}}1673; GFX11-GISEL-TRUE16: {{.*}}1674; GFX11-SDAG: {{.*}}1675; GFX12-GISEL-FAKE16: {{.*}}1676; GFX12-GISEL-TRUE16: {{.*}}1677; GFX12-SDAG: {{.*}}1678