448 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck --check-prefix=GFX9 %s3; RUN: llc -global-isel -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 < %s | FileCheck --check-prefix=GFX10 %s4; RUN: llc -global-isel -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 < %s | FileCheck --check-prefix=GFX11 %s5 6@gv = external addrspace(4) constant i327 8define amdgpu_kernel void @kernel_dynamic_stackalloc_sgpr_align4(i32 %n) {9; GFX9-LABEL: kernel_dynamic_stackalloc_sgpr_align4:10; GFX9: ; %bb.0:11; GFX9-NEXT: s_load_dword s5, s[8:9], 0x012; GFX9-NEXT: s_add_u32 s0, s0, s1713; GFX9-NEXT: s_movk_i32 s32, 0x40014; GFX9-NEXT: s_addc_u32 s1, s1, 015; GFX9-NEXT: s_mov_b32 s4, s3216; GFX9-NEXT: s_waitcnt lgkmcnt(0)17; GFX9-NEXT: s_lshl2_add_u32 s5, s5, 1518; GFX9-NEXT: s_and_b32 s5, s5, -1619; GFX9-NEXT: v_mov_b32_e32 v0, 020; GFX9-NEXT: v_mov_b32_e32 v1, s421; GFX9-NEXT: s_lshl_b32 s5, s5, 622; GFX9-NEXT: s_mov_b32 s33, 023; GFX9-NEXT: s_add_u32 s32, s4, s524; GFX9-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen25; GFX9-NEXT: s_endpgm26;27; GFX10-LABEL: kernel_dynamic_stackalloc_sgpr_align4:28; GFX10: ; %bb.0:29; GFX10-NEXT: s_load_dword s5, s[8:9], 0x030; GFX10-NEXT: s_movk_i32 s32, 0x20031; GFX10-NEXT: s_add_u32 s0, s0, s1732; GFX10-NEXT: s_mov_b32 s4, s3233; GFX10-NEXT: s_addc_u32 s1, s1, 034; GFX10-NEXT: v_mov_b32_e32 v0, 035; GFX10-NEXT: v_mov_b32_e32 v1, s436; GFX10-NEXT: s_mov_b32 s33, 037; GFX10-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen38; GFX10-NEXT: s_waitcnt lgkmcnt(0)39; GFX10-NEXT: s_lshl2_add_u32 s5, s5, 1540; GFX10-NEXT: s_and_b32 s5, s5, -1641; GFX10-NEXT: s_lshl_b32 s5, s5, 542; GFX10-NEXT: s_add_u32 s32, s4, s543; GFX10-NEXT: s_endpgm44;45; GFX11-LABEL: kernel_dynamic_stackalloc_sgpr_align4:46; GFX11: ; %bb.0:47; GFX11-NEXT: s_load_b32 s1, s[4:5], 0x048; GFX11-NEXT: v_mov_b32_e32 v0, 049; GFX11-NEXT: s_mov_b32 s32, 1650; GFX11-NEXT: s_mov_b32 s33, 051; GFX11-NEXT: s_mov_b32 s0, s3252; GFX11-NEXT: scratch_store_b32 off, v0, s053; GFX11-NEXT: s_waitcnt lgkmcnt(0)54; GFX11-NEXT: s_lshl2_add_u32 s1, s1, 1555; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)56; GFX11-NEXT: s_and_b32 s1, s1, -1657; GFX11-NEXT: s_lshl_b32 s1, s1, 558; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)59; GFX11-NEXT: s_add_u32 s32, s0, s160; GFX11-NEXT: s_endpgm61 %alloca = alloca i32, i32 %n, align 4, addrspace(5)62 store i32 0, ptr addrspace(5) %alloca63 ret void64}65 66define void @func_dynamic_stackalloc_sgpr_align4() {67; GFX9-LABEL: func_dynamic_stackalloc_sgpr_align4:68; GFX9: ; %bb.0:69; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)70; GFX9-NEXT: s_mov_b32 s7, s3371; GFX9-NEXT: s_mov_b32 s33, s3272; GFX9-NEXT: s_addk_i32 s32, 0x40073; GFX9-NEXT: s_getpc_b64 s[4:5]74; GFX9-NEXT: s_add_u32 s4, s4, gv@gotpcrel32@lo+475; GFX9-NEXT: s_addc_u32 s5, s5, gv@gotpcrel32@hi+1276; GFX9-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x077; GFX9-NEXT: s_mov_b32 s6, s3278; GFX9-NEXT: v_mov_b32_e32 v0, 079; GFX9-NEXT: v_mov_b32_e32 v1, s680; GFX9-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen81; GFX9-NEXT: s_waitcnt lgkmcnt(0)82; GFX9-NEXT: s_load_dword s4, s[4:5], 0x083; GFX9-NEXT: s_waitcnt lgkmcnt(0)84; GFX9-NEXT: s_lshl2_add_u32 s4, s4, 1585; GFX9-NEXT: s_and_b32 s4, s4, -1686; GFX9-NEXT: s_lshl_b32 s4, s4, 687; GFX9-NEXT: s_add_u32 s32, s6, s488; GFX9-NEXT: s_mov_b32 s32, s3389; GFX9-NEXT: s_mov_b32 s33, s790; GFX9-NEXT: s_waitcnt vmcnt(0)91; GFX9-NEXT: s_setpc_b64 s[30:31]92;93; GFX10-LABEL: func_dynamic_stackalloc_sgpr_align4:94; GFX10: ; %bb.0:95; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)96; GFX10-NEXT: s_mov_b32 s7, s3397; GFX10-NEXT: s_mov_b32 s33, s3298; GFX10-NEXT: s_addk_i32 s32, 0x20099; GFX10-NEXT: s_getpc_b64 s[4:5]100; GFX10-NEXT: s_add_u32 s4, s4, gv@gotpcrel32@lo+4101; GFX10-NEXT: s_addc_u32 s5, s5, gv@gotpcrel32@hi+12102; GFX10-NEXT: s_mov_b32 s6, s32103; GFX10-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0104; GFX10-NEXT: v_mov_b32_e32 v0, 0105; GFX10-NEXT: v_mov_b32_e32 v1, s6106; GFX10-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen107; GFX10-NEXT: s_waitcnt lgkmcnt(0)108; GFX10-NEXT: s_load_dword s4, s[4:5], 0x0109; GFX10-NEXT: s_waitcnt lgkmcnt(0)110; GFX10-NEXT: s_lshl2_add_u32 s4, s4, 15111; GFX10-NEXT: s_and_b32 s4, s4, -16112; GFX10-NEXT: s_lshl_b32 s4, s4, 5113; GFX10-NEXT: s_add_u32 s32, s6, s4114; GFX10-NEXT: s_mov_b32 s32, s33115; GFX10-NEXT: s_mov_b32 s33, s7116; GFX10-NEXT: s_setpc_b64 s[30:31]117;118; GFX11-LABEL: func_dynamic_stackalloc_sgpr_align4:119; GFX11: ; %bb.0:120; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)121; GFX11-NEXT: s_mov_b32 s3, s33122; GFX11-NEXT: s_mov_b32 s33, s32123; GFX11-NEXT: s_add_i32 s32, s32, 16124; GFX11-NEXT: s_getpc_b64 s[0:1]125; GFX11-NEXT: s_add_u32 s0, s0, gv@gotpcrel32@lo+4126; GFX11-NEXT: s_addc_u32 s1, s1, gv@gotpcrel32@hi+12127; GFX11-NEXT: v_mov_b32_e32 v0, 0128; GFX11-NEXT: s_load_b64 s[0:1], s[0:1], 0x0129; GFX11-NEXT: s_mov_b32 s2, s32130; GFX11-NEXT: scratch_store_b32 off, v0, s2131; GFX11-NEXT: s_waitcnt lgkmcnt(0)132; GFX11-NEXT: s_load_b32 s0, s[0:1], 0x0133; GFX11-NEXT: s_waitcnt lgkmcnt(0)134; GFX11-NEXT: s_lshl2_add_u32 s0, s0, 15135; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)136; GFX11-NEXT: s_and_b32 s0, s0, -16137; GFX11-NEXT: s_lshl_b32 s0, s0, 5138; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)139; GFX11-NEXT: s_add_u32 s32, s2, s0140; GFX11-NEXT: s_mov_b32 s32, s33141; GFX11-NEXT: s_mov_b32 s33, s3142; GFX11-NEXT: s_setpc_b64 s[30:31]143 %n = load i32, ptr addrspace(4) @gv, align 4144 %alloca = alloca i32, i32 %n, addrspace(5)145 store i32 0, ptr addrspace(5) %alloca146 ret void147}148 149define amdgpu_kernel void @kernel_dynamic_stackalloc_sgpr_align16(i32 %n) {150; GFX9-LABEL: kernel_dynamic_stackalloc_sgpr_align16:151; GFX9: ; %bb.0:152; GFX9-NEXT: s_load_dword s5, s[8:9], 0x0153; GFX9-NEXT: s_add_u32 s0, s0, s17154; GFX9-NEXT: s_movk_i32 s32, 0x400155; GFX9-NEXT: s_addc_u32 s1, s1, 0156; GFX9-NEXT: s_mov_b32 s4, s32157; GFX9-NEXT: s_waitcnt lgkmcnt(0)158; GFX9-NEXT: s_lshl2_add_u32 s5, s5, 15159; GFX9-NEXT: s_and_b32 s5, s5, -16160; GFX9-NEXT: v_mov_b32_e32 v0, 0161; GFX9-NEXT: v_mov_b32_e32 v1, s4162; GFX9-NEXT: s_lshl_b32 s5, s5, 6163; GFX9-NEXT: s_mov_b32 s33, 0164; GFX9-NEXT: s_add_u32 s32, s4, s5165; GFX9-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen166; GFX9-NEXT: s_endpgm167;168; GFX10-LABEL: kernel_dynamic_stackalloc_sgpr_align16:169; GFX10: ; %bb.0:170; GFX10-NEXT: s_load_dword s5, s[8:9], 0x0171; GFX10-NEXT: s_movk_i32 s32, 0x200172; GFX10-NEXT: s_add_u32 s0, s0, s17173; GFX10-NEXT: s_mov_b32 s4, s32174; GFX10-NEXT: s_addc_u32 s1, s1, 0175; GFX10-NEXT: v_mov_b32_e32 v0, 0176; GFX10-NEXT: v_mov_b32_e32 v1, s4177; GFX10-NEXT: s_mov_b32 s33, 0178; GFX10-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen179; GFX10-NEXT: s_waitcnt lgkmcnt(0)180; GFX10-NEXT: s_lshl2_add_u32 s5, s5, 15181; GFX10-NEXT: s_and_b32 s5, s5, -16182; GFX10-NEXT: s_lshl_b32 s5, s5, 5183; GFX10-NEXT: s_add_u32 s32, s4, s5184; GFX10-NEXT: s_endpgm185;186; GFX11-LABEL: kernel_dynamic_stackalloc_sgpr_align16:187; GFX11: ; %bb.0:188; GFX11-NEXT: s_load_b32 s1, s[4:5], 0x0189; GFX11-NEXT: v_mov_b32_e32 v0, 0190; GFX11-NEXT: s_mov_b32 s32, 16191; GFX11-NEXT: s_mov_b32 s33, 0192; GFX11-NEXT: s_mov_b32 s0, s32193; GFX11-NEXT: scratch_store_b32 off, v0, s0194; GFX11-NEXT: s_waitcnt lgkmcnt(0)195; GFX11-NEXT: s_lshl2_add_u32 s1, s1, 15196; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)197; GFX11-NEXT: s_and_b32 s1, s1, -16198; GFX11-NEXT: s_lshl_b32 s1, s1, 5199; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)200; GFX11-NEXT: s_add_u32 s32, s0, s1201; GFX11-NEXT: s_endpgm202 %alloca = alloca i32, i32 %n, align 16, addrspace(5)203 store i32 0, ptr addrspace(5) %alloca204 ret void205}206 207define void @func_dynamic_stackalloc_sgpr_align16() {208; GFX9-LABEL: func_dynamic_stackalloc_sgpr_align16:209; GFX9: ; %bb.0:210; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)211; GFX9-NEXT: s_mov_b32 s7, s33212; GFX9-NEXT: s_mov_b32 s33, s32213; GFX9-NEXT: s_addk_i32 s32, 0x400214; GFX9-NEXT: s_getpc_b64 s[4:5]215; GFX9-NEXT: s_add_u32 s4, s4, gv@gotpcrel32@lo+4216; GFX9-NEXT: s_addc_u32 s5, s5, gv@gotpcrel32@hi+12217; GFX9-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0218; GFX9-NEXT: s_mov_b32 s6, s32219; GFX9-NEXT: v_mov_b32_e32 v0, 0220; GFX9-NEXT: v_mov_b32_e32 v1, s6221; GFX9-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen222; GFX9-NEXT: s_waitcnt lgkmcnt(0)223; GFX9-NEXT: s_load_dword s4, s[4:5], 0x0224; GFX9-NEXT: s_waitcnt lgkmcnt(0)225; GFX9-NEXT: s_lshl2_add_u32 s4, s4, 15226; GFX9-NEXT: s_and_b32 s4, s4, -16227; GFX9-NEXT: s_lshl_b32 s4, s4, 6228; GFX9-NEXT: s_add_u32 s32, s6, s4229; GFX9-NEXT: s_mov_b32 s32, s33230; GFX9-NEXT: s_mov_b32 s33, s7231; GFX9-NEXT: s_waitcnt vmcnt(0)232; GFX9-NEXT: s_setpc_b64 s[30:31]233;234; GFX10-LABEL: func_dynamic_stackalloc_sgpr_align16:235; GFX10: ; %bb.0:236; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)237; GFX10-NEXT: s_mov_b32 s7, s33238; GFX10-NEXT: s_mov_b32 s33, s32239; GFX10-NEXT: s_addk_i32 s32, 0x200240; GFX10-NEXT: s_getpc_b64 s[4:5]241; GFX10-NEXT: s_add_u32 s4, s4, gv@gotpcrel32@lo+4242; GFX10-NEXT: s_addc_u32 s5, s5, gv@gotpcrel32@hi+12243; GFX10-NEXT: s_mov_b32 s6, s32244; GFX10-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0245; GFX10-NEXT: v_mov_b32_e32 v0, 0246; GFX10-NEXT: v_mov_b32_e32 v1, s6247; GFX10-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen248; GFX10-NEXT: s_waitcnt lgkmcnt(0)249; GFX10-NEXT: s_load_dword s4, s[4:5], 0x0250; GFX10-NEXT: s_waitcnt lgkmcnt(0)251; GFX10-NEXT: s_lshl2_add_u32 s4, s4, 15252; GFX10-NEXT: s_and_b32 s4, s4, -16253; GFX10-NEXT: s_lshl_b32 s4, s4, 5254; GFX10-NEXT: s_add_u32 s32, s6, s4255; GFX10-NEXT: s_mov_b32 s32, s33256; GFX10-NEXT: s_mov_b32 s33, s7257; GFX10-NEXT: s_setpc_b64 s[30:31]258;259; GFX11-LABEL: func_dynamic_stackalloc_sgpr_align16:260; GFX11: ; %bb.0:261; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)262; GFX11-NEXT: s_mov_b32 s3, s33263; GFX11-NEXT: s_mov_b32 s33, s32264; GFX11-NEXT: s_add_i32 s32, s32, 16265; GFX11-NEXT: s_getpc_b64 s[0:1]266; GFX11-NEXT: s_add_u32 s0, s0, gv@gotpcrel32@lo+4267; GFX11-NEXT: s_addc_u32 s1, s1, gv@gotpcrel32@hi+12268; GFX11-NEXT: v_mov_b32_e32 v0, 0269; GFX11-NEXT: s_load_b64 s[0:1], s[0:1], 0x0270; GFX11-NEXT: s_mov_b32 s2, s32271; GFX11-NEXT: scratch_store_b32 off, v0, s2272; GFX11-NEXT: s_waitcnt lgkmcnt(0)273; GFX11-NEXT: s_load_b32 s0, s[0:1], 0x0274; GFX11-NEXT: s_waitcnt lgkmcnt(0)275; GFX11-NEXT: s_lshl2_add_u32 s0, s0, 15276; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)277; GFX11-NEXT: s_and_b32 s0, s0, -16278; GFX11-NEXT: s_lshl_b32 s0, s0, 5279; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)280; GFX11-NEXT: s_add_u32 s32, s2, s0281; GFX11-NEXT: s_mov_b32 s32, s33282; GFX11-NEXT: s_mov_b32 s33, s3283; GFX11-NEXT: s_setpc_b64 s[30:31]284 %n = load i32, ptr addrspace(4) @gv, align 16285 %alloca = alloca i32, i32 %n, addrspace(5)286 store i32 0, ptr addrspace(5) %alloca287 ret void288}289 290define amdgpu_kernel void @kernel_dynamic_stackalloc_sgpr_align32(i32 %n) {291; GFX9-LABEL: kernel_dynamic_stackalloc_sgpr_align32:292; GFX9: ; %bb.0:293; GFX9-NEXT: s_load_dword s4, s[8:9], 0x0294; GFX9-NEXT: s_movk_i32 s32, 0x800295; GFX9-NEXT: s_add_u32 s0, s0, s17296; GFX9-NEXT: s_addc_u32 s1, s1, 0297; GFX9-NEXT: s_add_u32 s5, s32, 0x7ff298; GFX9-NEXT: s_waitcnt lgkmcnt(0)299; GFX9-NEXT: s_lshl2_add_u32 s4, s4, 15300; GFX9-NEXT: s_and_b32 s5, s5, 0xfffff800301; GFX9-NEXT: s_and_b32 s4, s4, -16302; GFX9-NEXT: v_mov_b32_e32 v0, 0303; GFX9-NEXT: v_mov_b32_e32 v1, s5304; GFX9-NEXT: s_lshl_b32 s4, s4, 6305; GFX9-NEXT: s_mov_b32 s33, 0306; GFX9-NEXT: s_add_u32 s32, s5, s4307; GFX9-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen308; GFX9-NEXT: s_endpgm309;310; GFX10-LABEL: kernel_dynamic_stackalloc_sgpr_align32:311; GFX10: ; %bb.0:312; GFX10-NEXT: s_load_dword s4, s[8:9], 0x0313; GFX10-NEXT: s_movk_i32 s32, 0x400314; GFX10-NEXT: s_add_u32 s0, s0, s17315; GFX10-NEXT: s_addc_u32 s1, s1, 0316; GFX10-NEXT: s_add_u32 s5, s32, 0x3ff317; GFX10-NEXT: v_mov_b32_e32 v0, 0318; GFX10-NEXT: s_and_b32 s5, s5, 0xfffffc00319; GFX10-NEXT: s_mov_b32 s33, 0320; GFX10-NEXT: v_mov_b32_e32 v1, s5321; GFX10-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen322; GFX10-NEXT: s_waitcnt lgkmcnt(0)323; GFX10-NEXT: s_lshl2_add_u32 s4, s4, 15324; GFX10-NEXT: s_and_b32 s4, s4, -16325; GFX10-NEXT: s_lshl_b32 s4, s4, 5326; GFX10-NEXT: s_add_u32 s32, s5, s4327; GFX10-NEXT: s_endpgm328;329; GFX11-LABEL: kernel_dynamic_stackalloc_sgpr_align32:330; GFX11: ; %bb.0:331; GFX11-NEXT: s_load_b32 s0, s[4:5], 0x0332; GFX11-NEXT: s_mov_b32 s32, 32333; GFX11-NEXT: v_mov_b32_e32 v0, 0334; GFX11-NEXT: s_add_u32 s1, s32, 0x3ff335; GFX11-NEXT: s_mov_b32 s33, 0336; GFX11-NEXT: s_and_b32 s1, s1, 0xfffffc00337; GFX11-NEXT: scratch_store_b32 off, v0, s1338; GFX11-NEXT: s_waitcnt lgkmcnt(0)339; GFX11-NEXT: s_lshl2_add_u32 s0, s0, 15340; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)341; GFX11-NEXT: s_and_b32 s0, s0, -16342; GFX11-NEXT: s_lshl_b32 s0, s0, 5343; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1)344; GFX11-NEXT: s_add_u32 s32, s1, s0345; GFX11-NEXT: s_endpgm346 %alloca = alloca i32, i32 %n, align 32, addrspace(5)347 store i32 0, ptr addrspace(5) %alloca348 ret void349}350 351define void @func_dynamic_stackalloc_sgpr_align32(ptr addrspace(1) %out) {352; GFX9-LABEL: func_dynamic_stackalloc_sgpr_align32:353; GFX9: ; %bb.0:354; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)355; GFX9-NEXT: s_mov_b32 s6, s33356; GFX9-NEXT: s_add_i32 s33, s32, 0x7c0357; GFX9-NEXT: s_and_b32 s33, s33, 0xfffff800358; GFX9-NEXT: s_mov_b32 s7, s34359; GFX9-NEXT: s_mov_b32 s34, s32360; GFX9-NEXT: s_addk_i32 s32, 0x1000361; GFX9-NEXT: s_getpc_b64 s[4:5]362; GFX9-NEXT: s_add_u32 s4, s4, gv@gotpcrel32@lo+4363; GFX9-NEXT: s_addc_u32 s5, s5, gv@gotpcrel32@hi+12364; GFX9-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0365; GFX9-NEXT: v_mov_b32_e32 v0, 0366; GFX9-NEXT: s_mov_b32 s33, s6367; GFX9-NEXT: s_waitcnt lgkmcnt(0)368; GFX9-NEXT: s_load_dword s4, s[4:5], 0x0369; GFX9-NEXT: s_add_u32 s5, s32, 0x7ff370; GFX9-NEXT: s_and_b32 s5, s5, 0xfffff800371; GFX9-NEXT: v_mov_b32_e32 v1, s5372; GFX9-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen373; GFX9-NEXT: s_waitcnt lgkmcnt(0)374; GFX9-NEXT: s_lshl2_add_u32 s4, s4, 15375; GFX9-NEXT: s_and_b32 s4, s4, -16376; GFX9-NEXT: s_lshl_b32 s4, s4, 6377; GFX9-NEXT: s_add_u32 s32, s5, s4378; GFX9-NEXT: s_mov_b32 s32, s34379; GFX9-NEXT: s_mov_b32 s34, s7380; GFX9-NEXT: s_waitcnt vmcnt(0)381; GFX9-NEXT: s_setpc_b64 s[30:31]382;383; GFX10-LABEL: func_dynamic_stackalloc_sgpr_align32:384; GFX10: ; %bb.0:385; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)386; GFX10-NEXT: s_mov_b32 s6, s33387; GFX10-NEXT: s_add_i32 s33, s32, 0x3e0388; GFX10-NEXT: s_mov_b32 s7, s34389; GFX10-NEXT: s_and_b32 s33, s33, 0xfffffc00390; GFX10-NEXT: s_mov_b32 s34, s32391; GFX10-NEXT: s_addk_i32 s32, 0x800392; GFX10-NEXT: s_getpc_b64 s[4:5]393; GFX10-NEXT: s_add_u32 s4, s4, gv@gotpcrel32@lo+4394; GFX10-NEXT: s_addc_u32 s5, s5, gv@gotpcrel32@hi+12395; GFX10-NEXT: v_mov_b32_e32 v0, 0396; GFX10-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0397; GFX10-NEXT: s_mov_b32 s33, s6398; GFX10-NEXT: s_waitcnt lgkmcnt(0)399; GFX10-NEXT: s_load_dword s4, s[4:5], 0x0400; GFX10-NEXT: s_add_u32 s5, s32, 0x3ff401; GFX10-NEXT: s_and_b32 s5, s5, 0xfffffc00402; GFX10-NEXT: v_mov_b32_e32 v1, s5403; GFX10-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen404; GFX10-NEXT: s_waitcnt lgkmcnt(0)405; GFX10-NEXT: s_lshl2_add_u32 s4, s4, 15406; GFX10-NEXT: s_and_b32 s4, s4, -16407; GFX10-NEXT: s_lshl_b32 s4, s4, 5408; GFX10-NEXT: s_add_u32 s32, s5, s4409; GFX10-NEXT: s_mov_b32 s32, s34410; GFX10-NEXT: s_mov_b32 s34, s7411; GFX10-NEXT: s_setpc_b64 s[30:31]412;413; GFX11-LABEL: func_dynamic_stackalloc_sgpr_align32:414; GFX11: ; %bb.0:415; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)416; GFX11-NEXT: s_mov_b32 s2, s33417; GFX11-NEXT: s_add_i32 s33, s32, 31418; GFX11-NEXT: s_mov_b32 s3, s34419; GFX11-NEXT: s_and_not1_b32 s33, s33, 31420; GFX11-NEXT: s_mov_b32 s34, s32421; GFX11-NEXT: s_add_i32 s32, s32, 64422; GFX11-NEXT: s_getpc_b64 s[0:1]423; GFX11-NEXT: s_add_u32 s0, s0, gv@gotpcrel32@lo+4424; GFX11-NEXT: s_addc_u32 s1, s1, gv@gotpcrel32@hi+12425; GFX11-NEXT: v_mov_b32_e32 v0, 0426; GFX11-NEXT: s_load_b64 s[0:1], s[0:1], 0x0427; GFX11-NEXT: s_mov_b32 s33, s2428; GFX11-NEXT: s_waitcnt lgkmcnt(0)429; GFX11-NEXT: s_load_b32 s0, s[0:1], 0x0430; GFX11-NEXT: s_add_u32 s1, s32, 0x3ff431; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(SALU_CYCLE_1)432; GFX11-NEXT: s_and_b32 s1, s1, 0xfffffc00433; GFX11-NEXT: scratch_store_b32 off, v0, s1434; GFX11-NEXT: s_waitcnt lgkmcnt(0)435; GFX11-NEXT: s_lshl2_add_u32 s0, s0, 15436; GFX11-NEXT: s_and_b32 s0, s0, -16437; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)438; GFX11-NEXT: s_lshl_b32 s0, s0, 5439; GFX11-NEXT: s_add_u32 s32, s1, s0440; GFX11-NEXT: s_mov_b32 s32, s34441; GFX11-NEXT: s_mov_b32 s34, s3442; GFX11-NEXT: s_setpc_b64 s[30:31]443 %n = load i32, ptr addrspace(4) @gv444 %alloca = alloca i32, i32 %n, align 32, addrspace(5)445 store i32 0, ptr addrspace(5) %alloca446 ret void447}448