2709 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9-SDAG %s3; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9-GISEL %s4; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 < %s | FileCheck -check-prefix=GFX11-SDAG %s5; RUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 < %s | FileCheck -check-prefix=GFX11-GISEL %s6 7define amdgpu_kernel void @test_dynamic_stackalloc_kernel_uniform(i32 %n) {8; GFX9-SDAG-LABEL: test_dynamic_stackalloc_kernel_uniform:9; GFX9-SDAG: ; %bb.0:10; GFX9-SDAG-NEXT: s_load_dword s4, s[8:9], 0x011; GFX9-SDAG-NEXT: s_add_u32 s0, s0, s1712; GFX9-SDAG-NEXT: s_addc_u32 s1, s1, 013; GFX9-SDAG-NEXT: s_movk_i32 s32, 0x40014; GFX9-SDAG-NEXT: s_mov_b32 s5, s3215; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)16; GFX9-SDAG-NEXT: s_lshl2_add_u32 s4, s4, 1517; GFX9-SDAG-NEXT: s_and_b32 s4, s4, -1618; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 0x7b19; GFX9-SDAG-NEXT: s_lshl_b32 s4, s4, 620; GFX9-SDAG-NEXT: s_mov_b32 s33, 021; GFX9-SDAG-NEXT: s_add_i32 s32, s5, s422; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s523; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)24; GFX9-SDAG-NEXT: s_endpgm25;26; GFX9-GISEL-LABEL: test_dynamic_stackalloc_kernel_uniform:27; GFX9-GISEL: ; %bb.0:28; GFX9-GISEL-NEXT: s_load_dword s5, s[8:9], 0x029; GFX9-GISEL-NEXT: s_add_u32 s0, s0, s1730; GFX9-GISEL-NEXT: s_movk_i32 s32, 0x40031; GFX9-GISEL-NEXT: s_addc_u32 s1, s1, 032; GFX9-GISEL-NEXT: s_mov_b32 s4, s3233; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)34; GFX9-GISEL-NEXT: s_lshl2_add_u32 s5, s5, 1535; GFX9-GISEL-NEXT: s_and_b32 s5, s5, -1636; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 0x7b37; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s438; GFX9-GISEL-NEXT: s_lshl_b32 s5, s5, 639; GFX9-GISEL-NEXT: s_mov_b32 s33, 040; GFX9-GISEL-NEXT: s_add_u32 s32, s4, s541; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen42; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)43; GFX9-GISEL-NEXT: s_endpgm44;45; GFX11-SDAG-LABEL: test_dynamic_stackalloc_kernel_uniform:46; GFX11-SDAG: ; %bb.0:47; GFX11-SDAG-NEXT: s_load_b32 s0, s[4:5], 0x048; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 0x7b49; GFX11-SDAG-NEXT: s_mov_b32 s32, 1650; GFX11-SDAG-NEXT: s_mov_b32 s33, 051; GFX11-SDAG-NEXT: s_mov_b32 s1, s3252; GFX11-SDAG-NEXT: scratch_store_b32 off, v0, s1 dlc53; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x054; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)55; GFX11-SDAG-NEXT: s_lshl2_add_u32 s0, s0, 1556; GFX11-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)57; GFX11-SDAG-NEXT: s_and_b32 s0, s0, -1658; GFX11-SDAG-NEXT: s_lshl_b32 s0, s0, 559; GFX11-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)60; GFX11-SDAG-NEXT: s_add_i32 s32, s1, s061; GFX11-SDAG-NEXT: s_endpgm62;63; GFX11-GISEL-LABEL: test_dynamic_stackalloc_kernel_uniform:64; GFX11-GISEL: ; %bb.0:65; GFX11-GISEL-NEXT: s_load_b32 s1, s[4:5], 0x066; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 0x7b67; GFX11-GISEL-NEXT: s_mov_b32 s32, 1668; GFX11-GISEL-NEXT: s_mov_b32 s33, 069; GFX11-GISEL-NEXT: s_mov_b32 s0, s3270; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s0 dlc71; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x072; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)73; GFX11-GISEL-NEXT: s_lshl2_add_u32 s1, s1, 1574; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)75; GFX11-GISEL-NEXT: s_and_b32 s1, s1, -1676; GFX11-GISEL-NEXT: s_lshl_b32 s1, s1, 577; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)78; GFX11-GISEL-NEXT: s_add_u32 s32, s0, s179; GFX11-GISEL-NEXT: s_endpgm80 %alloca = alloca i32, i32 %n, addrspace(5)81 store volatile i32 123, ptr addrspace(5) %alloca82 ret void83}84 85define amdgpu_kernel void @test_dynamic_stackalloc_kernel_uniform_over_aligned(i32 %n) {86; GFX9-SDAG-LABEL: test_dynamic_stackalloc_kernel_uniform_over_aligned:87; GFX9-SDAG: ; %bb.0:88; GFX9-SDAG-NEXT: s_load_dword s4, s[8:9], 0x089; GFX9-SDAG-NEXT: s_movk_i32 s32, 0x200090; GFX9-SDAG-NEXT: s_add_u32 s0, s0, s1791; GFX9-SDAG-NEXT: s_addc_u32 s1, s1, 092; GFX9-SDAG-NEXT: s_add_i32 s5, s32, 0x1fff93; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)94; GFX9-SDAG-NEXT: s_lshl2_add_u32 s4, s4, 1595; GFX9-SDAG-NEXT: s_and_b32 s5, s5, 0xffffe00096; GFX9-SDAG-NEXT: s_and_b32 s4, s4, -1697; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 1098; GFX9-SDAG-NEXT: s_lshl_b32 s4, s4, 699; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s5100; GFX9-SDAG-NEXT: s_mov_b32 s33, 0101; GFX9-SDAG-NEXT: s_add_i32 s32, s5, s4102; GFX9-SDAG-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen103; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)104; GFX9-SDAG-NEXT: s_endpgm105;106; GFX9-GISEL-LABEL: test_dynamic_stackalloc_kernel_uniform_over_aligned:107; GFX9-GISEL: ; %bb.0:108; GFX9-GISEL-NEXT: s_load_dword s4, s[8:9], 0x0109; GFX9-GISEL-NEXT: s_movk_i32 s32, 0x2000110; GFX9-GISEL-NEXT: s_add_u32 s0, s0, s17111; GFX9-GISEL-NEXT: s_addc_u32 s1, s1, 0112; GFX9-GISEL-NEXT: s_add_u32 s5, s32, 0x1fff113; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)114; GFX9-GISEL-NEXT: s_lshl2_add_u32 s4, s4, 15115; GFX9-GISEL-NEXT: s_and_b32 s5, s5, 0xffffe000116; GFX9-GISEL-NEXT: s_and_b32 s4, s4, -16117; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 10118; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s5119; GFX9-GISEL-NEXT: s_lshl_b32 s4, s4, 6120; GFX9-GISEL-NEXT: s_mov_b32 s33, 0121; GFX9-GISEL-NEXT: s_add_u32 s32, s5, s4122; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen123; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)124; GFX9-GISEL-NEXT: s_endpgm125;126; GFX11-SDAG-LABEL: test_dynamic_stackalloc_kernel_uniform_over_aligned:127; GFX11-SDAG: ; %bb.0:128; GFX11-SDAG-NEXT: s_load_b32 s0, s[4:5], 0x0129; GFX11-SDAG-NEXT: s_movk_i32 s32, 0x80130; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 10131; GFX11-SDAG-NEXT: s_add_i32 s1, s32, 0xfff132; GFX11-SDAG-NEXT: s_mov_b32 s33, 0133; GFX11-SDAG-NEXT: s_and_b32 s1, s1, 0xfffff000134; GFX11-SDAG-NEXT: scratch_store_b32 off, v0, s1 dlc135; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x0136; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)137; GFX11-SDAG-NEXT: s_lshl2_add_u32 s0, s0, 15138; GFX11-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)139; GFX11-SDAG-NEXT: s_and_b32 s0, s0, -16140; GFX11-SDAG-NEXT: s_lshl_b32 s0, s0, 5141; GFX11-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)142; GFX11-SDAG-NEXT: s_add_i32 s32, s1, s0143; GFX11-SDAG-NEXT: s_endpgm144;145; GFX11-GISEL-LABEL: test_dynamic_stackalloc_kernel_uniform_over_aligned:146; GFX11-GISEL: ; %bb.0:147; GFX11-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x0148; GFX11-GISEL-NEXT: s_movk_i32 s32, 0x80149; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 10150; GFX11-GISEL-NEXT: s_add_u32 s1, s32, 0xfff151; GFX11-GISEL-NEXT: s_mov_b32 s33, 0152; GFX11-GISEL-NEXT: s_and_b32 s1, s1, 0xfffff000153; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s1 dlc154; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0155; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)156; GFX11-GISEL-NEXT: s_lshl2_add_u32 s0, s0, 15157; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)158; GFX11-GISEL-NEXT: s_and_b32 s0, s0, -16159; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 5160; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)161; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s0162; GFX11-GISEL-NEXT: s_endpgm163 %alloca = alloca i32, i32 %n, align 128, addrspace(5)164 store volatile i32 10, ptr addrspace(5) %alloca165 ret void166}167 168define amdgpu_kernel void @test_dynamic_stackalloc_kernel_uniform_under_aligned(i32 %n) {169; GFX9-SDAG-LABEL: test_dynamic_stackalloc_kernel_uniform_under_aligned:170; GFX9-SDAG: ; %bb.0:171; GFX9-SDAG-NEXT: s_load_dword s4, s[8:9], 0x0172; GFX9-SDAG-NEXT: s_add_u32 s0, s0, s17173; GFX9-SDAG-NEXT: s_addc_u32 s1, s1, 0174; GFX9-SDAG-NEXT: s_movk_i32 s32, 0x400175; GFX9-SDAG-NEXT: s_mov_b32 s5, s32176; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)177; GFX9-SDAG-NEXT: s_lshl2_add_u32 s4, s4, 15178; GFX9-SDAG-NEXT: s_and_b32 s4, s4, -16179; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 22180; GFX9-SDAG-NEXT: s_lshl_b32 s4, s4, 6181; GFX9-SDAG-NEXT: s_mov_b32 s33, 0182; GFX9-SDAG-NEXT: s_add_i32 s32, s5, s4183; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s5184; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)185; GFX9-SDAG-NEXT: s_endpgm186;187; GFX9-GISEL-LABEL: test_dynamic_stackalloc_kernel_uniform_under_aligned:188; GFX9-GISEL: ; %bb.0:189; GFX9-GISEL-NEXT: s_load_dword s5, s[8:9], 0x0190; GFX9-GISEL-NEXT: s_add_u32 s0, s0, s17191; GFX9-GISEL-NEXT: s_movk_i32 s32, 0x400192; GFX9-GISEL-NEXT: s_addc_u32 s1, s1, 0193; GFX9-GISEL-NEXT: s_mov_b32 s4, s32194; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)195; GFX9-GISEL-NEXT: s_lshl2_add_u32 s5, s5, 15196; GFX9-GISEL-NEXT: s_and_b32 s5, s5, -16197; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 22198; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s4199; GFX9-GISEL-NEXT: s_lshl_b32 s5, s5, 6200; GFX9-GISEL-NEXT: s_mov_b32 s33, 0201; GFX9-GISEL-NEXT: s_add_u32 s32, s4, s5202; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen203; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)204; GFX9-GISEL-NEXT: s_endpgm205;206; GFX11-SDAG-LABEL: test_dynamic_stackalloc_kernel_uniform_under_aligned:207; GFX11-SDAG: ; %bb.0:208; GFX11-SDAG-NEXT: s_load_b32 s0, s[4:5], 0x0209; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 22210; GFX11-SDAG-NEXT: s_mov_b32 s32, 16211; GFX11-SDAG-NEXT: s_mov_b32 s33, 0212; GFX11-SDAG-NEXT: s_mov_b32 s1, s32213; GFX11-SDAG-NEXT: scratch_store_b32 off, v0, s1 dlc214; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x0215; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)216; GFX11-SDAG-NEXT: s_lshl2_add_u32 s0, s0, 15217; GFX11-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)218; GFX11-SDAG-NEXT: s_and_b32 s0, s0, -16219; GFX11-SDAG-NEXT: s_lshl_b32 s0, s0, 5220; GFX11-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)221; GFX11-SDAG-NEXT: s_add_i32 s32, s1, s0222; GFX11-SDAG-NEXT: s_endpgm223;224; GFX11-GISEL-LABEL: test_dynamic_stackalloc_kernel_uniform_under_aligned:225; GFX11-GISEL: ; %bb.0:226; GFX11-GISEL-NEXT: s_load_b32 s1, s[4:5], 0x0227; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 22228; GFX11-GISEL-NEXT: s_mov_b32 s32, 16229; GFX11-GISEL-NEXT: s_mov_b32 s33, 0230; GFX11-GISEL-NEXT: s_mov_b32 s0, s32231; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s0 dlc232; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0233; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)234; GFX11-GISEL-NEXT: s_lshl2_add_u32 s1, s1, 15235; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)236; GFX11-GISEL-NEXT: s_and_b32 s1, s1, -16237; GFX11-GISEL-NEXT: s_lshl_b32 s1, s1, 5238; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)239; GFX11-GISEL-NEXT: s_add_u32 s32, s0, s1240; GFX11-GISEL-NEXT: s_endpgm241 %alloca = alloca i32, i32 %n, align 2, addrspace(5)242 store volatile i32 22, ptr addrspace(5) %alloca243 ret void244}245 246define amdgpu_kernel void @test_dynamic_stackalloc_kernel_divergent() {247; GFX9-SDAG-LABEL: test_dynamic_stackalloc_kernel_divergent:248; GFX9-SDAG: ; %bb.0:249; GFX9-SDAG-NEXT: s_add_u32 s0, s0, s17250; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 15251; GFX9-SDAG-NEXT: s_addc_u32 s1, s1, 0252; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v0253; GFX9-SDAG-NEXT: s_mov_b64 s[4:5], exec254; GFX9-SDAG-NEXT: s_mov_b32 s6, 0255; GFX9-SDAG-NEXT: s_mov_b32 s33, 0256; GFX9-SDAG-NEXT: s_movk_i32 s32, 0x400257; GFX9-SDAG-NEXT: .LBB3_1: ; =>This Inner Loop Header: Depth=1258; GFX9-SDAG-NEXT: s_ff1_i32_b64 s7, s[4:5]259; GFX9-SDAG-NEXT: v_readlane_b32 s8, v0, s7260; GFX9-SDAG-NEXT: s_bitset0_b64 s[4:5], s7261; GFX9-SDAG-NEXT: s_max_u32 s6, s6, s8262; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[4:5], 0263; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB3_1264; GFX9-SDAG-NEXT: ; %bb.2:265; GFX9-SDAG-NEXT: s_mov_b32 s4, s32266; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s4267; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, s6, 6, v0268; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v0269; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 0x7b270; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s4271; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)272; GFX9-SDAG-NEXT: s_endpgm273;274; GFX9-GISEL-LABEL: test_dynamic_stackalloc_kernel_divergent:275; GFX9-GISEL: ; %bb.0:276; GFX9-GISEL-NEXT: s_add_u32 s0, s0, s17277; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 15278; GFX9-GISEL-NEXT: s_addc_u32 s1, s1, 0279; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v0280; GFX9-GISEL-NEXT: s_mov_b64 s[4:5], exec281; GFX9-GISEL-NEXT: s_mov_b32 s6, 0282; GFX9-GISEL-NEXT: s_mov_b32 s33, 0283; GFX9-GISEL-NEXT: s_movk_i32 s32, 0x400284; GFX9-GISEL-NEXT: .LBB3_1: ; =>This Inner Loop Header: Depth=1285; GFX9-GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]286; GFX9-GISEL-NEXT: v_readlane_b32 s8, v0, s7287; GFX9-GISEL-NEXT: s_bitset0_b64 s[4:5], s7288; GFX9-GISEL-NEXT: s_max_u32 s6, s6, s8289; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[4:5], 0290; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB3_1291; GFX9-GISEL-NEXT: ; %bb.2:292; GFX9-GISEL-NEXT: s_mov_b32 s4, s32293; GFX9-GISEL-NEXT: s_lshl_b32 s5, s6, 6294; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 0x7b295; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s4296; GFX9-GISEL-NEXT: s_add_u32 s32, s4, s5297; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen298; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)299; GFX9-GISEL-NEXT: s_endpgm300;301; GFX11-SDAG-LABEL: test_dynamic_stackalloc_kernel_divergent:302; GFX11-SDAG: ; %bb.0:303; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0304; GFX11-SDAG-NEXT: s_mov_b32 s1, exec_lo305; GFX11-SDAG-NEXT: s_mov_b32 s0, 0306; GFX11-SDAG-NEXT: s_mov_b32 s33, 0307; GFX11-SDAG-NEXT: s_mov_b32 s32, 16308; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 15309; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)310; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v0311; GFX11-SDAG-NEXT: .LBB3_1: ; =>This Inner Loop Header: Depth=1312; GFX11-SDAG-NEXT: s_ctz_i32_b32 s2, s1313; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)314; GFX11-SDAG-NEXT: v_readlane_b32 s3, v0, s2315; GFX11-SDAG-NEXT: s_bitset0_b32 s1, s2316; GFX11-SDAG-NEXT: s_max_u32 s0, s0, s3317; GFX11-SDAG-NEXT: s_cmp_lg_u32 s1, 0318; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB3_1319; GFX11-SDAG-NEXT: ; %bb.2:320; GFX11-SDAG-NEXT: s_mov_b32 s1, s32321; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, 0x7b322; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s0, 5, s1323; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s1 dlc324; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x0325; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v0326; GFX11-SDAG-NEXT: s_endpgm327;328; GFX11-GISEL-LABEL: test_dynamic_stackalloc_kernel_divergent:329; GFX11-GISEL: ; %bb.0:330; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0331; GFX11-GISEL-NEXT: s_mov_b32 s1, exec_lo332; GFX11-GISEL-NEXT: s_mov_b32 s0, 0333; GFX11-GISEL-NEXT: s_mov_b32 s33, 0334; GFX11-GISEL-NEXT: s_mov_b32 s32, 16335; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 15336; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)337; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v0338; GFX11-GISEL-NEXT: .LBB3_1: ; =>This Inner Loop Header: Depth=1339; GFX11-GISEL-NEXT: s_ctz_i32_b32 s2, s1340; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)341; GFX11-GISEL-NEXT: v_readlane_b32 s3, v0, s2342; GFX11-GISEL-NEXT: s_bitset0_b32 s1, s2343; GFX11-GISEL-NEXT: s_max_u32 s0, s0, s3344; GFX11-GISEL-NEXT: s_cmp_lg_u32 s1, 0345; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB3_1346; GFX11-GISEL-NEXT: ; %bb.2:347; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 0x7b348; GFX11-GISEL-NEXT: s_mov_b32 s1, s32349; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 5350; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)351; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s0352; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s1 dlc353; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0354; GFX11-GISEL-NEXT: s_endpgm355 %idx = call i32 @llvm.amdgcn.workitem.id.x()356 %alloca = alloca float, i32 %idx, addrspace(5)357 store volatile i32 123, ptr addrspace(5) %alloca358 ret void359}360 361define amdgpu_kernel void @test_dynamic_stackalloc_kernel_divergent_over_aligned() {362; GFX9-SDAG-LABEL: test_dynamic_stackalloc_kernel_divergent_over_aligned:363; GFX9-SDAG: ; %bb.0:364; GFX9-SDAG-NEXT: s_movk_i32 s32, 0x2000365; GFX9-SDAG-NEXT: s_add_u32 s0, s0, s17366; GFX9-SDAG-NEXT: s_addc_u32 s1, s1, 0367; GFX9-SDAG-NEXT: s_add_i32 s4, s32, 0x1fff368; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 15369; GFX9-SDAG-NEXT: s_and_b32 s6, s4, 0xffffe000370; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v0371; GFX9-SDAG-NEXT: s_mov_b64 s[4:5], exec372; GFX9-SDAG-NEXT: s_mov_b32 s7, 0373; GFX9-SDAG-NEXT: s_mov_b32 s33, 0374; GFX9-SDAG-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=1375; GFX9-SDAG-NEXT: s_ff1_i32_b64 s8, s[4:5]376; GFX9-SDAG-NEXT: v_readlane_b32 s9, v0, s8377; GFX9-SDAG-NEXT: s_bitset0_b64 s[4:5], s8378; GFX9-SDAG-NEXT: s_max_u32 s7, s7, s9379; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[4:5], 0380; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB4_1381; GFX9-SDAG-NEXT: ; %bb.2:382; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s6383; GFX9-SDAG-NEXT: v_lshl_add_u32 v1, s7, 6, v0384; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v1385; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, 0x1bc386; GFX9-SDAG-NEXT: buffer_store_dword v1, v0, s[0:3], 0 offen387; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)388; GFX9-SDAG-NEXT: s_endpgm389;390; GFX9-GISEL-LABEL: test_dynamic_stackalloc_kernel_divergent_over_aligned:391; GFX9-GISEL: ; %bb.0:392; GFX9-GISEL-NEXT: s_add_u32 s0, s0, s17393; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 15394; GFX9-GISEL-NEXT: s_addc_u32 s1, s1, 0395; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v0396; GFX9-GISEL-NEXT: s_mov_b64 s[4:5], exec397; GFX9-GISEL-NEXT: s_mov_b32 s6, 0398; GFX9-GISEL-NEXT: s_mov_b32 s33, 0399; GFX9-GISEL-NEXT: s_movk_i32 s32, 0x2000400; GFX9-GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=1401; GFX9-GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]402; GFX9-GISEL-NEXT: v_readlane_b32 s8, v0, s7403; GFX9-GISEL-NEXT: s_bitset0_b64 s[4:5], s7404; GFX9-GISEL-NEXT: s_max_u32 s6, s6, s8405; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[4:5], 0406; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB4_1407; GFX9-GISEL-NEXT: ; %bb.2:408; GFX9-GISEL-NEXT: s_add_u32 s5, s32, 0x1fff409; GFX9-GISEL-NEXT: s_and_b32 s5, s5, 0xffffe000410; GFX9-GISEL-NEXT: s_lshl_b32 s4, s6, 6411; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 0x1bc412; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s5413; GFX9-GISEL-NEXT: s_add_u32 s32, s5, s4414; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen415; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)416; GFX9-GISEL-NEXT: s_endpgm417;418; GFX11-SDAG-LABEL: test_dynamic_stackalloc_kernel_divergent_over_aligned:419; GFX11-SDAG: ; %bb.0:420; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0421; GFX11-SDAG-NEXT: s_movk_i32 s32, 0x80422; GFX11-SDAG-NEXT: s_mov_b32 s2, exec_lo423; GFX11-SDAG-NEXT: s_add_i32 s0, s32, 0xfff424; GFX11-SDAG-NEXT: s_mov_b32 s1, 0425; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 15426; GFX11-SDAG-NEXT: s_and_b32 s0, s0, 0xfffff000427; GFX11-SDAG-NEXT: s_mov_b32 s33, 0428; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)429; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v0430; GFX11-SDAG-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=1431; GFX11-SDAG-NEXT: s_ctz_i32_b32 s3, s2432; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)433; GFX11-SDAG-NEXT: v_readlane_b32 s4, v0, s3434; GFX11-SDAG-NEXT: s_bitset0_b32 s2, s3435; GFX11-SDAG-NEXT: s_max_u32 s1, s1, s4436; GFX11-SDAG-NEXT: s_cmp_lg_u32 s2, 0437; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB4_1438; GFX11-SDAG-NEXT: ; %bb.2:439; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s1, 5, s0440; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, 0x1bc441; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)442; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v0443; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s0 dlc444; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x0445; GFX11-SDAG-NEXT: s_endpgm446;447; GFX11-GISEL-LABEL: test_dynamic_stackalloc_kernel_divergent_over_aligned:448; GFX11-GISEL: ; %bb.0:449; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0450; GFX11-GISEL-NEXT: s_mov_b32 s1, exec_lo451; GFX11-GISEL-NEXT: s_mov_b32 s0, 0452; GFX11-GISEL-NEXT: s_mov_b32 s33, 0453; GFX11-GISEL-NEXT: s_movk_i32 s32, 0x80454; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 15455; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)456; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v0457; GFX11-GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=1458; GFX11-GISEL-NEXT: s_ctz_i32_b32 s2, s1459; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)460; GFX11-GISEL-NEXT: v_readlane_b32 s3, v0, s2461; GFX11-GISEL-NEXT: s_bitset0_b32 s1, s2462; GFX11-GISEL-NEXT: s_max_u32 s0, s0, s3463; GFX11-GISEL-NEXT: s_cmp_lg_u32 s1, 0464; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB4_1465; GFX11-GISEL-NEXT: ; %bb.2:466; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 0x1bc467; GFX11-GISEL-NEXT: s_add_u32 s1, s32, 0xfff468; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 5469; GFX11-GISEL-NEXT: s_and_b32 s1, s1, 0xfffff000470; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)471; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s0472; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s1 dlc473; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0474; GFX11-GISEL-NEXT: s_endpgm475 %idx = call i32 @llvm.amdgcn.workitem.id.x()476 %alloca = alloca i32, i32 %idx, align 128, addrspace(5)477 store volatile i32 444, ptr addrspace(5) %alloca478 ret void479}480 481define amdgpu_kernel void @test_dynamic_stackalloc_kernel_divergent_under_aligned() {482; GFX9-SDAG-LABEL: test_dynamic_stackalloc_kernel_divergent_under_aligned:483; GFX9-SDAG: ; %bb.0:484; GFX9-SDAG-NEXT: s_add_u32 s0, s0, s17485; GFX9-SDAG-NEXT: s_addc_u32 s1, s1, 0486; GFX9-SDAG-NEXT: v_lshlrev_b32_e32 v0, 4, v0487; GFX9-SDAG-NEXT: s_mov_b64 s[4:5], exec488; GFX9-SDAG-NEXT: s_mov_b32 s6, 0489; GFX9-SDAG-NEXT: s_mov_b32 s33, 0490; GFX9-SDAG-NEXT: s_movk_i32 s32, 0x400491; GFX9-SDAG-NEXT: .LBB5_1: ; =>This Inner Loop Header: Depth=1492; GFX9-SDAG-NEXT: s_ff1_i32_b64 s7, s[4:5]493; GFX9-SDAG-NEXT: v_readlane_b32 s8, v0, s7494; GFX9-SDAG-NEXT: s_bitset0_b64 s[4:5], s7495; GFX9-SDAG-NEXT: s_max_u32 s6, s6, s8496; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[4:5], 0497; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB5_1498; GFX9-SDAG-NEXT: ; %bb.2:499; GFX9-SDAG-NEXT: s_mov_b32 s4, s32500; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s4501; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, s6, 6, v0502; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v0503; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 0x29a504; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s4505; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)506; GFX9-SDAG-NEXT: s_endpgm507;508; GFX9-GISEL-LABEL: test_dynamic_stackalloc_kernel_divergent_under_aligned:509; GFX9-GISEL: ; %bb.0:510; GFX9-GISEL-NEXT: s_add_u32 s0, s0, s17511; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v0, 4, 15512; GFX9-GISEL-NEXT: s_addc_u32 s1, s1, 0513; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v0514; GFX9-GISEL-NEXT: s_mov_b64 s[4:5], exec515; GFX9-GISEL-NEXT: s_mov_b32 s6, 0516; GFX9-GISEL-NEXT: s_mov_b32 s33, 0517; GFX9-GISEL-NEXT: s_movk_i32 s32, 0x400518; GFX9-GISEL-NEXT: .LBB5_1: ; =>This Inner Loop Header: Depth=1519; GFX9-GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]520; GFX9-GISEL-NEXT: v_readlane_b32 s8, v0, s7521; GFX9-GISEL-NEXT: s_bitset0_b64 s[4:5], s7522; GFX9-GISEL-NEXT: s_max_u32 s6, s6, s8523; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[4:5], 0524; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB5_1525; GFX9-GISEL-NEXT: ; %bb.2:526; GFX9-GISEL-NEXT: s_mov_b32 s4, s32527; GFX9-GISEL-NEXT: s_lshl_b32 s5, s6, 6528; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 0x29a529; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s4530; GFX9-GISEL-NEXT: s_add_u32 s32, s4, s5531; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen532; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)533; GFX9-GISEL-NEXT: s_endpgm534;535; GFX11-SDAG-LABEL: test_dynamic_stackalloc_kernel_divergent_under_aligned:536; GFX11-SDAG: ; %bb.0:537; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0538; GFX11-SDAG-NEXT: s_mov_b32 s1, exec_lo539; GFX11-SDAG-NEXT: s_mov_b32 s0, 0540; GFX11-SDAG-NEXT: s_mov_b32 s33, 0541; GFX11-SDAG-NEXT: s_mov_b32 s32, 16542; GFX11-SDAG-NEXT: v_lshlrev_b32_e32 v0, 4, v0543; GFX11-SDAG-NEXT: .LBB5_1: ; =>This Inner Loop Header: Depth=1544; GFX11-SDAG-NEXT: s_ctz_i32_b32 s2, s1545; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)546; GFX11-SDAG-NEXT: v_readlane_b32 s3, v0, s2547; GFX11-SDAG-NEXT: s_bitset0_b32 s1, s2548; GFX11-SDAG-NEXT: s_max_u32 s0, s0, s3549; GFX11-SDAG-NEXT: s_cmp_lg_u32 s1, 0550; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB5_1551; GFX11-SDAG-NEXT: ; %bb.2:552; GFX11-SDAG-NEXT: s_mov_b32 s1, s32553; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, 0x29a554; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s0, 5, s1555; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s1 dlc556; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x0557; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v0558; GFX11-SDAG-NEXT: s_endpgm559;560; GFX11-GISEL-LABEL: test_dynamic_stackalloc_kernel_divergent_under_aligned:561; GFX11-GISEL: ; %bb.0:562; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0563; GFX11-GISEL-NEXT: s_mov_b32 s1, exec_lo564; GFX11-GISEL-NEXT: s_mov_b32 s0, 0565; GFX11-GISEL-NEXT: s_mov_b32 s33, 0566; GFX11-GISEL-NEXT: s_mov_b32 s32, 16567; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v0, 4, 15568; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)569; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v0570; GFX11-GISEL-NEXT: .LBB5_1: ; =>This Inner Loop Header: Depth=1571; GFX11-GISEL-NEXT: s_ctz_i32_b32 s2, s1572; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)573; GFX11-GISEL-NEXT: v_readlane_b32 s3, v0, s2574; GFX11-GISEL-NEXT: s_bitset0_b32 s1, s2575; GFX11-GISEL-NEXT: s_max_u32 s0, s0, s3576; GFX11-GISEL-NEXT: s_cmp_lg_u32 s1, 0577; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB5_1578; GFX11-GISEL-NEXT: ; %bb.2:579; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 0x29a580; GFX11-GISEL-NEXT: s_mov_b32 s1, s32581; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 5582; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)583; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s0584; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s1 dlc585; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0586; GFX11-GISEL-NEXT: s_endpgm587 %idx = call i32 @llvm.amdgcn.workitem.id.x()588 %alloca = alloca i128, i32 %idx, align 2, addrspace(5)589 store volatile i32 666, ptr addrspace(5) %alloca590 ret void591}592 593define amdgpu_kernel void @test_dynamic_stackalloc_kernel_multiple_allocas(i32 %n, i32 %m) {594; GFX9-SDAG-LABEL: test_dynamic_stackalloc_kernel_multiple_allocas:595; GFX9-SDAG: ; %bb.0: ; %entry596; GFX9-SDAG-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x0597; GFX9-SDAG-NEXT: s_add_u32 s0, s0, s17598; GFX9-SDAG-NEXT: s_addc_u32 s1, s1, 0599; GFX9-SDAG-NEXT: s_mov_b32 s8, 0600; GFX9-SDAG-NEXT: s_mov_b32 s33, 0601; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)602; GFX9-SDAG-NEXT: s_cmp_lg_u32 s4, 0603; GFX9-SDAG-NEXT: s_movk_i32 s32, 0x2000604; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB6_4605; GFX9-SDAG-NEXT: ; %bb.1: ; %bb.0606; GFX9-SDAG-NEXT: s_lshl2_add_u32 s5, s5, 15607; GFX9-SDAG-NEXT: s_add_i32 s6, s32, 0xfff608; GFX9-SDAG-NEXT: s_and_b32 s5, s5, -16609; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 15610; GFX9-SDAG-NEXT: s_and_b32 s9, s6, 0xfffff000611; GFX9-SDAG-NEXT: s_lshl_b32 s5, s5, 6612; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v0613; GFX9-SDAG-NEXT: s_mov_b64 s[6:7], exec614; GFX9-SDAG-NEXT: s_add_i32 s32, s9, s5615; GFX9-SDAG-NEXT: .LBB6_2: ; =>This Inner Loop Header: Depth=1616; GFX9-SDAG-NEXT: s_ff1_i32_b64 s5, s[6:7]617; GFX9-SDAG-NEXT: v_readlane_b32 s10, v0, s5618; GFX9-SDAG-NEXT: s_bitset0_b64 s[6:7], s5619; GFX9-SDAG-NEXT: s_max_u32 s8, s8, s10620; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[6:7], 0621; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB6_2622; GFX9-SDAG-NEXT: ; %bb.3:623; GFX9-SDAG-NEXT: s_mov_b32 s5, s32624; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s5625; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, s8, 6, v0626; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v0627; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 3628; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s9629; GFX9-SDAG-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen630; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)631; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 4632; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s5633; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)634; GFX9-SDAG-NEXT: .LBB6_4: ; %bb.1635; GFX9-SDAG-NEXT: s_lshl2_add_u32 s4, s4, 15636; GFX9-SDAG-NEXT: s_and_b32 s4, s4, -16637; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 1638; GFX9-SDAG-NEXT: s_lshl_b32 s4, s4, 6639; GFX9-SDAG-NEXT: s_mov_b32 s5, s32640; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s33641; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)642; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 2643; GFX9-SDAG-NEXT: s_add_i32 s32, s5, s4644; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s5645; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)646; GFX9-SDAG-NEXT: s_endpgm647;648; GFX9-GISEL-LABEL: test_dynamic_stackalloc_kernel_multiple_allocas:649; GFX9-GISEL: ; %bb.0: ; %entry650; GFX9-GISEL-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x0651; GFX9-GISEL-NEXT: s_add_u32 s0, s0, s17652; GFX9-GISEL-NEXT: s_addc_u32 s1, s1, 0653; GFX9-GISEL-NEXT: s_mov_b32 s8, 0654; GFX9-GISEL-NEXT: s_mov_b32 s33, 0655; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)656; GFX9-GISEL-NEXT: s_cmp_lg_u32 s4, 0657; GFX9-GISEL-NEXT: s_movk_i32 s32, 0x2000658; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB6_4659; GFX9-GISEL-NEXT: ; %bb.1: ; %bb.0660; GFX9-GISEL-NEXT: s_lshl2_add_u32 s5, s5, 15661; GFX9-GISEL-NEXT: s_and_b32 s5, s5, -16662; GFX9-GISEL-NEXT: s_lshl_b32 s6, s5, 6663; GFX9-GISEL-NEXT: s_add_u32 s5, s32, 0xfff664; GFX9-GISEL-NEXT: s_and_b32 s5, s5, 0xfffff000665; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 15666; GFX9-GISEL-NEXT: s_add_u32 s32, s5, s6667; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v0668; GFX9-GISEL-NEXT: s_mov_b64 s[6:7], exec669; GFX9-GISEL-NEXT: .LBB6_2: ; =>This Inner Loop Header: Depth=1670; GFX9-GISEL-NEXT: s_ff1_i32_b64 s9, s[6:7]671; GFX9-GISEL-NEXT: v_readlane_b32 s10, v0, s9672; GFX9-GISEL-NEXT: s_bitset0_b64 s[6:7], s9673; GFX9-GISEL-NEXT: s_max_u32 s8, s8, s10674; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[6:7], 0675; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB6_2676; GFX9-GISEL-NEXT: ; %bb.3:677; GFX9-GISEL-NEXT: s_mov_b32 s6, s32678; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 3679; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s5680; GFX9-GISEL-NEXT: s_lshl_b32 s7, s8, 6681; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen682; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)683; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 4684; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s6685; GFX9-GISEL-NEXT: s_add_u32 s32, s6, s7686; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen687; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)688; GFX9-GISEL-NEXT: .LBB6_4: ; %bb.1689; GFX9-GISEL-NEXT: s_lshl2_add_u32 s4, s4, 15690; GFX9-GISEL-NEXT: s_mov_b32 s5, s32691; GFX9-GISEL-NEXT: s_and_b32 s4, s4, -16692; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 1693; GFX9-GISEL-NEXT: s_lshl_b32 s4, s4, 6694; GFX9-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], s33695; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)696; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 2697; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s5698; GFX9-GISEL-NEXT: s_add_u32 s32, s5, s4699; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen700; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)701; GFX9-GISEL-NEXT: s_endpgm702;703; GFX11-SDAG-LABEL: test_dynamic_stackalloc_kernel_multiple_allocas:704; GFX11-SDAG: ; %bb.0: ; %entry705; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x0706; GFX11-SDAG-NEXT: s_mov_b32 s2, 0707; GFX11-SDAG-NEXT: s_mov_b32 s33, 0708; GFX11-SDAG-NEXT: s_movk_i32 s32, 0x80709; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)710; GFX11-SDAG-NEXT: s_cmp_lg_u32 s0, 0711; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB6_4712; GFX11-SDAG-NEXT: ; %bb.1: ; %bb.0713; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0714; GFX11-SDAG-NEXT: s_lshl2_add_u32 s1, s1, 15715; GFX11-SDAG-NEXT: s_add_i32 s3, s32, 0x7ff716; GFX11-SDAG-NEXT: s_and_b32 s4, s1, -16717; GFX11-SDAG-NEXT: s_and_b32 s1, s3, 0xfffff800718; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 15719; GFX11-SDAG-NEXT: s_lshl_b32 s3, s4, 5720; GFX11-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)721; GFX11-SDAG-NEXT: s_add_i32 s32, s1, s3722; GFX11-SDAG-NEXT: s_mov_b32 s3, exec_lo723; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v0724; GFX11-SDAG-NEXT: .LBB6_2: ; =>This Inner Loop Header: Depth=1725; GFX11-SDAG-NEXT: s_ctz_i32_b32 s4, s3726; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)727; GFX11-SDAG-NEXT: v_readlane_b32 s5, v0, s4728; GFX11-SDAG-NEXT: s_bitset0_b32 s3, s4729; GFX11-SDAG-NEXT: s_max_u32 s2, s2, s5730; GFX11-SDAG-NEXT: s_cmp_lg_u32 s3, 0731; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB6_2732; GFX11-SDAG-NEXT: ; %bb.3:733; GFX11-SDAG-NEXT: s_mov_b32 s3, s32734; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, 3 :: v_dual_mov_b32 v2, 4735; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s2, 5, s3736; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s1 dlc737; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x0738; GFX11-SDAG-NEXT: scratch_store_b32 off, v2, s3 dlc739; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x0740; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v0741; GFX11-SDAG-NEXT: .LBB6_4: ; %bb.1742; GFX11-SDAG-NEXT: s_lshl2_add_u32 s0, s0, 15743; GFX11-SDAG-NEXT: v_dual_mov_b32 v0, 1 :: v_dual_mov_b32 v1, 2744; GFX11-SDAG-NEXT: s_and_b32 s0, s0, -16745; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)746; GFX11-SDAG-NEXT: s_mov_b32 s1, s32747; GFX11-SDAG-NEXT: s_lshl_b32 s0, s0, 5748; GFX11-SDAG-NEXT: scratch_store_b32 off, v0, s33 dlc749; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x0750; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s1 dlc751; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x0752; GFX11-SDAG-NEXT: s_add_i32 s32, s1, s0753; GFX11-SDAG-NEXT: s_endpgm754;755; GFX11-GISEL-LABEL: test_dynamic_stackalloc_kernel_multiple_allocas:756; GFX11-GISEL: ; %bb.0: ; %entry757; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x0758; GFX11-GISEL-NEXT: s_mov_b32 s2, 0759; GFX11-GISEL-NEXT: s_mov_b32 s33, 0760; GFX11-GISEL-NEXT: s_movk_i32 s32, 0x80761; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)762; GFX11-GISEL-NEXT: s_cmp_lg_u32 s0, 0763; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB6_4764; GFX11-GISEL-NEXT: ; %bb.1: ; %bb.0765; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0766; GFX11-GISEL-NEXT: s_lshl2_add_u32 s1, s1, 15767; GFX11-GISEL-NEXT: s_add_u32 s3, s32, 0x7ff768; GFX11-GISEL-NEXT: s_and_b32 s1, s1, -16769; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)770; GFX11-GISEL-NEXT: s_lshl_b32 s4, s1, 5771; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 15772; GFX11-GISEL-NEXT: s_and_b32 s1, s3, 0xfffff800773; GFX11-GISEL-NEXT: s_mov_b32 s3, exec_lo774; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s4775; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v0776; GFX11-GISEL-NEXT: .LBB6_2: ; =>This Inner Loop Header: Depth=1777; GFX11-GISEL-NEXT: s_ctz_i32_b32 s4, s3778; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)779; GFX11-GISEL-NEXT: v_readlane_b32 s5, v0, s4780; GFX11-GISEL-NEXT: s_bitset0_b32 s3, s4781; GFX11-GISEL-NEXT: s_max_u32 s2, s2, s5782; GFX11-GISEL-NEXT: s_cmp_lg_u32 s3, 0783; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB6_2784; GFX11-GISEL-NEXT: ; %bb.3:785; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, 3 :: v_dual_mov_b32 v1, 4786; GFX11-GISEL-NEXT: s_mov_b32 s3, s32787; GFX11-GISEL-NEXT: s_lshl_b32 s2, s2, 5788; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s1 dlc789; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0790; GFX11-GISEL-NEXT: scratch_store_b32 off, v1, s3 dlc791; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0792; GFX11-GISEL-NEXT: s_add_u32 s32, s3, s2793; GFX11-GISEL-NEXT: .LBB6_4: ; %bb.1794; GFX11-GISEL-NEXT: s_lshl2_add_u32 s0, s0, 15795; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, 1 :: v_dual_mov_b32 v1, 2796; GFX11-GISEL-NEXT: s_and_b32 s0, s0, -16797; GFX11-GISEL-NEXT: s_mov_b32 s1, s32798; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 5799; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s33 dlc800; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0801; GFX11-GISEL-NEXT: scratch_store_b32 off, v1, s1 dlc802; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x0803; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s0804; GFX11-GISEL-NEXT: s_endpgm805entry:806 %cond = icmp eq i32 %n, 0807 %alloca1 = alloca i32, i32 8, addrspace(5)808 %alloca2 = alloca i17, i32 %n, addrspace(5)809 br i1 %cond, label %bb.0, label %bb.1810bb.0:811 %idx = call i32 @llvm.amdgcn.workitem.id.x()812 %alloca3 = alloca i32, i32 %m, align 64, addrspace(5)813 %alloca4 = alloca i32, i32 %idx, align 4, addrspace(5)814 store volatile i32 3, ptr addrspace(5) %alloca3815 store volatile i32 4, ptr addrspace(5) %alloca4816 br label %bb.1817bb.1:818 store volatile i32 1, ptr addrspace(5) %alloca1819 store volatile i32 2, ptr addrspace(5) %alloca2820 ret void821}822 823define amdgpu_kernel void @test_dynamic_stackalloc_kernel_control_flow(i32 %n, i32 %m) {824; GFX9-SDAG-LABEL: test_dynamic_stackalloc_kernel_control_flow:825; GFX9-SDAG: ; %bb.0: ; %entry826; GFX9-SDAG-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x0827; GFX9-SDAG-NEXT: s_add_u32 s0, s0, s17828; GFX9-SDAG-NEXT: s_addc_u32 s1, s1, 0829; GFX9-SDAG-NEXT: s_mov_b32 s33, 0830; GFX9-SDAG-NEXT: s_movk_i32 s32, 0x1000831; GFX9-SDAG-NEXT: s_waitcnt lgkmcnt(0)832; GFX9-SDAG-NEXT: s_cmp_lg_u32 s4, 0833; GFX9-SDAG-NEXT: s_mov_b32 s4, 0834; GFX9-SDAG-NEXT: s_cbranch_scc0 .LBB7_6835; GFX9-SDAG-NEXT: ; %bb.1: ; %bb.1836; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 15837; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v0838; GFX9-SDAG-NEXT: s_mov_b64 s[6:7], exec839; GFX9-SDAG-NEXT: .LBB7_2: ; =>This Inner Loop Header: Depth=1840; GFX9-SDAG-NEXT: s_ff1_i32_b64 s8, s[6:7]841; GFX9-SDAG-NEXT: v_readlane_b32 s9, v0, s8842; GFX9-SDAG-NEXT: s_bitset0_b64 s[6:7], s8843; GFX9-SDAG-NEXT: s_max_u32 s4, s4, s9844; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[6:7], 0845; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB7_2846; GFX9-SDAG-NEXT: ; %bb.3:847; GFX9-SDAG-NEXT: s_mov_b32 s6, s32848; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s6849; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, s4, 6, v0850; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v0851; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 1852; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s6853; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)854; GFX9-SDAG-NEXT: s_cbranch_execnz .LBB7_5855; GFX9-SDAG-NEXT: .LBB7_4: ; %bb.0856; GFX9-SDAG-NEXT: s_add_i32 s4, s32, 0xfff857; GFX9-SDAG-NEXT: s_lshl2_add_u32 s5, s5, 15858; GFX9-SDAG-NEXT: s_and_b32 s4, s4, 0xfffff000859; GFX9-SDAG-NEXT: s_and_b32 s5, s5, -16860; GFX9-SDAG-NEXT: s_lshl_b32 s5, s5, 6861; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 2862; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s4863; GFX9-SDAG-NEXT: s_add_i32 s32, s4, s5864; GFX9-SDAG-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen865; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)866; GFX9-SDAG-NEXT: .LBB7_5: ; %bb.2867; GFX9-SDAG-NEXT: s_endpgm868; GFX9-SDAG-NEXT: .LBB7_6:869; GFX9-SDAG-NEXT: s_branch .LBB7_4870;871; GFX9-GISEL-LABEL: test_dynamic_stackalloc_kernel_control_flow:872; GFX9-GISEL: ; %bb.0: ; %entry873; GFX9-GISEL-NEXT: s_load_dwordx2 s[4:5], s[8:9], 0x0874; GFX9-GISEL-NEXT: s_add_u32 s0, s0, s17875; GFX9-GISEL-NEXT: s_addc_u32 s1, s1, 0876; GFX9-GISEL-NEXT: s_mov_b32 s8, 0877; GFX9-GISEL-NEXT: s_mov_b32 s33, 0878; GFX9-GISEL-NEXT: s_waitcnt lgkmcnt(0)879; GFX9-GISEL-NEXT: s_cmp_lg_u32 s4, 0880; GFX9-GISEL-NEXT: s_mov_b32 s4, 1881; GFX9-GISEL-NEXT: s_movk_i32 s32, 0x1000882; GFX9-GISEL-NEXT: s_cbranch_scc0 .LBB7_4883; GFX9-GISEL-NEXT: ; %bb.1: ; %bb.1884; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 15885; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v0886; GFX9-GISEL-NEXT: s_mov_b64 s[6:7], exec887; GFX9-GISEL-NEXT: .LBB7_2: ; =>This Inner Loop Header: Depth=1888; GFX9-GISEL-NEXT: s_ff1_i32_b64 s4, s[6:7]889; GFX9-GISEL-NEXT: v_readlane_b32 s9, v0, s4890; GFX9-GISEL-NEXT: s_bitset0_b64 s[6:7], s4891; GFX9-GISEL-NEXT: s_max_u32 s8, s8, s9892; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[6:7], 0893; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB7_2894; GFX9-GISEL-NEXT: ; %bb.3:895; GFX9-GISEL-NEXT: s_mov_b32 s4, s32896; GFX9-GISEL-NEXT: s_lshl_b32 s6, s8, 6897; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 1898; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s4899; GFX9-GISEL-NEXT: s_add_u32 s32, s4, s6900; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen901; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)902; GFX9-GISEL-NEXT: s_mov_b32 s4, 0903; GFX9-GISEL-NEXT: .LBB7_4: ; %Flow904; GFX9-GISEL-NEXT: s_xor_b32 s4, s4, 1905; GFX9-GISEL-NEXT: s_cmp_lg_u32 s4, 0906; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB7_6907; GFX9-GISEL-NEXT: ; %bb.5: ; %bb.0908; GFX9-GISEL-NEXT: s_lshl2_add_u32 s4, s5, 15909; GFX9-GISEL-NEXT: s_add_u32 s5, s32, 0xfff910; GFX9-GISEL-NEXT: s_and_b32 s4, s4, -16911; GFX9-GISEL-NEXT: s_and_b32 s5, s5, 0xfffff000912; GFX9-GISEL-NEXT: s_lshl_b32 s4, s4, 6913; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 2914; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s5915; GFX9-GISEL-NEXT: s_add_u32 s32, s5, s4916; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen917; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)918; GFX9-GISEL-NEXT: .LBB7_6: ; %bb.2919; GFX9-GISEL-NEXT: s_endpgm920;921; GFX11-SDAG-LABEL: test_dynamic_stackalloc_kernel_control_flow:922; GFX11-SDAG: ; %bb.0: ; %entry923; GFX11-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x0924; GFX11-SDAG-NEXT: s_mov_b32 s33, 0925; GFX11-SDAG-NEXT: s_mov_b32 s32, 64926; GFX11-SDAG-NEXT: s_waitcnt lgkmcnt(0)927; GFX11-SDAG-NEXT: s_cmp_lg_u32 s0, 0928; GFX11-SDAG-NEXT: s_mov_b32 s0, 0929; GFX11-SDAG-NEXT: s_cbranch_scc0 .LBB7_6930; GFX11-SDAG-NEXT: ; %bb.1: ; %bb.1931; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v0932; GFX11-SDAG-NEXT: s_mov_b32 s2, exec_lo933; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)934; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 15935; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v0936; GFX11-SDAG-NEXT: .LBB7_2: ; =>This Inner Loop Header: Depth=1937; GFX11-SDAG-NEXT: s_ctz_i32_b32 s3, s2938; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)939; GFX11-SDAG-NEXT: v_readlane_b32 s4, v0, s3940; GFX11-SDAG-NEXT: s_bitset0_b32 s2, s3941; GFX11-SDAG-NEXT: s_max_u32 s0, s0, s4942; GFX11-SDAG-NEXT: s_cmp_lg_u32 s2, 0943; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB7_2944; GFX11-SDAG-NEXT: ; %bb.3:945; GFX11-SDAG-NEXT: s_mov_b32 s2, s32946; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, 1947; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s0, 5, s2948; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s2 dlc949; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x0950; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v0951; GFX11-SDAG-NEXT: s_cbranch_execnz .LBB7_5952; GFX11-SDAG-NEXT: .LBB7_4: ; %bb.0953; GFX11-SDAG-NEXT: s_lshl2_add_u32 s1, s1, 15954; GFX11-SDAG-NEXT: v_mov_b32_e32 v0, 2955; GFX11-SDAG-NEXT: s_add_i32 s0, s32, 0x7ff956; GFX11-SDAG-NEXT: s_and_b32 s1, s1, -16957; GFX11-SDAG-NEXT: s_and_b32 s0, s0, 0xfffff800958; GFX11-SDAG-NEXT: s_lshl_b32 s1, s1, 5959; GFX11-SDAG-NEXT: scratch_store_b32 off, v0, s0 dlc960; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x0961; GFX11-SDAG-NEXT: s_add_i32 s32, s0, s1962; GFX11-SDAG-NEXT: .LBB7_5: ; %bb.2963; GFX11-SDAG-NEXT: s_endpgm964; GFX11-SDAG-NEXT: .LBB7_6:965; GFX11-SDAG-NEXT: s_branch .LBB7_4966;967; GFX11-GISEL-LABEL: test_dynamic_stackalloc_kernel_control_flow:968; GFX11-GISEL: ; %bb.0: ; %entry969; GFX11-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x0970; GFX11-GISEL-NEXT: s_mov_b32 s2, 0971; GFX11-GISEL-NEXT: s_mov_b32 s33, 0972; GFX11-GISEL-NEXT: s_mov_b32 s32, 64973; GFX11-GISEL-NEXT: s_waitcnt lgkmcnt(0)974; GFX11-GISEL-NEXT: s_cmp_lg_u32 s0, 0975; GFX11-GISEL-NEXT: s_mov_b32 s0, 1976; GFX11-GISEL-NEXT: s_cbranch_scc0 .LBB7_4977; GFX11-GISEL-NEXT: ; %bb.1: ; %bb.1978; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0979; GFX11-GISEL-NEXT: s_mov_b32 s0, exec_lo980; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)981; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 15982; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v0983; GFX11-GISEL-NEXT: .LBB7_2: ; =>This Inner Loop Header: Depth=1984; GFX11-GISEL-NEXT: s_ctz_i32_b32 s3, s0985; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)986; GFX11-GISEL-NEXT: v_readlane_b32 s4, v0, s3987; GFX11-GISEL-NEXT: s_bitset0_b32 s0, s3988; GFX11-GISEL-NEXT: s_max_u32 s2, s2, s4989; GFX11-GISEL-NEXT: s_cmp_lg_u32 s0, 0990; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB7_2991; GFX11-GISEL-NEXT: ; %bb.3:992; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 1993; GFX11-GISEL-NEXT: s_mov_b32 s3, s32994; GFX11-GISEL-NEXT: s_lshl_b32 s0, s2, 5995; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)996; GFX11-GISEL-NEXT: s_add_u32 s32, s3, s0997; GFX11-GISEL-NEXT: s_mov_b32 s0, 0998; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s3 dlc999; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01000; GFX11-GISEL-NEXT: .LBB7_4: ; %Flow1001; GFX11-GISEL-NEXT: s_xor_b32 s0, s0, 11002; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1003; GFX11-GISEL-NEXT: s_cmp_lg_u32 s0, 01004; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB7_61005; GFX11-GISEL-NEXT: ; %bb.5: ; %bb.01006; GFX11-GISEL-NEXT: s_lshl2_add_u32 s0, s1, 151007; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 21008; GFX11-GISEL-NEXT: s_add_u32 s1, s32, 0x7ff1009; GFX11-GISEL-NEXT: s_and_b32 s0, s0, -161010; GFX11-GISEL-NEXT: s_and_b32 s1, s1, 0xfffff8001011; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 51012; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s1 dlc1013; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01014; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s01015; GFX11-GISEL-NEXT: .LBB7_6: ; %bb.21016; GFX11-GISEL-NEXT: s_endpgm1017entry:1018 %cond = icmp eq i32 %n, 01019 br i1 %cond, label %bb.0, label %bb.11020bb.0:1021 %alloca2 = alloca i32, i32 %m, align 64, addrspace(5)1022 store volatile i32 2, ptr addrspace(5) %alloca21023 br label %bb.21024bb.1:1025 %idx = call i32 @llvm.amdgcn.workitem.id.x()1026 %alloca1 = alloca i32, i32 %idx, align 4, addrspace(5)1027 store volatile i32 1, ptr addrspace(5) %alloca11028 br label %bb.21029bb.2:1030 ret void1031}1032 1033define void @test_dynamic_stackalloc_device_uniform(i32 %n) {1034; GFX9-SDAG-LABEL: test_dynamic_stackalloc_device_uniform:1035; GFX9-SDAG: ; %bb.0:1036; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1037; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 151038; GFX9-SDAG-NEXT: s_mov_b32 s9, s331039; GFX9-SDAG-NEXT: v_and_b32_e32 v0, -16, v01040; GFX9-SDAG-NEXT: s_mov_b64 s[4:5], exec1041; GFX9-SDAG-NEXT: s_mov_b32 s6, 01042; GFX9-SDAG-NEXT: s_mov_b32 s33, s321043; GFX9-SDAG-NEXT: s_addk_i32 s32, 0x4001044; GFX9-SDAG-NEXT: .LBB8_1: ; =>This Inner Loop Header: Depth=11045; GFX9-SDAG-NEXT: s_ff1_i32_b64 s7, s[4:5]1046; GFX9-SDAG-NEXT: v_readlane_b32 s8, v0, s71047; GFX9-SDAG-NEXT: s_bitset0_b64 s[4:5], s71048; GFX9-SDAG-NEXT: s_max_u32 s6, s6, s81049; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[4:5], 01050; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB8_11051; GFX9-SDAG-NEXT: ; %bb.2:1052; GFX9-SDAG-NEXT: s_mov_b32 s4, s321053; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s41054; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, s6, 6, v01055; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v01056; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 0x7b1057; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s41058; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)1059; GFX9-SDAG-NEXT: s_mov_b32 s32, s331060; GFX9-SDAG-NEXT: s_mov_b32 s33, s91061; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]1062;1063; GFX9-GISEL-LABEL: test_dynamic_stackalloc_device_uniform:1064; GFX9-GISEL: ; %bb.0:1065; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1066; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 151067; GFX9-GISEL-NEXT: s_mov_b32 s9, s331068; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v01069; GFX9-GISEL-NEXT: s_mov_b64 s[4:5], exec1070; GFX9-GISEL-NEXT: s_mov_b32 s6, 01071; GFX9-GISEL-NEXT: s_mov_b32 s33, s321072; GFX9-GISEL-NEXT: s_addk_i32 s32, 0x4001073; GFX9-GISEL-NEXT: .LBB8_1: ; =>This Inner Loop Header: Depth=11074; GFX9-GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]1075; GFX9-GISEL-NEXT: v_readlane_b32 s8, v0, s71076; GFX9-GISEL-NEXT: s_bitset0_b64 s[4:5], s71077; GFX9-GISEL-NEXT: s_max_u32 s6, s6, s81078; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[4:5], 01079; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB8_11080; GFX9-GISEL-NEXT: ; %bb.2:1081; GFX9-GISEL-NEXT: s_mov_b32 s4, s321082; GFX9-GISEL-NEXT: s_lshl_b32 s5, s6, 61083; GFX9-GISEL-NEXT: s_add_u32 s32, s4, s51084; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 0x7b1085; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s41086; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen1087; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)1088; GFX9-GISEL-NEXT: s_mov_b32 s32, s331089; GFX9-GISEL-NEXT: s_mov_b32 s33, s91090; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]1091;1092; GFX11-SDAG-LABEL: test_dynamic_stackalloc_device_uniform:1093; GFX11-SDAG: ; %bb.0:1094; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1095; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 151096; GFX11-SDAG-NEXT: s_mov_b32 s4, s331097; GFX11-SDAG-NEXT: s_mov_b32 s1, exec_lo1098; GFX11-SDAG-NEXT: s_mov_b32 s0, 01099; GFX11-SDAG-NEXT: s_mov_b32 s33, s321100; GFX11-SDAG-NEXT: v_and_b32_e32 v0, -16, v01101; GFX11-SDAG-NEXT: s_add_i32 s32, s32, 161102; GFX11-SDAG-NEXT: .LBB8_1: ; =>This Inner Loop Header: Depth=11103; GFX11-SDAG-NEXT: s_ctz_i32_b32 s2, s11104; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1105; GFX11-SDAG-NEXT: v_readlane_b32 s3, v0, s21106; GFX11-SDAG-NEXT: s_bitset0_b32 s1, s21107; GFX11-SDAG-NEXT: s_max_u32 s0, s0, s31108; GFX11-SDAG-NEXT: s_cmp_lg_u32 s1, 01109; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB8_11110; GFX11-SDAG-NEXT: ; %bb.2:1111; GFX11-SDAG-NEXT: s_mov_b32 s1, s321112; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, 0x7b1113; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s0, 5, s11114; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s1 dlc1115; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x01116; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v01117; GFX11-SDAG-NEXT: s_mov_b32 s32, s331118; GFX11-SDAG-NEXT: s_mov_b32 s33, s41119; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]1120;1121; GFX11-GISEL-LABEL: test_dynamic_stackalloc_device_uniform:1122; GFX11-GISEL: ; %bb.0:1123; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1124; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 151125; GFX11-GISEL-NEXT: s_mov_b32 s4, s331126; GFX11-GISEL-NEXT: s_mov_b32 s1, exec_lo1127; GFX11-GISEL-NEXT: s_mov_b32 s0, 01128; GFX11-GISEL-NEXT: s_mov_b32 s33, s321129; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v01130; GFX11-GISEL-NEXT: s_add_i32 s32, s32, 161131; GFX11-GISEL-NEXT: .LBB8_1: ; =>This Inner Loop Header: Depth=11132; GFX11-GISEL-NEXT: s_ctz_i32_b32 s2, s11133; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1134; GFX11-GISEL-NEXT: v_readlane_b32 s3, v0, s21135; GFX11-GISEL-NEXT: s_bitset0_b32 s1, s21136; GFX11-GISEL-NEXT: s_max_u32 s0, s0, s31137; GFX11-GISEL-NEXT: s_cmp_lg_u32 s1, 01138; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB8_11139; GFX11-GISEL-NEXT: ; %bb.2:1140; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 0x7b1141; GFX11-GISEL-NEXT: s_mov_b32 s1, s321142; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 51143; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1144; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s01145; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s1 dlc1146; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01147; GFX11-GISEL-NEXT: s_mov_b32 s32, s331148; GFX11-GISEL-NEXT: s_mov_b32 s33, s41149; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]1150 %alloca = alloca i32, i32 %n, addrspace(5)1151 store volatile i32 123, ptr addrspace(5) %alloca1152 ret void1153}1154 1155define void @test_dynamic_stackalloc_device_uniform_over_aligned(i32 %n) {1156; GFX9-SDAG-LABEL: test_dynamic_stackalloc_device_uniform_over_aligned:1157; GFX9-SDAG: ; %bb.0:1158; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1159; GFX9-SDAG-NEXT: s_mov_b32 s10, s331160; GFX9-SDAG-NEXT: s_add_i32 s33, s32, 0x1fc01161; GFX9-SDAG-NEXT: s_mov_b32 s11, s341162; GFX9-SDAG-NEXT: s_mov_b32 s34, s321163; GFX9-SDAG-NEXT: s_addk_i32 s32, 0x40001164; GFX9-SDAG-NEXT: s_add_i32 s4, s32, 0x1fff1165; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 151166; GFX9-SDAG-NEXT: s_and_b32 s6, s4, 0xffffe0001167; GFX9-SDAG-NEXT: v_and_b32_e32 v0, -16, v01168; GFX9-SDAG-NEXT: s_mov_b64 s[4:5], exec1169; GFX9-SDAG-NEXT: s_mov_b32 s7, 01170; GFX9-SDAG-NEXT: s_and_b32 s33, s33, 0xffffe0001171; GFX9-SDAG-NEXT: .LBB9_1: ; =>This Inner Loop Header: Depth=11172; GFX9-SDAG-NEXT: s_ff1_i32_b64 s8, s[4:5]1173; GFX9-SDAG-NEXT: v_readlane_b32 s9, v0, s81174; GFX9-SDAG-NEXT: s_bitset0_b64 s[4:5], s81175; GFX9-SDAG-NEXT: s_max_u32 s7, s7, s91176; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[4:5], 01177; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB9_11178; GFX9-SDAG-NEXT: ; %bb.2:1179; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s61180; GFX9-SDAG-NEXT: v_lshl_add_u32 v1, s7, 6, v01181; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v11182; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, 101183; GFX9-SDAG-NEXT: buffer_store_dword v1, v0, s[0:3], 0 offen1184; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)1185; GFX9-SDAG-NEXT: s_mov_b32 s32, s341186; GFX9-SDAG-NEXT: s_mov_b32 s34, s111187; GFX9-SDAG-NEXT: s_mov_b32 s33, s101188; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]1189;1190; GFX9-GISEL-LABEL: test_dynamic_stackalloc_device_uniform_over_aligned:1191; GFX9-GISEL: ; %bb.0:1192; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1193; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 151194; GFX9-GISEL-NEXT: s_mov_b32 s9, s331195; GFX9-GISEL-NEXT: s_add_i32 s33, s32, 0x1fc01196; GFX9-GISEL-NEXT: s_mov_b32 s10, s341197; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v01198; GFX9-GISEL-NEXT: s_mov_b64 s[4:5], exec1199; GFX9-GISEL-NEXT: s_mov_b32 s6, 01200; GFX9-GISEL-NEXT: s_and_b32 s33, s33, 0xffffe0001201; GFX9-GISEL-NEXT: s_mov_b32 s34, s321202; GFX9-GISEL-NEXT: s_addk_i32 s32, 0x40001203; GFX9-GISEL-NEXT: .LBB9_1: ; =>This Inner Loop Header: Depth=11204; GFX9-GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]1205; GFX9-GISEL-NEXT: v_readlane_b32 s8, v0, s71206; GFX9-GISEL-NEXT: s_bitset0_b64 s[4:5], s71207; GFX9-GISEL-NEXT: s_max_u32 s6, s6, s81208; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[4:5], 01209; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB9_11210; GFX9-GISEL-NEXT: ; %bb.2:1211; GFX9-GISEL-NEXT: s_add_u32 s5, s32, 0x1fff1212; GFX9-GISEL-NEXT: s_lshl_b32 s4, s6, 61213; GFX9-GISEL-NEXT: s_and_b32 s5, s5, 0xffffe0001214; GFX9-GISEL-NEXT: s_add_u32 s32, s5, s41215; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 101216; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s51217; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen1218; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)1219; GFX9-GISEL-NEXT: s_mov_b32 s32, s341220; GFX9-GISEL-NEXT: s_mov_b32 s34, s101221; GFX9-GISEL-NEXT: s_mov_b32 s33, s91222; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]1223;1224; GFX11-SDAG-LABEL: test_dynamic_stackalloc_device_uniform_over_aligned:1225; GFX11-SDAG: ; %bb.0:1226; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1227; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 151228; GFX11-SDAG-NEXT: s_mov_b32 s5, s331229; GFX11-SDAG-NEXT: s_add_i32 s33, s32, 0x7f1230; GFX11-SDAG-NEXT: s_mov_b32 s6, s341231; GFX11-SDAG-NEXT: s_mov_b32 s34, s321232; GFX11-SDAG-NEXT: s_addk_i32 s32, 0x1001233; GFX11-SDAG-NEXT: v_and_b32_e32 v0, -16, v01234; GFX11-SDAG-NEXT: s_add_i32 s0, s32, 0xfff1235; GFX11-SDAG-NEXT: s_mov_b32 s2, exec_lo1236; GFX11-SDAG-NEXT: s_and_b32 s0, s0, 0xfffff0001237; GFX11-SDAG-NEXT: s_mov_b32 s1, 01238; GFX11-SDAG-NEXT: s_and_b32 s33, s33, 0xffffff801239; GFX11-SDAG-NEXT: .LBB9_1: ; =>This Inner Loop Header: Depth=11240; GFX11-SDAG-NEXT: s_ctz_i32_b32 s3, s21241; GFX11-SDAG-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1242; GFX11-SDAG-NEXT: v_readlane_b32 s4, v0, s31243; GFX11-SDAG-NEXT: s_bitset0_b32 s2, s31244; GFX11-SDAG-NEXT: s_max_u32 s1, s1, s41245; GFX11-SDAG-NEXT: s_cmp_lg_u32 s2, 01246; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB9_11247; GFX11-SDAG-NEXT: ; %bb.2:1248; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s1, 5, s01249; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, 101250; GFX11-SDAG-NEXT: s_mov_b32 s33, s51251; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)1252; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v01253; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s0 dlc1254; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x01255; GFX11-SDAG-NEXT: s_mov_b32 s32, s341256; GFX11-SDAG-NEXT: s_mov_b32 s34, s61257; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]1258;1259; GFX11-GISEL-LABEL: test_dynamic_stackalloc_device_uniform_over_aligned:1260; GFX11-GISEL: ; %bb.0:1261; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1262; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 151263; GFX11-GISEL-NEXT: s_mov_b32 s4, s331264; GFX11-GISEL-NEXT: s_add_i32 s33, s32, 0x7f1265; GFX11-GISEL-NEXT: s_mov_b32 s5, s341266; GFX11-GISEL-NEXT: s_mov_b32 s1, exec_lo1267; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v01268; GFX11-GISEL-NEXT: s_mov_b32 s0, 01269; GFX11-GISEL-NEXT: s_and_b32 s33, s33, 0xffffff801270; GFX11-GISEL-NEXT: s_mov_b32 s34, s321271; GFX11-GISEL-NEXT: s_addk_i32 s32, 0x1001272; GFX11-GISEL-NEXT: .LBB9_1: ; =>This Inner Loop Header: Depth=11273; GFX11-GISEL-NEXT: s_ctz_i32_b32 s2, s11274; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1275; GFX11-GISEL-NEXT: v_readlane_b32 s3, v0, s21276; GFX11-GISEL-NEXT: s_bitset0_b32 s1, s21277; GFX11-GISEL-NEXT: s_max_u32 s0, s0, s31278; GFX11-GISEL-NEXT: s_cmp_lg_u32 s1, 01279; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB9_11280; GFX11-GISEL-NEXT: ; %bb.2:1281; GFX11-GISEL-NEXT: s_add_u32 s1, s32, 0xfff1282; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 101283; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 51284; GFX11-GISEL-NEXT: s_and_b32 s1, s1, 0xfffff0001285; GFX11-GISEL-NEXT: s_mov_b32 s33, s41286; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s01287; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s1 dlc1288; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01289; GFX11-GISEL-NEXT: s_mov_b32 s32, s341290; GFX11-GISEL-NEXT: s_mov_b32 s34, s51291; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]1292 %alloca = alloca i32, i32 %n, align 128, addrspace(5)1293 store volatile i32 10, ptr addrspace(5) %alloca1294 ret void1295}1296 1297define void @test_dynamic_stackalloc_device_uniform_under_aligned(i32 %n) {1298; GFX9-SDAG-LABEL: test_dynamic_stackalloc_device_uniform_under_aligned:1299; GFX9-SDAG: ; %bb.0:1300; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1301; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 151302; GFX9-SDAG-NEXT: s_mov_b32 s9, s331303; GFX9-SDAG-NEXT: v_and_b32_e32 v0, -16, v01304; GFX9-SDAG-NEXT: s_mov_b64 s[4:5], exec1305; GFX9-SDAG-NEXT: s_mov_b32 s6, 01306; GFX9-SDAG-NEXT: s_mov_b32 s33, s321307; GFX9-SDAG-NEXT: s_addk_i32 s32, 0x4001308; GFX9-SDAG-NEXT: .LBB10_1: ; =>This Inner Loop Header: Depth=11309; GFX9-SDAG-NEXT: s_ff1_i32_b64 s7, s[4:5]1310; GFX9-SDAG-NEXT: v_readlane_b32 s8, v0, s71311; GFX9-SDAG-NEXT: s_bitset0_b64 s[4:5], s71312; GFX9-SDAG-NEXT: s_max_u32 s6, s6, s81313; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[4:5], 01314; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB10_11315; GFX9-SDAG-NEXT: ; %bb.2:1316; GFX9-SDAG-NEXT: s_mov_b32 s4, s321317; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s41318; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, s6, 6, v01319; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v01320; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 221321; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s41322; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)1323; GFX9-SDAG-NEXT: s_mov_b32 s32, s331324; GFX9-SDAG-NEXT: s_mov_b32 s33, s91325; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]1326;1327; GFX9-GISEL-LABEL: test_dynamic_stackalloc_device_uniform_under_aligned:1328; GFX9-GISEL: ; %bb.0:1329; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1330; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 151331; GFX9-GISEL-NEXT: s_mov_b32 s9, s331332; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v01333; GFX9-GISEL-NEXT: s_mov_b64 s[4:5], exec1334; GFX9-GISEL-NEXT: s_mov_b32 s6, 01335; GFX9-GISEL-NEXT: s_mov_b32 s33, s321336; GFX9-GISEL-NEXT: s_addk_i32 s32, 0x4001337; GFX9-GISEL-NEXT: .LBB10_1: ; =>This Inner Loop Header: Depth=11338; GFX9-GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]1339; GFX9-GISEL-NEXT: v_readlane_b32 s8, v0, s71340; GFX9-GISEL-NEXT: s_bitset0_b64 s[4:5], s71341; GFX9-GISEL-NEXT: s_max_u32 s6, s6, s81342; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[4:5], 01343; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB10_11344; GFX9-GISEL-NEXT: ; %bb.2:1345; GFX9-GISEL-NEXT: s_mov_b32 s4, s321346; GFX9-GISEL-NEXT: s_lshl_b32 s5, s6, 61347; GFX9-GISEL-NEXT: s_add_u32 s32, s4, s51348; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 221349; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s41350; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen1351; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)1352; GFX9-GISEL-NEXT: s_mov_b32 s32, s331353; GFX9-GISEL-NEXT: s_mov_b32 s33, s91354; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]1355;1356; GFX11-SDAG-LABEL: test_dynamic_stackalloc_device_uniform_under_aligned:1357; GFX11-SDAG: ; %bb.0:1358; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1359; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 151360; GFX11-SDAG-NEXT: s_mov_b32 s4, s331361; GFX11-SDAG-NEXT: s_mov_b32 s1, exec_lo1362; GFX11-SDAG-NEXT: s_mov_b32 s0, 01363; GFX11-SDAG-NEXT: s_mov_b32 s33, s321364; GFX11-SDAG-NEXT: v_and_b32_e32 v0, -16, v01365; GFX11-SDAG-NEXT: s_add_i32 s32, s32, 161366; GFX11-SDAG-NEXT: .LBB10_1: ; =>This Inner Loop Header: Depth=11367; GFX11-SDAG-NEXT: s_ctz_i32_b32 s2, s11368; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1369; GFX11-SDAG-NEXT: v_readlane_b32 s3, v0, s21370; GFX11-SDAG-NEXT: s_bitset0_b32 s1, s21371; GFX11-SDAG-NEXT: s_max_u32 s0, s0, s31372; GFX11-SDAG-NEXT: s_cmp_lg_u32 s1, 01373; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB10_11374; GFX11-SDAG-NEXT: ; %bb.2:1375; GFX11-SDAG-NEXT: s_mov_b32 s1, s321376; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, 221377; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s0, 5, s11378; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s1 dlc1379; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x01380; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v01381; GFX11-SDAG-NEXT: s_mov_b32 s32, s331382; GFX11-SDAG-NEXT: s_mov_b32 s33, s41383; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]1384;1385; GFX11-GISEL-LABEL: test_dynamic_stackalloc_device_uniform_under_aligned:1386; GFX11-GISEL: ; %bb.0:1387; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1388; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 151389; GFX11-GISEL-NEXT: s_mov_b32 s4, s331390; GFX11-GISEL-NEXT: s_mov_b32 s1, exec_lo1391; GFX11-GISEL-NEXT: s_mov_b32 s0, 01392; GFX11-GISEL-NEXT: s_mov_b32 s33, s321393; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v01394; GFX11-GISEL-NEXT: s_add_i32 s32, s32, 161395; GFX11-GISEL-NEXT: .LBB10_1: ; =>This Inner Loop Header: Depth=11396; GFX11-GISEL-NEXT: s_ctz_i32_b32 s2, s11397; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1398; GFX11-GISEL-NEXT: v_readlane_b32 s3, v0, s21399; GFX11-GISEL-NEXT: s_bitset0_b32 s1, s21400; GFX11-GISEL-NEXT: s_max_u32 s0, s0, s31401; GFX11-GISEL-NEXT: s_cmp_lg_u32 s1, 01402; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB10_11403; GFX11-GISEL-NEXT: ; %bb.2:1404; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 221405; GFX11-GISEL-NEXT: s_mov_b32 s1, s321406; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 51407; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1408; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s01409; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s1 dlc1410; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01411; GFX11-GISEL-NEXT: s_mov_b32 s32, s331412; GFX11-GISEL-NEXT: s_mov_b32 s33, s41413; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]1414 %alloca = alloca i32, i32 %n, align 2, addrspace(5)1415 store volatile i32 22, ptr addrspace(5) %alloca1416 ret void1417}1418 1419define void @test_dynamic_stackalloc_device_divergent() {1420; GFX9-SDAG-LABEL: test_dynamic_stackalloc_device_divergent:1421; GFX9-SDAG: ; %bb.0:1422; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1423; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v311424; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 151425; GFX9-SDAG-NEXT: s_mov_b32 s9, s331426; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v01427; GFX9-SDAG-NEXT: s_mov_b64 s[4:5], exec1428; GFX9-SDAG-NEXT: s_mov_b32 s6, 01429; GFX9-SDAG-NEXT: s_mov_b32 s33, s321430; GFX9-SDAG-NEXT: s_addk_i32 s32, 0x4001431; GFX9-SDAG-NEXT: .LBB11_1: ; =>This Inner Loop Header: Depth=11432; GFX9-SDAG-NEXT: s_ff1_i32_b64 s7, s[4:5]1433; GFX9-SDAG-NEXT: v_readlane_b32 s8, v0, s71434; GFX9-SDAG-NEXT: s_bitset0_b64 s[4:5], s71435; GFX9-SDAG-NEXT: s_max_u32 s6, s6, s81436; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[4:5], 01437; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB11_11438; GFX9-SDAG-NEXT: ; %bb.2:1439; GFX9-SDAG-NEXT: s_mov_b32 s4, s321440; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s41441; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, s6, 6, v01442; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v01443; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 0x7b1444; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s41445; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)1446; GFX9-SDAG-NEXT: s_mov_b32 s32, s331447; GFX9-SDAG-NEXT: s_mov_b32 s33, s91448; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]1449;1450; GFX9-GISEL-LABEL: test_dynamic_stackalloc_device_divergent:1451; GFX9-GISEL: ; %bb.0:1452; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1453; GFX9-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v311454; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 151455; GFX9-GISEL-NEXT: s_mov_b32 s9, s331456; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v01457; GFX9-GISEL-NEXT: s_mov_b64 s[4:5], exec1458; GFX9-GISEL-NEXT: s_mov_b32 s6, 01459; GFX9-GISEL-NEXT: s_mov_b32 s33, s321460; GFX9-GISEL-NEXT: s_addk_i32 s32, 0x4001461; GFX9-GISEL-NEXT: .LBB11_1: ; =>This Inner Loop Header: Depth=11462; GFX9-GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]1463; GFX9-GISEL-NEXT: v_readlane_b32 s8, v0, s71464; GFX9-GISEL-NEXT: s_bitset0_b64 s[4:5], s71465; GFX9-GISEL-NEXT: s_max_u32 s6, s6, s81466; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[4:5], 01467; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB11_11468; GFX9-GISEL-NEXT: ; %bb.2:1469; GFX9-GISEL-NEXT: s_mov_b32 s4, s321470; GFX9-GISEL-NEXT: s_lshl_b32 s5, s6, 61471; GFX9-GISEL-NEXT: s_add_u32 s32, s4, s51472; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 0x7b1473; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s41474; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen1475; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)1476; GFX9-GISEL-NEXT: s_mov_b32 s32, s331477; GFX9-GISEL-NEXT: s_mov_b32 s33, s91478; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]1479;1480; GFX11-SDAG-LABEL: test_dynamic_stackalloc_device_divergent:1481; GFX11-SDAG: ; %bb.0:1482; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1483; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v311484; GFX11-SDAG-NEXT: s_mov_b32 s4, s331485; GFX11-SDAG-NEXT: s_mov_b32 s1, exec_lo1486; GFX11-SDAG-NEXT: s_mov_b32 s0, 01487; GFX11-SDAG-NEXT: s_mov_b32 s33, s321488; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 151489; GFX11-SDAG-NEXT: s_add_i32 s32, s32, 161490; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)1491; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v01492; GFX11-SDAG-NEXT: .LBB11_1: ; =>This Inner Loop Header: Depth=11493; GFX11-SDAG-NEXT: s_ctz_i32_b32 s2, s11494; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1495; GFX11-SDAG-NEXT: v_readlane_b32 s3, v0, s21496; GFX11-SDAG-NEXT: s_bitset0_b32 s1, s21497; GFX11-SDAG-NEXT: s_max_u32 s0, s0, s31498; GFX11-SDAG-NEXT: s_cmp_lg_u32 s1, 01499; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB11_11500; GFX11-SDAG-NEXT: ; %bb.2:1501; GFX11-SDAG-NEXT: s_mov_b32 s1, s321502; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, 0x7b1503; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s0, 5, s11504; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s1 dlc1505; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x01506; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v01507; GFX11-SDAG-NEXT: s_mov_b32 s32, s331508; GFX11-SDAG-NEXT: s_mov_b32 s33, s41509; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]1510;1511; GFX11-GISEL-LABEL: test_dynamic_stackalloc_device_divergent:1512; GFX11-GISEL: ; %bb.0:1513; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1514; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v311515; GFX11-GISEL-NEXT: s_mov_b32 s4, s331516; GFX11-GISEL-NEXT: s_mov_b32 s1, exec_lo1517; GFX11-GISEL-NEXT: s_mov_b32 s0, 01518; GFX11-GISEL-NEXT: s_mov_b32 s33, s321519; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 151520; GFX11-GISEL-NEXT: s_add_i32 s32, s32, 161521; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1522; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v01523; GFX11-GISEL-NEXT: .LBB11_1: ; =>This Inner Loop Header: Depth=11524; GFX11-GISEL-NEXT: s_ctz_i32_b32 s2, s11525; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1526; GFX11-GISEL-NEXT: v_readlane_b32 s3, v0, s21527; GFX11-GISEL-NEXT: s_bitset0_b32 s1, s21528; GFX11-GISEL-NEXT: s_max_u32 s0, s0, s31529; GFX11-GISEL-NEXT: s_cmp_lg_u32 s1, 01530; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB11_11531; GFX11-GISEL-NEXT: ; %bb.2:1532; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 0x7b1533; GFX11-GISEL-NEXT: s_mov_b32 s1, s321534; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 51535; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1536; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s01537; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s1 dlc1538; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01539; GFX11-GISEL-NEXT: s_mov_b32 s32, s331540; GFX11-GISEL-NEXT: s_mov_b32 s33, s41541; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]1542 %idx = call i32 @llvm.amdgcn.workitem.id.x()1543 %alloca = alloca i32, i32 %idx, addrspace(5)1544 store volatile i32 123, ptr addrspace(5) %alloca1545 ret void1546}1547 1548define void @test_dynamic_stackalloc_device_divergent_over_aligned() {1549; GFX9-SDAG-LABEL: test_dynamic_stackalloc_device_divergent_over_aligned:1550; GFX9-SDAG: ; %bb.0:1551; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1552; GFX9-SDAG-NEXT: s_mov_b32 s10, s331553; GFX9-SDAG-NEXT: s_add_i32 s33, s32, 0x1fc01554; GFX9-SDAG-NEXT: s_mov_b32 s11, s341555; GFX9-SDAG-NEXT: s_mov_b32 s34, s321556; GFX9-SDAG-NEXT: s_addk_i32 s32, 0x40001557; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v311558; GFX9-SDAG-NEXT: s_add_i32 s4, s32, 0x1fff1559; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 151560; GFX9-SDAG-NEXT: s_and_b32 s6, s4, 0xffffe0001561; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v01562; GFX9-SDAG-NEXT: s_mov_b64 s[4:5], exec1563; GFX9-SDAG-NEXT: s_mov_b32 s7, 01564; GFX9-SDAG-NEXT: s_and_b32 s33, s33, 0xffffe0001565; GFX9-SDAG-NEXT: .LBB12_1: ; =>This Inner Loop Header: Depth=11566; GFX9-SDAG-NEXT: s_ff1_i32_b64 s8, s[4:5]1567; GFX9-SDAG-NEXT: v_readlane_b32 s9, v0, s81568; GFX9-SDAG-NEXT: s_bitset0_b64 s[4:5], s81569; GFX9-SDAG-NEXT: s_max_u32 s7, s7, s91570; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[4:5], 01571; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB12_11572; GFX9-SDAG-NEXT: ; %bb.2:1573; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s61574; GFX9-SDAG-NEXT: v_lshl_add_u32 v1, s7, 6, v01575; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v11576; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, 0x1bc1577; GFX9-SDAG-NEXT: buffer_store_dword v1, v0, s[0:3], 0 offen1578; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)1579; GFX9-SDAG-NEXT: s_mov_b32 s32, s341580; GFX9-SDAG-NEXT: s_mov_b32 s34, s111581; GFX9-SDAG-NEXT: s_mov_b32 s33, s101582; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]1583;1584; GFX9-GISEL-LABEL: test_dynamic_stackalloc_device_divergent_over_aligned:1585; GFX9-GISEL: ; %bb.0:1586; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1587; GFX9-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v311588; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 151589; GFX9-GISEL-NEXT: s_mov_b32 s9, s331590; GFX9-GISEL-NEXT: s_add_i32 s33, s32, 0x1fc01591; GFX9-GISEL-NEXT: s_mov_b32 s10, s341592; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v01593; GFX9-GISEL-NEXT: s_mov_b64 s[4:5], exec1594; GFX9-GISEL-NEXT: s_mov_b32 s6, 01595; GFX9-GISEL-NEXT: s_and_b32 s33, s33, 0xffffe0001596; GFX9-GISEL-NEXT: s_mov_b32 s34, s321597; GFX9-GISEL-NEXT: s_addk_i32 s32, 0x40001598; GFX9-GISEL-NEXT: .LBB12_1: ; =>This Inner Loop Header: Depth=11599; GFX9-GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]1600; GFX9-GISEL-NEXT: v_readlane_b32 s8, v0, s71601; GFX9-GISEL-NEXT: s_bitset0_b64 s[4:5], s71602; GFX9-GISEL-NEXT: s_max_u32 s6, s6, s81603; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[4:5], 01604; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB12_11605; GFX9-GISEL-NEXT: ; %bb.2:1606; GFX9-GISEL-NEXT: s_add_u32 s5, s32, 0x1fff1607; GFX9-GISEL-NEXT: s_lshl_b32 s4, s6, 61608; GFX9-GISEL-NEXT: s_and_b32 s5, s5, 0xffffe0001609; GFX9-GISEL-NEXT: s_add_u32 s32, s5, s41610; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 0x1bc1611; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s51612; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen1613; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)1614; GFX9-GISEL-NEXT: s_mov_b32 s32, s341615; GFX9-GISEL-NEXT: s_mov_b32 s34, s101616; GFX9-GISEL-NEXT: s_mov_b32 s33, s91617; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]1618;1619; GFX11-SDAG-LABEL: test_dynamic_stackalloc_device_divergent_over_aligned:1620; GFX11-SDAG: ; %bb.0:1621; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1622; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v311623; GFX11-SDAG-NEXT: s_mov_b32 s5, s331624; GFX11-SDAG-NEXT: s_add_i32 s33, s32, 0x7f1625; GFX11-SDAG-NEXT: s_mov_b32 s6, s341626; GFX11-SDAG-NEXT: s_mov_b32 s34, s321627; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 151628; GFX11-SDAG-NEXT: s_addk_i32 s32, 0x1001629; GFX11-SDAG-NEXT: s_mov_b32 s2, exec_lo1630; GFX11-SDAG-NEXT: s_add_i32 s0, s32, 0xfff1631; GFX11-SDAG-NEXT: s_mov_b32 s1, 01632; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v01633; GFX11-SDAG-NEXT: s_and_b32 s0, s0, 0xfffff0001634; GFX11-SDAG-NEXT: s_and_b32 s33, s33, 0xffffff801635; GFX11-SDAG-NEXT: .LBB12_1: ; =>This Inner Loop Header: Depth=11636; GFX11-SDAG-NEXT: s_ctz_i32_b32 s3, s21637; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1638; GFX11-SDAG-NEXT: v_readlane_b32 s4, v0, s31639; GFX11-SDAG-NEXT: s_bitset0_b32 s2, s31640; GFX11-SDAG-NEXT: s_max_u32 s1, s1, s41641; GFX11-SDAG-NEXT: s_cmp_lg_u32 s2, 01642; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB12_11643; GFX11-SDAG-NEXT: ; %bb.2:1644; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s1, 5, s01645; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, 0x1bc1646; GFX11-SDAG-NEXT: s_mov_b32 s33, s51647; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)1648; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v01649; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s0 dlc1650; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x01651; GFX11-SDAG-NEXT: s_mov_b32 s32, s341652; GFX11-SDAG-NEXT: s_mov_b32 s34, s61653; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]1654;1655; GFX11-GISEL-LABEL: test_dynamic_stackalloc_device_divergent_over_aligned:1656; GFX11-GISEL: ; %bb.0:1657; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1658; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v311659; GFX11-GISEL-NEXT: s_mov_b32 s4, s331660; GFX11-GISEL-NEXT: s_add_i32 s33, s32, 0x7f1661; GFX11-GISEL-NEXT: s_mov_b32 s5, s341662; GFX11-GISEL-NEXT: s_mov_b32 s1, exec_lo1663; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 151664; GFX11-GISEL-NEXT: s_mov_b32 s0, 01665; GFX11-GISEL-NEXT: s_and_b32 s33, s33, 0xffffff801666; GFX11-GISEL-NEXT: s_mov_b32 s34, s321667; GFX11-GISEL-NEXT: s_addk_i32 s32, 0x1001668; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v01669; GFX11-GISEL-NEXT: .LBB12_1: ; =>This Inner Loop Header: Depth=11670; GFX11-GISEL-NEXT: s_ctz_i32_b32 s2, s11671; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1672; GFX11-GISEL-NEXT: v_readlane_b32 s3, v0, s21673; GFX11-GISEL-NEXT: s_bitset0_b32 s1, s21674; GFX11-GISEL-NEXT: s_max_u32 s0, s0, s31675; GFX11-GISEL-NEXT: s_cmp_lg_u32 s1, 01676; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB12_11677; GFX11-GISEL-NEXT: ; %bb.2:1678; GFX11-GISEL-NEXT: s_add_u32 s1, s32, 0xfff1679; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 0x1bc1680; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 51681; GFX11-GISEL-NEXT: s_and_b32 s1, s1, 0xfffff0001682; GFX11-GISEL-NEXT: s_mov_b32 s33, s41683; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s01684; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s1 dlc1685; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01686; GFX11-GISEL-NEXT: s_mov_b32 s32, s341687; GFX11-GISEL-NEXT: s_mov_b32 s34, s51688; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]1689 %idx = call i32 @llvm.amdgcn.workitem.id.x()1690 %alloca = alloca i32, i32 %idx, align 128, addrspace(5)1691 store volatile i32 444, ptr addrspace(5) %alloca1692 ret void1693}1694 1695define void @test_dynamic_stackalloc_device_divergent_under_aligned() {1696; GFX9-SDAG-LABEL: test_dynamic_stackalloc_device_divergent_under_aligned:1697; GFX9-SDAG: ; %bb.0:1698; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1699; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v311700; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 151701; GFX9-SDAG-NEXT: s_mov_b32 s9, s331702; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v01703; GFX9-SDAG-NEXT: s_mov_b64 s[4:5], exec1704; GFX9-SDAG-NEXT: s_mov_b32 s6, 01705; GFX9-SDAG-NEXT: s_mov_b32 s33, s321706; GFX9-SDAG-NEXT: s_addk_i32 s32, 0x4001707; GFX9-SDAG-NEXT: .LBB13_1: ; =>This Inner Loop Header: Depth=11708; GFX9-SDAG-NEXT: s_ff1_i32_b64 s7, s[4:5]1709; GFX9-SDAG-NEXT: v_readlane_b32 s8, v0, s71710; GFX9-SDAG-NEXT: s_bitset0_b64 s[4:5], s71711; GFX9-SDAG-NEXT: s_max_u32 s6, s6, s81712; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[4:5], 01713; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB13_11714; GFX9-SDAG-NEXT: ; %bb.2:1715; GFX9-SDAG-NEXT: s_mov_b32 s4, s321716; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s41717; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, s6, 6, v01718; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v01719; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 0x29a1720; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s41721; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)1722; GFX9-SDAG-NEXT: s_mov_b32 s32, s331723; GFX9-SDAG-NEXT: s_mov_b32 s33, s91724; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]1725;1726; GFX9-GISEL-LABEL: test_dynamic_stackalloc_device_divergent_under_aligned:1727; GFX9-GISEL: ; %bb.0:1728; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1729; GFX9-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v311730; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 151731; GFX9-GISEL-NEXT: s_mov_b32 s9, s331732; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v01733; GFX9-GISEL-NEXT: s_mov_b64 s[4:5], exec1734; GFX9-GISEL-NEXT: s_mov_b32 s6, 01735; GFX9-GISEL-NEXT: s_mov_b32 s33, s321736; GFX9-GISEL-NEXT: s_addk_i32 s32, 0x4001737; GFX9-GISEL-NEXT: .LBB13_1: ; =>This Inner Loop Header: Depth=11738; GFX9-GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]1739; GFX9-GISEL-NEXT: v_readlane_b32 s8, v0, s71740; GFX9-GISEL-NEXT: s_bitset0_b64 s[4:5], s71741; GFX9-GISEL-NEXT: s_max_u32 s6, s6, s81742; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[4:5], 01743; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB13_11744; GFX9-GISEL-NEXT: ; %bb.2:1745; GFX9-GISEL-NEXT: s_mov_b32 s4, s321746; GFX9-GISEL-NEXT: s_lshl_b32 s5, s6, 61747; GFX9-GISEL-NEXT: s_add_u32 s32, s4, s51748; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 0x29a1749; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s41750; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen1751; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)1752; GFX9-GISEL-NEXT: s_mov_b32 s32, s331753; GFX9-GISEL-NEXT: s_mov_b32 s33, s91754; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]1755;1756; GFX11-SDAG-LABEL: test_dynamic_stackalloc_device_divergent_under_aligned:1757; GFX11-SDAG: ; %bb.0:1758; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1759; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v311760; GFX11-SDAG-NEXT: s_mov_b32 s4, s331761; GFX11-SDAG-NEXT: s_mov_b32 s1, exec_lo1762; GFX11-SDAG-NEXT: s_mov_b32 s0, 01763; GFX11-SDAG-NEXT: s_mov_b32 s33, s321764; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 151765; GFX11-SDAG-NEXT: s_add_i32 s32, s32, 161766; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)1767; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v01768; GFX11-SDAG-NEXT: .LBB13_1: ; =>This Inner Loop Header: Depth=11769; GFX11-SDAG-NEXT: s_ctz_i32_b32 s2, s11770; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1771; GFX11-SDAG-NEXT: v_readlane_b32 s3, v0, s21772; GFX11-SDAG-NEXT: s_bitset0_b32 s1, s21773; GFX11-SDAG-NEXT: s_max_u32 s0, s0, s31774; GFX11-SDAG-NEXT: s_cmp_lg_u32 s1, 01775; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB13_11776; GFX11-SDAG-NEXT: ; %bb.2:1777; GFX11-SDAG-NEXT: s_mov_b32 s1, s321778; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, 0x29a1779; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s0, 5, s11780; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s1 dlc1781; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x01782; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v01783; GFX11-SDAG-NEXT: s_mov_b32 s32, s331784; GFX11-SDAG-NEXT: s_mov_b32 s33, s41785; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]1786;1787; GFX11-GISEL-LABEL: test_dynamic_stackalloc_device_divergent_under_aligned:1788; GFX11-GISEL: ; %bb.0:1789; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1790; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v311791; GFX11-GISEL-NEXT: s_mov_b32 s4, s331792; GFX11-GISEL-NEXT: s_mov_b32 s1, exec_lo1793; GFX11-GISEL-NEXT: s_mov_b32 s0, 01794; GFX11-GISEL-NEXT: s_mov_b32 s33, s321795; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 151796; GFX11-GISEL-NEXT: s_add_i32 s32, s32, 161797; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1798; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v01799; GFX11-GISEL-NEXT: .LBB13_1: ; =>This Inner Loop Header: Depth=11800; GFX11-GISEL-NEXT: s_ctz_i32_b32 s2, s11801; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)1802; GFX11-GISEL-NEXT: v_readlane_b32 s3, v0, s21803; GFX11-GISEL-NEXT: s_bitset0_b32 s1, s21804; GFX11-GISEL-NEXT: s_max_u32 s0, s0, s31805; GFX11-GISEL-NEXT: s_cmp_lg_u32 s1, 01806; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB13_11807; GFX11-GISEL-NEXT: ; %bb.2:1808; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 0x29a1809; GFX11-GISEL-NEXT: s_mov_b32 s1, s321810; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 51811; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1812; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s01813; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s1 dlc1814; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x01815; GFX11-GISEL-NEXT: s_mov_b32 s32, s331816; GFX11-GISEL-NEXT: s_mov_b32 s33, s41817; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]1818 %idx = call i32 @llvm.amdgcn.workitem.id.x()1819 %alloca = alloca i32, i32 %idx, align 2, addrspace(5)1820 store volatile i32 666, ptr addrspace(5) %alloca1821 ret void1822}1823 1824define void @test_dynamic_stackalloc_device_multiple_allocas(i32 %n, i32 %m) {1825; GFX9-SDAG-LABEL: test_dynamic_stackalloc_device_multiple_allocas:1826; GFX9-SDAG: ; %bb.0: ; %entry1827; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1828; GFX9-SDAG-NEXT: s_mov_b32 s13, s331829; GFX9-SDAG-NEXT: s_add_i32 s33, s32, 0xfc01830; GFX9-SDAG-NEXT: s_mov_b32 s14, s341831; GFX9-SDAG-NEXT: s_mov_b32 s8, 01832; GFX9-SDAG-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01833; GFX9-SDAG-NEXT: s_and_b32 s33, s33, 0xfffff0001834; GFX9-SDAG-NEXT: s_mov_b32 s34, s321835; GFX9-SDAG-NEXT: s_addk_i32 s32, 0x30001836; GFX9-SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc1837; GFX9-SDAG-NEXT: s_cbranch_execz .LBB14_61838; GFX9-SDAG-NEXT: ; %bb.1: ; %bb.01839; GFX9-SDAG-NEXT: s_add_i32 s6, s32, 0xfff1840; GFX9-SDAG-NEXT: v_lshl_add_u32 v1, v1, 2, 151841; GFX9-SDAG-NEXT: s_and_b32 s9, s6, 0xfffff0001842; GFX9-SDAG-NEXT: v_and_b32_e32 v1, -16, v11843; GFX9-SDAG-NEXT: s_mov_b64 s[6:7], exec1844; GFX9-SDAG-NEXT: s_mov_b32 s10, 01845; GFX9-SDAG-NEXT: .LBB14_2: ; =>This Inner Loop Header: Depth=11846; GFX9-SDAG-NEXT: s_ff1_i32_b64 s11, s[6:7]1847; GFX9-SDAG-NEXT: v_readlane_b32 s12, v1, s111848; GFX9-SDAG-NEXT: s_bitset0_b64 s[6:7], s111849; GFX9-SDAG-NEXT: s_max_u32 s10, s10, s121850; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[6:7], 01851; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB14_21852; GFX9-SDAG-NEXT: ; %bb.3:1853; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s91854; GFX9-SDAG-NEXT: v_lshl_add_u32 v1, s10, 6, v11855; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v11856; GFX9-SDAG-NEXT: v_and_b32_e32 v1, 0x3ff, v311857; GFX9-SDAG-NEXT: v_lshl_add_u32 v1, v1, 2, 151858; GFX9-SDAG-NEXT: v_and_b32_e32 v1, 0x1ff0, v11859; GFX9-SDAG-NEXT: s_mov_b64 s[6:7], exec1860; GFX9-SDAG-NEXT: s_mov_b32 s10, 01861; GFX9-SDAG-NEXT: .LBB14_4: ; =>This Inner Loop Header: Depth=11862; GFX9-SDAG-NEXT: s_ff1_i32_b64 s11, s[6:7]1863; GFX9-SDAG-NEXT: v_readlane_b32 s12, v1, s111864; GFX9-SDAG-NEXT: s_bitset0_b64 s[6:7], s111865; GFX9-SDAG-NEXT: s_max_u32 s10, s10, s121866; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[6:7], 01867; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB14_41868; GFX9-SDAG-NEXT: ; %bb.5:1869; GFX9-SDAG-NEXT: s_mov_b32 s6, s321870; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s61871; GFX9-SDAG-NEXT: v_lshl_add_u32 v1, s10, 6, v11872; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v11873; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, 31874; GFX9-SDAG-NEXT: v_mov_b32_e32 v2, s91875; GFX9-SDAG-NEXT: buffer_store_dword v1, v2, s[0:3], 0 offen1876; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)1877; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, 41878; GFX9-SDAG-NEXT: buffer_store_dword v1, off, s[0:3], s61879; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)1880; GFX9-SDAG-NEXT: .LBB14_6: ; %bb.11881; GFX9-SDAG-NEXT: s_or_b64 exec, exec, s[4:5]1882; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 151883; GFX9-SDAG-NEXT: v_and_b32_e32 v0, -16, v01884; GFX9-SDAG-NEXT: s_mov_b64 s[4:5], exec1885; GFX9-SDAG-NEXT: .LBB14_7: ; =>This Inner Loop Header: Depth=11886; GFX9-SDAG-NEXT: s_ff1_i32_b64 s6, s[4:5]1887; GFX9-SDAG-NEXT: v_readlane_b32 s7, v0, s61888; GFX9-SDAG-NEXT: s_bitset0_b64 s[4:5], s61889; GFX9-SDAG-NEXT: s_max_u32 s8, s8, s71890; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[4:5], 01891; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB14_71892; GFX9-SDAG-NEXT: ; %bb.8:1893; GFX9-SDAG-NEXT: s_mov_b32 s4, s321894; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s41895; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, s8, 6, v01896; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v01897; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 11898; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s331899; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)1900; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 21901; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s41902; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)1903; GFX9-SDAG-NEXT: s_mov_b32 s32, s341904; GFX9-SDAG-NEXT: s_mov_b32 s34, s141905; GFX9-SDAG-NEXT: s_mov_b32 s33, s131906; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]1907;1908; GFX9-GISEL-LABEL: test_dynamic_stackalloc_device_multiple_allocas:1909; GFX9-GISEL: ; %bb.0: ; %entry1910; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1911; GFX9-GISEL-NEXT: s_mov_b32 s13, s331912; GFX9-GISEL-NEXT: s_add_i32 s33, s32, 0xfc01913; GFX9-GISEL-NEXT: s_mov_b32 s14, s341914; GFX9-GISEL-NEXT: s_mov_b32 s8, 01915; GFX9-GISEL-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01916; GFX9-GISEL-NEXT: s_and_b32 s33, s33, 0xfffff0001917; GFX9-GISEL-NEXT: s_mov_b32 s34, s321918; GFX9-GISEL-NEXT: s_addk_i32 s32, 0x30001919; GFX9-GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc1920; GFX9-GISEL-NEXT: s_cbranch_execz .LBB14_61921; GFX9-GISEL-NEXT: ; %bb.1: ; %bb.01922; GFX9-GISEL-NEXT: v_lshl_add_u32 v1, v1, 2, 151923; GFX9-GISEL-NEXT: v_and_b32_e32 v2, 0x3ff, v311924; GFX9-GISEL-NEXT: v_and_b32_e32 v1, -16, v11925; GFX9-GISEL-NEXT: s_mov_b64 s[6:7], exec1926; GFX9-GISEL-NEXT: s_mov_b32 s9, 01927; GFX9-GISEL-NEXT: .LBB14_2: ; =>This Inner Loop Header: Depth=11928; GFX9-GISEL-NEXT: s_ff1_i32_b64 s10, s[6:7]1929; GFX9-GISEL-NEXT: v_readlane_b32 s11, v1, s101930; GFX9-GISEL-NEXT: s_bitset0_b64 s[6:7], s101931; GFX9-GISEL-NEXT: s_max_u32 s9, s9, s111932; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[6:7], 01933; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB14_21934; GFX9-GISEL-NEXT: ; %bb.3:1935; GFX9-GISEL-NEXT: s_add_u32 s7, s32, 0xfff1936; GFX9-GISEL-NEXT: s_lshl_b32 s6, s9, 61937; GFX9-GISEL-NEXT: s_and_b32 s9, s7, 0xfffff0001938; GFX9-GISEL-NEXT: v_lshl_add_u32 v1, v2, 2, 151939; GFX9-GISEL-NEXT: s_add_u32 s32, s9, s61940; GFX9-GISEL-NEXT: v_and_b32_e32 v1, -16, v11941; GFX9-GISEL-NEXT: s_mov_b64 s[6:7], exec1942; GFX9-GISEL-NEXT: s_mov_b32 s10, 01943; GFX9-GISEL-NEXT: .LBB14_4: ; =>This Inner Loop Header: Depth=11944; GFX9-GISEL-NEXT: s_ff1_i32_b64 s11, s[6:7]1945; GFX9-GISEL-NEXT: v_readlane_b32 s12, v1, s111946; GFX9-GISEL-NEXT: s_bitset0_b64 s[6:7], s111947; GFX9-GISEL-NEXT: s_max_u32 s10, s10, s121948; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[6:7], 01949; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB14_41950; GFX9-GISEL-NEXT: ; %bb.5:1951; GFX9-GISEL-NEXT: s_mov_b32 s6, s321952; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, 31953; GFX9-GISEL-NEXT: v_mov_b32_e32 v2, s91954; GFX9-GISEL-NEXT: s_lshl_b32 s7, s10, 61955; GFX9-GISEL-NEXT: buffer_store_dword v1, v2, s[0:3], 0 offen1956; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)1957; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, 41958; GFX9-GISEL-NEXT: v_mov_b32_e32 v2, s61959; GFX9-GISEL-NEXT: s_add_u32 s32, s6, s71960; GFX9-GISEL-NEXT: buffer_store_dword v1, v2, s[0:3], 0 offen1961; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)1962; GFX9-GISEL-NEXT: .LBB14_6: ; %bb.11963; GFX9-GISEL-NEXT: s_or_b64 exec, exec, s[4:5]1964; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 151965; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v01966; GFX9-GISEL-NEXT: s_mov_b64 s[4:5], exec1967; GFX9-GISEL-NEXT: .LBB14_7: ; =>This Inner Loop Header: Depth=11968; GFX9-GISEL-NEXT: s_ff1_i32_b64 s6, s[4:5]1969; GFX9-GISEL-NEXT: v_readlane_b32 s7, v0, s61970; GFX9-GISEL-NEXT: s_bitset0_b64 s[4:5], s61971; GFX9-GISEL-NEXT: s_max_u32 s8, s8, s71972; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[4:5], 01973; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB14_71974; GFX9-GISEL-NEXT: ; %bb.8:1975; GFX9-GISEL-NEXT: s_mov_b32 s4, s321976; GFX9-GISEL-NEXT: s_lshl_b32 s5, s8, 61977; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 11978; GFX9-GISEL-NEXT: s_add_u32 s32, s4, s51979; GFX9-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], s331980; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)1981; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 21982; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s41983; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen1984; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)1985; GFX9-GISEL-NEXT: s_mov_b32 s32, s341986; GFX9-GISEL-NEXT: s_mov_b32 s34, s141987; GFX9-GISEL-NEXT: s_mov_b32 s33, s131988; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]1989;1990; GFX11-SDAG-LABEL: test_dynamic_stackalloc_device_multiple_allocas:1991; GFX11-SDAG: ; %bb.0: ; %entry1992; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1993; GFX11-SDAG-NEXT: s_mov_b32 s7, s331994; GFX11-SDAG-NEXT: s_add_i32 s33, s32, 631995; GFX11-SDAG-NEXT: s_mov_b32 s8, s341996; GFX11-SDAG-NEXT: s_mov_b32 s0, 01997; GFX11-SDAG-NEXT: s_mov_b32 s1, exec_lo1998; GFX11-SDAG-NEXT: s_and_not1_b32 s33, s33, 631999; GFX11-SDAG-NEXT: s_mov_b32 s34, s322000; GFX11-SDAG-NEXT: s_addk_i32 s32, 0xc02001; GFX11-SDAG-NEXT: v_cmpx_eq_u32_e32 0, v02002; GFX11-SDAG-NEXT: s_cbranch_execz .LBB14_62003; GFX11-SDAG-NEXT: ; %bb.1: ; %bb.02004; GFX11-SDAG-NEXT: v_lshl_add_u32 v1, v1, 2, 152005; GFX11-SDAG-NEXT: s_add_i32 s2, s32, 0x7ff2006; GFX11-SDAG-NEXT: s_mov_b32 s4, exec_lo2007; GFX11-SDAG-NEXT: s_and_b32 s2, s2, 0xfffff8002008; GFX11-SDAG-NEXT: s_mov_b32 s3, 02009; GFX11-SDAG-NEXT: v_and_b32_e32 v1, -16, v12010; GFX11-SDAG-NEXT: .LBB14_2: ; =>This Inner Loop Header: Depth=12011; GFX11-SDAG-NEXT: s_ctz_i32_b32 s5, s42012; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)2013; GFX11-SDAG-NEXT: v_readlane_b32 s6, v1, s52014; GFX11-SDAG-NEXT: s_bitset0_b32 s4, s52015; GFX11-SDAG-NEXT: s_max_u32 s3, s3, s62016; GFX11-SDAG-NEXT: s_cmp_lg_u32 s4, 02017; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB14_22018; GFX11-SDAG-NEXT: ; %bb.3:2019; GFX11-SDAG-NEXT: v_and_b32_e32 v1, 0x3ff, v312020; GFX11-SDAG-NEXT: v_lshl_add_u32 v2, s3, 5, s22021; GFX11-SDAG-NEXT: s_mov_b32 s4, exec_lo2022; GFX11-SDAG-NEXT: s_mov_b32 s3, 02023; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2024; GFX11-SDAG-NEXT: v_lshl_add_u32 v1, v1, 2, 152025; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v22026; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)2027; GFX11-SDAG-NEXT: v_and_b32_e32 v1, 0x1ff0, v12028; GFX11-SDAG-NEXT: .LBB14_4: ; =>This Inner Loop Header: Depth=12029; GFX11-SDAG-NEXT: s_ctz_i32_b32 s5, s42030; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)2031; GFX11-SDAG-NEXT: v_readlane_b32 s6, v1, s52032; GFX11-SDAG-NEXT: s_bitset0_b32 s4, s52033; GFX11-SDAG-NEXT: s_max_u32 s3, s3, s62034; GFX11-SDAG-NEXT: s_cmp_lg_u32 s4, 02035; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB14_42036; GFX11-SDAG-NEXT: ; %bb.5:2037; GFX11-SDAG-NEXT: s_mov_b32 s4, s322038; GFX11-SDAG-NEXT: v_dual_mov_b32 v2, 3 :: v_dual_mov_b32 v3, 42039; GFX11-SDAG-NEXT: v_lshl_add_u32 v1, s3, 5, s42040; GFX11-SDAG-NEXT: scratch_store_b32 off, v2, s2 dlc2041; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x02042; GFX11-SDAG-NEXT: scratch_store_b32 off, v3, s4 dlc2043; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x02044; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v12045; GFX11-SDAG-NEXT: .LBB14_6: ; %bb.12046; GFX11-SDAG-NEXT: s_or_b32 exec_lo, exec_lo, s12047; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 152048; GFX11-SDAG-NEXT: s_mov_b32 s1, exec_lo2049; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)2050; GFX11-SDAG-NEXT: v_and_b32_e32 v0, -16, v02051; GFX11-SDAG-NEXT: .LBB14_7: ; =>This Inner Loop Header: Depth=12052; GFX11-SDAG-NEXT: s_ctz_i32_b32 s2, s12053; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)2054; GFX11-SDAG-NEXT: v_readlane_b32 s3, v0, s22055; GFX11-SDAG-NEXT: s_bitset0_b32 s1, s22056; GFX11-SDAG-NEXT: s_max_u32 s0, s0, s32057; GFX11-SDAG-NEXT: s_cmp_lg_u32 s1, 02058; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB14_72059; GFX11-SDAG-NEXT: ; %bb.8:2060; GFX11-SDAG-NEXT: s_mov_b32 s1, s322061; GFX11-SDAG-NEXT: v_dual_mov_b32 v1, 1 :: v_dual_mov_b32 v2, 22062; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s0, 5, s12063; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s33 dlc2064; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x02065; GFX11-SDAG-NEXT: scratch_store_b32 off, v2, s1 dlc2066; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x02067; GFX11-SDAG-NEXT: s_mov_b32 s33, s72068; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v02069; GFX11-SDAG-NEXT: s_mov_b32 s32, s342070; GFX11-SDAG-NEXT: s_mov_b32 s34, s82071; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]2072;2073; GFX11-GISEL-LABEL: test_dynamic_stackalloc_device_multiple_allocas:2074; GFX11-GISEL: ; %bb.0: ; %entry2075; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2076; GFX11-GISEL-NEXT: s_mov_b32 s7, s332077; GFX11-GISEL-NEXT: s_add_i32 s33, s32, 632078; GFX11-GISEL-NEXT: s_mov_b32 s8, s342079; GFX11-GISEL-NEXT: s_mov_b32 s0, 02080; GFX11-GISEL-NEXT: s_mov_b32 s1, exec_lo2081; GFX11-GISEL-NEXT: s_and_not1_b32 s33, s33, 632082; GFX11-GISEL-NEXT: s_mov_b32 s34, s322083; GFX11-GISEL-NEXT: s_addk_i32 s32, 0xc02084; GFX11-GISEL-NEXT: v_cmpx_eq_u32_e32 0, v02085; GFX11-GISEL-NEXT: s_cbranch_execz .LBB14_62086; GFX11-GISEL-NEXT: ; %bb.1: ; %bb.02087; GFX11-GISEL-NEXT: v_lshl_add_u32 v2, v1, 2, 152088; GFX11-GISEL-NEXT: v_and_b32_e32 v1, 0x3ff, v312089; GFX11-GISEL-NEXT: s_mov_b32 s3, exec_lo2090; GFX11-GISEL-NEXT: s_mov_b32 s2, 02091; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)2092; GFX11-GISEL-NEXT: v_and_b32_e32 v2, -16, v22093; GFX11-GISEL-NEXT: .LBB14_2: ; =>This Inner Loop Header: Depth=12094; GFX11-GISEL-NEXT: s_ctz_i32_b32 s4, s32095; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)2096; GFX11-GISEL-NEXT: v_readlane_b32 s5, v2, s42097; GFX11-GISEL-NEXT: s_bitset0_b32 s3, s42098; GFX11-GISEL-NEXT: s_max_u32 s2, s2, s52099; GFX11-GISEL-NEXT: s_cmp_lg_u32 s3, 02100; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB14_22101; GFX11-GISEL-NEXT: ; %bb.3:2102; GFX11-GISEL-NEXT: v_lshl_add_u32 v1, v1, 2, 152103; GFX11-GISEL-NEXT: s_lshl_b32 s5, s2, 52104; GFX11-GISEL-NEXT: s_add_u32 s2, s32, 0x7ff2105; GFX11-GISEL-NEXT: s_mov_b32 s4, exec_lo2106; GFX11-GISEL-NEXT: s_and_b32 s2, s2, 0xfffff8002107; GFX11-GISEL-NEXT: v_and_b32_e32 v1, -16, v12108; GFX11-GISEL-NEXT: s_mov_b32 s3, 02109; GFX11-GISEL-NEXT: s_add_u32 s32, s2, s52110; GFX11-GISEL-NEXT: .LBB14_4: ; =>This Inner Loop Header: Depth=12111; GFX11-GISEL-NEXT: s_ctz_i32_b32 s5, s42112; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)2113; GFX11-GISEL-NEXT: v_readlane_b32 s6, v1, s52114; GFX11-GISEL-NEXT: s_bitset0_b32 s4, s52115; GFX11-GISEL-NEXT: s_max_u32 s3, s3, s62116; GFX11-GISEL-NEXT: s_cmp_lg_u32 s4, 02117; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB14_42118; GFX11-GISEL-NEXT: ; %bb.5:2119; GFX11-GISEL-NEXT: v_dual_mov_b32 v1, 3 :: v_dual_mov_b32 v2, 42120; GFX11-GISEL-NEXT: s_mov_b32 s4, s322121; GFX11-GISEL-NEXT: s_lshl_b32 s3, s3, 52122; GFX11-GISEL-NEXT: scratch_store_b32 off, v1, s2 dlc2123; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x02124; GFX11-GISEL-NEXT: scratch_store_b32 off, v2, s4 dlc2125; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x02126; GFX11-GISEL-NEXT: s_add_u32 s32, s4, s32127; GFX11-GISEL-NEXT: .LBB14_6: ; %bb.12128; GFX11-GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s12129; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 152130; GFX11-GISEL-NEXT: s_mov_b32 s1, exec_lo2131; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2132; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v02133; GFX11-GISEL-NEXT: .LBB14_7: ; =>This Inner Loop Header: Depth=12134; GFX11-GISEL-NEXT: s_ctz_i32_b32 s2, s12135; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)2136; GFX11-GISEL-NEXT: v_readlane_b32 s3, v0, s22137; GFX11-GISEL-NEXT: s_bitset0_b32 s1, s22138; GFX11-GISEL-NEXT: s_max_u32 s0, s0, s32139; GFX11-GISEL-NEXT: s_cmp_lg_u32 s1, 02140; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB14_72141; GFX11-GISEL-NEXT: ; %bb.8:2142; GFX11-GISEL-NEXT: v_dual_mov_b32 v0, 1 :: v_dual_mov_b32 v1, 22143; GFX11-GISEL-NEXT: s_mov_b32 s1, s322144; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 52145; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s33 dlc2146; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x02147; GFX11-GISEL-NEXT: scratch_store_b32 off, v1, s1 dlc2148; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x02149; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s02150; GFX11-GISEL-NEXT: s_mov_b32 s32, s342151; GFX11-GISEL-NEXT: s_mov_b32 s34, s82152; GFX11-GISEL-NEXT: s_mov_b32 s33, s72153; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]2154entry:2155 %cond = icmp eq i32 %n, 02156 %alloca1 = alloca i32, i32 8, addrspace(5)2157 %alloca2 = alloca i32, i32 %n, addrspace(5)2158 br i1 %cond, label %bb.0, label %bb.12159bb.0:2160 %idx = call i32 @llvm.amdgcn.workitem.id.x()2161 %alloca3 = alloca i32, i32 %m, align 64, addrspace(5)2162 %alloca4 = alloca i32, i32 %idx, align 4, addrspace(5)2163 store volatile i32 3, ptr addrspace(5) %alloca32164 store volatile i32 4, ptr addrspace(5) %alloca42165 br label %bb.12166bb.1:2167 store volatile i32 1, ptr addrspace(5) %alloca12168 store volatile i32 2, ptr addrspace(5) %alloca22169 ret void2170}2171 2172define void @test_dynamic_stackalloc_device_control_flow(i32 %n, i32 %m) {2173; GFX9-SDAG-LABEL: test_dynamic_stackalloc_device_control_flow:2174; GFX9-SDAG: ; %bb.0: ; %entry2175; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2176; GFX9-SDAG-NEXT: s_mov_b32 s12, s332177; GFX9-SDAG-NEXT: s_add_i32 s33, s32, 0xfc02178; GFX9-SDAG-NEXT: s_mov_b32 s13, s342179; GFX9-SDAG-NEXT: s_mov_b32 s8, 02180; GFX9-SDAG-NEXT: v_cmp_ne_u32_e32 vcc, 0, v02181; GFX9-SDAG-NEXT: s_and_b32 s33, s33, 0xfffff0002182; GFX9-SDAG-NEXT: s_mov_b32 s34, s322183; GFX9-SDAG-NEXT: s_addk_i32 s32, 0x20002184; GFX9-SDAG-NEXT: s_and_saveexec_b64 s[4:5], vcc2185; GFX9-SDAG-NEXT: s_xor_b64 s[4:5], exec, s[4:5]2186; GFX9-SDAG-NEXT: s_cbranch_execz .LBB15_42187; GFX9-SDAG-NEXT: ; %bb.1: ; %bb.12188; GFX9-SDAG-NEXT: s_add_i32 s6, s32, 0xfff2189; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, v1, 2, 152190; GFX9-SDAG-NEXT: s_and_b32 s9, s6, 0xfffff0002191; GFX9-SDAG-NEXT: v_and_b32_e32 v0, -16, v02192; GFX9-SDAG-NEXT: s_mov_b64 s[6:7], exec2193; GFX9-SDAG-NEXT: .LBB15_2: ; =>This Inner Loop Header: Depth=12194; GFX9-SDAG-NEXT: s_ff1_i32_b64 s10, s[6:7]2195; GFX9-SDAG-NEXT: v_readlane_b32 s11, v0, s102196; GFX9-SDAG-NEXT: s_bitset0_b64 s[6:7], s102197; GFX9-SDAG-NEXT: s_max_u32 s8, s8, s112198; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[6:7], 02199; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB15_22200; GFX9-SDAG-NEXT: ; %bb.3:2201; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s92202; GFX9-SDAG-NEXT: v_lshl_add_u32 v1, s8, 6, v02203; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v12204; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, 22205; GFX9-SDAG-NEXT: buffer_store_dword v1, v0, s[0:3], 0 offen2206; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)2207; GFX9-SDAG-NEXT: ; implicit-def: $vgpr312208; GFX9-SDAG-NEXT: .LBB15_4: ; %Flow2209; GFX9-SDAG-NEXT: s_andn2_saveexec_b64 s[4:5], s[4:5]2210; GFX9-SDAG-NEXT: s_cbranch_execz .LBB15_82211; GFX9-SDAG-NEXT: ; %bb.5: ; %bb.02212; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v312213; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 152214; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v02215; GFX9-SDAG-NEXT: s_mov_b64 s[6:7], exec2216; GFX9-SDAG-NEXT: s_mov_b32 s8, 02217; GFX9-SDAG-NEXT: .LBB15_6: ; =>This Inner Loop Header: Depth=12218; GFX9-SDAG-NEXT: s_ff1_i32_b64 s9, s[6:7]2219; GFX9-SDAG-NEXT: v_readlane_b32 s10, v0, s92220; GFX9-SDAG-NEXT: s_bitset0_b64 s[6:7], s92221; GFX9-SDAG-NEXT: s_max_u32 s8, s8, s102222; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[6:7], 02223; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB15_62224; GFX9-SDAG-NEXT: ; %bb.7:2225; GFX9-SDAG-NEXT: s_mov_b32 s6, s322226; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s62227; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, s8, 6, v02228; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v02229; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 12230; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s62231; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)2232; GFX9-SDAG-NEXT: .LBB15_8: ; %bb.22233; GFX9-SDAG-NEXT: s_or_b64 exec, exec, s[4:5]2234; GFX9-SDAG-NEXT: s_mov_b32 s32, s342235; GFX9-SDAG-NEXT: s_mov_b32 s34, s132236; GFX9-SDAG-NEXT: s_mov_b32 s33, s122237; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]2238;2239; GFX9-GISEL-LABEL: test_dynamic_stackalloc_device_control_flow:2240; GFX9-GISEL: ; %bb.0: ; %entry2241; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2242; GFX9-GISEL-NEXT: s_mov_b32 s11, s332243; GFX9-GISEL-NEXT: s_add_i32 s33, s32, 0xfc02244; GFX9-GISEL-NEXT: s_mov_b32 s12, s342245; GFX9-GISEL-NEXT: s_mov_b32 s8, 02246; GFX9-GISEL-NEXT: v_cmp_ne_u32_e32 vcc, 0, v02247; GFX9-GISEL-NEXT: s_and_b32 s33, s33, 0xfffff0002248; GFX9-GISEL-NEXT: s_mov_b32 s34, s322249; GFX9-GISEL-NEXT: s_addk_i32 s32, 0x20002250; GFX9-GISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc2251; GFX9-GISEL-NEXT: s_xor_b64 s[4:5], exec, s[4:5]2252; GFX9-GISEL-NEXT: s_cbranch_execz .LBB15_42253; GFX9-GISEL-NEXT: ; %bb.1: ; %bb.12254; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v1, 2, 152255; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v02256; GFX9-GISEL-NEXT: s_mov_b64 s[6:7], exec2257; GFX9-GISEL-NEXT: .LBB15_2: ; =>This Inner Loop Header: Depth=12258; GFX9-GISEL-NEXT: s_ff1_i32_b64 s9, s[6:7]2259; GFX9-GISEL-NEXT: v_readlane_b32 s10, v0, s92260; GFX9-GISEL-NEXT: s_bitset0_b64 s[6:7], s92261; GFX9-GISEL-NEXT: s_max_u32 s8, s8, s102262; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[6:7], 02263; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB15_22264; GFX9-GISEL-NEXT: ; %bb.3:2265; GFX9-GISEL-NEXT: s_add_u32 s7, s32, 0xfff2266; GFX9-GISEL-NEXT: s_and_b32 s7, s7, 0xfffff0002267; GFX9-GISEL-NEXT: s_lshl_b32 s6, s8, 62268; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 22269; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s72270; GFX9-GISEL-NEXT: s_add_u32 s32, s7, s62271; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen2272; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)2273; GFX9-GISEL-NEXT: ; implicit-def: $vgpr312274; GFX9-GISEL-NEXT: .LBB15_4: ; %Flow2275; GFX9-GISEL-NEXT: s_andn2_saveexec_b64 s[4:5], s[4:5]2276; GFX9-GISEL-NEXT: s_cbranch_execz .LBB15_82277; GFX9-GISEL-NEXT: ; %bb.5: ; %bb.02278; GFX9-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v312279; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 152280; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v02281; GFX9-GISEL-NEXT: s_mov_b64 s[6:7], exec2282; GFX9-GISEL-NEXT: s_mov_b32 s8, 02283; GFX9-GISEL-NEXT: .LBB15_6: ; =>This Inner Loop Header: Depth=12284; GFX9-GISEL-NEXT: s_ff1_i32_b64 s9, s[6:7]2285; GFX9-GISEL-NEXT: v_readlane_b32 s10, v0, s92286; GFX9-GISEL-NEXT: s_bitset0_b64 s[6:7], s92287; GFX9-GISEL-NEXT: s_max_u32 s8, s8, s102288; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[6:7], 02289; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB15_62290; GFX9-GISEL-NEXT: ; %bb.7:2291; GFX9-GISEL-NEXT: s_mov_b32 s6, s322292; GFX9-GISEL-NEXT: s_lshl_b32 s7, s8, 62293; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 12294; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s62295; GFX9-GISEL-NEXT: s_add_u32 s32, s6, s72296; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen2297; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)2298; GFX9-GISEL-NEXT: .LBB15_8: ; %bb.22299; GFX9-GISEL-NEXT: s_or_b64 exec, exec, s[4:5]2300; GFX9-GISEL-NEXT: s_mov_b32 s32, s342301; GFX9-GISEL-NEXT: s_mov_b32 s34, s122302; GFX9-GISEL-NEXT: s_mov_b32 s33, s112303; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]2304;2305; GFX11-SDAG-LABEL: test_dynamic_stackalloc_device_control_flow:2306; GFX11-SDAG: ; %bb.0: ; %entry2307; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2308; GFX11-SDAG-NEXT: s_mov_b32 s6, s332309; GFX11-SDAG-NEXT: s_add_i32 s33, s32, 632310; GFX11-SDAG-NEXT: s_mov_b32 s7, s342311; GFX11-SDAG-NEXT: s_mov_b32 s1, 02312; GFX11-SDAG-NEXT: s_mov_b32 s0, exec_lo2313; GFX11-SDAG-NEXT: s_and_not1_b32 s33, s33, 632314; GFX11-SDAG-NEXT: s_mov_b32 s34, s322315; GFX11-SDAG-NEXT: s_addk_i32 s32, 0x802316; GFX11-SDAG-NEXT: v_cmpx_ne_u32_e32 0, v02317; GFX11-SDAG-NEXT: s_xor_b32 s0, exec_lo, s02318; GFX11-SDAG-NEXT: s_cbranch_execz .LBB15_42319; GFX11-SDAG-NEXT: ; %bb.1: ; %bb.12320; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, v1, 2, 152321; GFX11-SDAG-NEXT: s_add_i32 s2, s32, 0x7ff2322; GFX11-SDAG-NEXT: s_mov_b32 s3, exec_lo2323; GFX11-SDAG-NEXT: s_and_b32 s2, s2, 0xfffff8002324; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)2325; GFX11-SDAG-NEXT: v_and_b32_e32 v0, -16, v02326; GFX11-SDAG-NEXT: .LBB15_2: ; =>This Inner Loop Header: Depth=12327; GFX11-SDAG-NEXT: s_ctz_i32_b32 s4, s32328; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)2329; GFX11-SDAG-NEXT: v_readlane_b32 s5, v0, s42330; GFX11-SDAG-NEXT: s_bitset0_b32 s3, s42331; GFX11-SDAG-NEXT: s_max_u32 s1, s1, s52332; GFX11-SDAG-NEXT: s_cmp_lg_u32 s3, 02333; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB15_22334; GFX11-SDAG-NEXT: ; %bb.3:2335; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s1, 5, s22336; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, 22337; GFX11-SDAG-NEXT: ; implicit-def: $vgpr312338; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)2339; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v02340; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s2 dlc2341; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x02342; GFX11-SDAG-NEXT: .LBB15_4: ; %Flow2343; GFX11-SDAG-NEXT: s_and_not1_saveexec_b32 s0, s02344; GFX11-SDAG-NEXT: s_cbranch_execz .LBB15_82345; GFX11-SDAG-NEXT: ; %bb.5: ; %bb.02346; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x3ff, v312347; GFX11-SDAG-NEXT: s_mov_b32 s2, exec_lo2348; GFX11-SDAG-NEXT: s_mov_b32 s1, 02349; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2350; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 152351; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x1ff0, v02352; GFX11-SDAG-NEXT: .LBB15_6: ; =>This Inner Loop Header: Depth=12353; GFX11-SDAG-NEXT: s_ctz_i32_b32 s3, s22354; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)2355; GFX11-SDAG-NEXT: v_readlane_b32 s4, v0, s32356; GFX11-SDAG-NEXT: s_bitset0_b32 s2, s32357; GFX11-SDAG-NEXT: s_max_u32 s1, s1, s42358; GFX11-SDAG-NEXT: s_cmp_lg_u32 s2, 02359; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB15_62360; GFX11-SDAG-NEXT: ; %bb.7:2361; GFX11-SDAG-NEXT: s_mov_b32 s2, s322362; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, 12363; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s1, 5, s22364; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s2 dlc2365; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x02366; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v02367; GFX11-SDAG-NEXT: .LBB15_8: ; %bb.22368; GFX11-SDAG-NEXT: s_or_b32 exec_lo, exec_lo, s02369; GFX11-SDAG-NEXT: s_mov_b32 s32, s342370; GFX11-SDAG-NEXT: s_mov_b32 s34, s72371; GFX11-SDAG-NEXT: s_mov_b32 s33, s62372; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]2373;2374; GFX11-GISEL-LABEL: test_dynamic_stackalloc_device_control_flow:2375; GFX11-GISEL: ; %bb.0: ; %entry2376; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2377; GFX11-GISEL-NEXT: s_mov_b32 s5, s332378; GFX11-GISEL-NEXT: s_add_i32 s33, s32, 632379; GFX11-GISEL-NEXT: s_mov_b32 s6, s342380; GFX11-GISEL-NEXT: s_mov_b32 s1, 02381; GFX11-GISEL-NEXT: s_mov_b32 s0, exec_lo2382; GFX11-GISEL-NEXT: s_and_not1_b32 s33, s33, 632383; GFX11-GISEL-NEXT: s_mov_b32 s34, s322384; GFX11-GISEL-NEXT: s_addk_i32 s32, 0x802385; GFX11-GISEL-NEXT: v_cmpx_ne_u32_e32 0, v02386; GFX11-GISEL-NEXT: s_xor_b32 s0, exec_lo, s02387; GFX11-GISEL-NEXT: s_cbranch_execz .LBB15_42388; GFX11-GISEL-NEXT: ; %bb.1: ; %bb.12389; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v1, 2, 152390; GFX11-GISEL-NEXT: s_mov_b32 s2, exec_lo2391; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2392; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v02393; GFX11-GISEL-NEXT: .LBB15_2: ; =>This Inner Loop Header: Depth=12394; GFX11-GISEL-NEXT: s_ctz_i32_b32 s3, s22395; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)2396; GFX11-GISEL-NEXT: v_readlane_b32 s4, v0, s32397; GFX11-GISEL-NEXT: s_bitset0_b32 s2, s32398; GFX11-GISEL-NEXT: s_max_u32 s1, s1, s42399; GFX11-GISEL-NEXT: s_cmp_lg_u32 s2, 02400; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB15_22401; GFX11-GISEL-NEXT: ; %bb.3:2402; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 22403; GFX11-GISEL-NEXT: s_add_u32 s2, s32, 0x7ff2404; GFX11-GISEL-NEXT: s_lshl_b32 s1, s1, 52405; GFX11-GISEL-NEXT: s_and_b32 s2, s2, 0xfffff8002406; GFX11-GISEL-NEXT: ; implicit-def: $vgpr312407; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2408; GFX11-GISEL-NEXT: s_add_u32 s32, s2, s12409; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s2 dlc2410; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x02411; GFX11-GISEL-NEXT: .LBB15_4: ; %Flow2412; GFX11-GISEL-NEXT: s_and_not1_saveexec_b32 s0, s02413; GFX11-GISEL-NEXT: s_cbranch_execz .LBB15_82414; GFX11-GISEL-NEXT: ; %bb.5: ; %bb.02415; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v312416; GFX11-GISEL-NEXT: s_mov_b32 s2, exec_lo2417; GFX11-GISEL-NEXT: s_mov_b32 s1, 02418; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2419; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 152420; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v02421; GFX11-GISEL-NEXT: .LBB15_6: ; =>This Inner Loop Header: Depth=12422; GFX11-GISEL-NEXT: s_ctz_i32_b32 s3, s22423; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)2424; GFX11-GISEL-NEXT: v_readlane_b32 s4, v0, s32425; GFX11-GISEL-NEXT: s_bitset0_b32 s2, s32426; GFX11-GISEL-NEXT: s_max_u32 s1, s1, s42427; GFX11-GISEL-NEXT: s_cmp_lg_u32 s2, 02428; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB15_62429; GFX11-GISEL-NEXT: ; %bb.7:2430; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 12431; GFX11-GISEL-NEXT: s_mov_b32 s2, s322432; GFX11-GISEL-NEXT: s_lshl_b32 s1, s1, 52433; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2434; GFX11-GISEL-NEXT: s_add_u32 s32, s2, s12435; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s2 dlc2436; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x02437; GFX11-GISEL-NEXT: .LBB15_8: ; %bb.22438; GFX11-GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s02439; GFX11-GISEL-NEXT: s_mov_b32 s32, s342440; GFX11-GISEL-NEXT: s_mov_b32 s34, s62441; GFX11-GISEL-NEXT: s_mov_b32 s33, s52442; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]2443entry:2444 %cond = icmp eq i32 %n, 02445 br i1 %cond, label %bb.0, label %bb.12446bb.0:2447 %idx = call i32 @llvm.amdgcn.workitem.id.x()2448 %alloca1 = alloca i32, i32 %idx, align 4, addrspace(5)2449 store volatile i32 1, ptr addrspace(5) %alloca12450 br label %bb.22451bb.1:2452 %alloca2 = alloca i32, i32 %m, align 64, addrspace(5)2453 store volatile i32 2, ptr addrspace(5) %alloca22454 br label %bb.22455bb.2:2456 ret void2457}2458 2459define void @test_dynamic_stackalloc_device_divergent_non_standard_size_i16(i16 %n) {2460; GFX9-SDAG-LABEL: test_dynamic_stackalloc_device_divergent_non_standard_size_i16:2461; GFX9-SDAG: ; %bb.0:2462; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2463; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0xffff, v02464; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 152465; GFX9-SDAG-NEXT: s_mov_b32 s9, s332466; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0x7fff0, v02467; GFX9-SDAG-NEXT: s_mov_b64 s[4:5], exec2468; GFX9-SDAG-NEXT: s_mov_b32 s6, 02469; GFX9-SDAG-NEXT: s_mov_b32 s33, s322470; GFX9-SDAG-NEXT: s_addk_i32 s32, 0x4002471; GFX9-SDAG-NEXT: .LBB16_1: ; =>This Inner Loop Header: Depth=12472; GFX9-SDAG-NEXT: s_ff1_i32_b64 s7, s[4:5]2473; GFX9-SDAG-NEXT: v_readlane_b32 s8, v0, s72474; GFX9-SDAG-NEXT: s_bitset0_b64 s[4:5], s72475; GFX9-SDAG-NEXT: s_max_u32 s6, s6, s82476; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[4:5], 02477; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB16_12478; GFX9-SDAG-NEXT: ; %bb.2:2479; GFX9-SDAG-NEXT: s_mov_b32 s4, s322480; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s42481; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, s6, 6, v02482; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v02483; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 0x29a2484; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s42485; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)2486; GFX9-SDAG-NEXT: s_mov_b32 s32, s332487; GFX9-SDAG-NEXT: s_mov_b32 s33, s92488; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]2489;2490; GFX9-GISEL-LABEL: test_dynamic_stackalloc_device_divergent_non_standard_size_i16:2491; GFX9-GISEL: ; %bb.0:2492; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2493; GFX9-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02494; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 152495; GFX9-GISEL-NEXT: s_mov_b32 s9, s332496; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v02497; GFX9-GISEL-NEXT: s_mov_b64 s[4:5], exec2498; GFX9-GISEL-NEXT: s_mov_b32 s6, 02499; GFX9-GISEL-NEXT: s_mov_b32 s33, s322500; GFX9-GISEL-NEXT: s_addk_i32 s32, 0x4002501; GFX9-GISEL-NEXT: .LBB16_1: ; =>This Inner Loop Header: Depth=12502; GFX9-GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]2503; GFX9-GISEL-NEXT: v_readlane_b32 s8, v0, s72504; GFX9-GISEL-NEXT: s_bitset0_b64 s[4:5], s72505; GFX9-GISEL-NEXT: s_max_u32 s6, s6, s82506; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[4:5], 02507; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB16_12508; GFX9-GISEL-NEXT: ; %bb.2:2509; GFX9-GISEL-NEXT: s_mov_b32 s4, s322510; GFX9-GISEL-NEXT: s_lshl_b32 s5, s6, 62511; GFX9-GISEL-NEXT: s_add_u32 s32, s4, s52512; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 0x29a2513; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s42514; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen2515; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)2516; GFX9-GISEL-NEXT: s_mov_b32 s32, s332517; GFX9-GISEL-NEXT: s_mov_b32 s33, s92518; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]2519;2520; GFX11-SDAG-LABEL: test_dynamic_stackalloc_device_divergent_non_standard_size_i16:2521; GFX11-SDAG: ; %bb.0:2522; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2523; GFX11-SDAG-NEXT: v_mov_b16_e32 v1.h, 02524; GFX11-SDAG-NEXT: v_mov_b16_e32 v1.l, v0.l2525; GFX11-SDAG-NEXT: s_mov_b32 s4, s332526; GFX11-SDAG-NEXT: s_mov_b32 s1, exec_lo2527; GFX11-SDAG-NEXT: s_mov_b32 s0, 02528; GFX11-SDAG-NEXT: s_mov_b32 s33, s322529; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, v1, 2, 152530; GFX11-SDAG-NEXT: s_add_i32 s32, s32, 162531; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)2532; GFX11-SDAG-NEXT: v_and_b32_e32 v0, 0x7fff0, v02533; GFX11-SDAG-NEXT: .LBB16_1: ; =>This Inner Loop Header: Depth=12534; GFX11-SDAG-NEXT: s_ctz_i32_b32 s2, s12535; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)2536; GFX11-SDAG-NEXT: v_readlane_b32 s3, v0, s22537; GFX11-SDAG-NEXT: s_bitset0_b32 s1, s22538; GFX11-SDAG-NEXT: s_max_u32 s0, s0, s32539; GFX11-SDAG-NEXT: s_cmp_lg_u32 s1, 02540; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB16_12541; GFX11-SDAG-NEXT: ; %bb.2:2542; GFX11-SDAG-NEXT: s_mov_b32 s1, s322543; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, 0x29a2544; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s0, 5, s12545; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s1 dlc2546; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x02547; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v02548; GFX11-SDAG-NEXT: s_mov_b32 s32, s332549; GFX11-SDAG-NEXT: s_mov_b32 s33, s42550; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]2551;2552; GFX11-GISEL-LABEL: test_dynamic_stackalloc_device_divergent_non_standard_size_i16:2553; GFX11-GISEL: ; %bb.0:2554; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2555; GFX11-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v02556; GFX11-GISEL-NEXT: s_mov_b32 s4, s332557; GFX11-GISEL-NEXT: s_mov_b32 s1, exec_lo2558; GFX11-GISEL-NEXT: s_mov_b32 s0, 02559; GFX11-GISEL-NEXT: s_mov_b32 s33, s322560; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 152561; GFX11-GISEL-NEXT: s_add_i32 s32, s32, 162562; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2563; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v02564; GFX11-GISEL-NEXT: .LBB16_1: ; =>This Inner Loop Header: Depth=12565; GFX11-GISEL-NEXT: s_ctz_i32_b32 s2, s12566; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)2567; GFX11-GISEL-NEXT: v_readlane_b32 s3, v0, s22568; GFX11-GISEL-NEXT: s_bitset0_b32 s1, s22569; GFX11-GISEL-NEXT: s_max_u32 s0, s0, s32570; GFX11-GISEL-NEXT: s_cmp_lg_u32 s1, 02571; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB16_12572; GFX11-GISEL-NEXT: ; %bb.2:2573; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 0x29a2574; GFX11-GISEL-NEXT: s_mov_b32 s1, s322575; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 52576; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2577; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s02578; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s1 dlc2579; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x02580; GFX11-GISEL-NEXT: s_mov_b32 s32, s332581; GFX11-GISEL-NEXT: s_mov_b32 s33, s42582; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]2583 %alloca = alloca i32, i16 %n, align 2, addrspace(5)2584 store volatile i32 666, ptr addrspace(5) %alloca2585 ret void2586}2587 2588define void @test_dynamic_stackalloc_device_divergent_non_standard_size_i64(i64 %n) {2589; GFX9-SDAG-LABEL: test_dynamic_stackalloc_device_divergent_non_standard_size_i64:2590; GFX9-SDAG: ; %bb.0:2591; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2592; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 152593; GFX9-SDAG-NEXT: s_mov_b32 s9, s332594; GFX9-SDAG-NEXT: v_and_b32_e32 v0, -16, v02595; GFX9-SDAG-NEXT: s_mov_b64 s[4:5], exec2596; GFX9-SDAG-NEXT: s_mov_b32 s6, 02597; GFX9-SDAG-NEXT: s_mov_b32 s33, s322598; GFX9-SDAG-NEXT: s_addk_i32 s32, 0x4002599; GFX9-SDAG-NEXT: .LBB17_1: ; =>This Inner Loop Header: Depth=12600; GFX9-SDAG-NEXT: s_ff1_i32_b64 s7, s[4:5]2601; GFX9-SDAG-NEXT: v_readlane_b32 s8, v0, s72602; GFX9-SDAG-NEXT: s_bitset0_b64 s[4:5], s72603; GFX9-SDAG-NEXT: s_max_u32 s6, s6, s82604; GFX9-SDAG-NEXT: s_cmp_lg_u64 s[4:5], 02605; GFX9-SDAG-NEXT: s_cbranch_scc1 .LBB17_12606; GFX9-SDAG-NEXT: ; %bb.2:2607; GFX9-SDAG-NEXT: s_mov_b32 s4, s322608; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s42609; GFX9-SDAG-NEXT: v_lshl_add_u32 v0, s6, 6, v02610; GFX9-SDAG-NEXT: v_readfirstlane_b32 s32, v02611; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, 0x29a2612; GFX9-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], s42613; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0)2614; GFX9-SDAG-NEXT: s_mov_b32 s32, s332615; GFX9-SDAG-NEXT: s_mov_b32 s33, s92616; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]2617;2618; GFX9-GISEL-LABEL: test_dynamic_stackalloc_device_divergent_non_standard_size_i64:2619; GFX9-GISEL: ; %bb.0:2620; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2621; GFX9-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 152622; GFX9-GISEL-NEXT: s_mov_b32 s9, s332623; GFX9-GISEL-NEXT: v_and_b32_e32 v0, -16, v02624; GFX9-GISEL-NEXT: s_mov_b64 s[4:5], exec2625; GFX9-GISEL-NEXT: s_mov_b32 s6, 02626; GFX9-GISEL-NEXT: s_mov_b32 s33, s322627; GFX9-GISEL-NEXT: s_addk_i32 s32, 0x4002628; GFX9-GISEL-NEXT: .LBB17_1: ; =>This Inner Loop Header: Depth=12629; GFX9-GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]2630; GFX9-GISEL-NEXT: v_readlane_b32 s8, v0, s72631; GFX9-GISEL-NEXT: s_bitset0_b64 s[4:5], s72632; GFX9-GISEL-NEXT: s_max_u32 s6, s6, s82633; GFX9-GISEL-NEXT: s_cmp_lg_u64 s[4:5], 02634; GFX9-GISEL-NEXT: s_cbranch_scc1 .LBB17_12635; GFX9-GISEL-NEXT: ; %bb.2:2636; GFX9-GISEL-NEXT: s_mov_b32 s4, s322637; GFX9-GISEL-NEXT: s_lshl_b32 s5, s6, 62638; GFX9-GISEL-NEXT: s_add_u32 s32, s4, s52639; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, 0x29a2640; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s42641; GFX9-GISEL-NEXT: buffer_store_dword v0, v1, s[0:3], 0 offen2642; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0)2643; GFX9-GISEL-NEXT: s_mov_b32 s32, s332644; GFX9-GISEL-NEXT: s_mov_b32 s33, s92645; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]2646;2647; GFX11-SDAG-LABEL: test_dynamic_stackalloc_device_divergent_non_standard_size_i64:2648; GFX11-SDAG: ; %bb.0:2649; GFX11-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2650; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, v0, 2, 152651; GFX11-SDAG-NEXT: s_mov_b32 s4, s332652; GFX11-SDAG-NEXT: s_mov_b32 s1, exec_lo2653; GFX11-SDAG-NEXT: s_mov_b32 s0, 02654; GFX11-SDAG-NEXT: s_mov_b32 s33, s322655; GFX11-SDAG-NEXT: v_and_b32_e32 v0, -16, v02656; GFX11-SDAG-NEXT: s_add_i32 s32, s32, 162657; GFX11-SDAG-NEXT: .LBB17_1: ; =>This Inner Loop Header: Depth=12658; GFX11-SDAG-NEXT: s_ctz_i32_b32 s2, s12659; GFX11-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)2660; GFX11-SDAG-NEXT: v_readlane_b32 s3, v0, s22661; GFX11-SDAG-NEXT: s_bitset0_b32 s1, s22662; GFX11-SDAG-NEXT: s_max_u32 s0, s0, s32663; GFX11-SDAG-NEXT: s_cmp_lg_u32 s1, 02664; GFX11-SDAG-NEXT: s_cbranch_scc1 .LBB17_12665; GFX11-SDAG-NEXT: ; %bb.2:2666; GFX11-SDAG-NEXT: s_mov_b32 s1, s322667; GFX11-SDAG-NEXT: v_mov_b32_e32 v1, 0x29a2668; GFX11-SDAG-NEXT: v_lshl_add_u32 v0, s0, 5, s12669; GFX11-SDAG-NEXT: scratch_store_b32 off, v1, s1 dlc2670; GFX11-SDAG-NEXT: s_waitcnt_vscnt null, 0x02671; GFX11-SDAG-NEXT: v_readfirstlane_b32 s32, v02672; GFX11-SDAG-NEXT: s_mov_b32 s32, s332673; GFX11-SDAG-NEXT: s_mov_b32 s33, s42674; GFX11-SDAG-NEXT: s_setpc_b64 s[30:31]2675;2676; GFX11-GISEL-LABEL: test_dynamic_stackalloc_device_divergent_non_standard_size_i64:2677; GFX11-GISEL: ; %bb.0:2678; GFX11-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2679; GFX11-GISEL-NEXT: v_lshl_add_u32 v0, v0, 2, 152680; GFX11-GISEL-NEXT: s_mov_b32 s4, s332681; GFX11-GISEL-NEXT: s_mov_b32 s1, exec_lo2682; GFX11-GISEL-NEXT: s_mov_b32 s0, 02683; GFX11-GISEL-NEXT: s_mov_b32 s33, s322684; GFX11-GISEL-NEXT: v_and_b32_e32 v0, -16, v02685; GFX11-GISEL-NEXT: s_add_i32 s32, s32, 162686; GFX11-GISEL-NEXT: .LBB17_1: ; =>This Inner Loop Header: Depth=12687; GFX11-GISEL-NEXT: s_ctz_i32_b32 s2, s12688; GFX11-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)2689; GFX11-GISEL-NEXT: v_readlane_b32 s3, v0, s22690; GFX11-GISEL-NEXT: s_bitset0_b32 s1, s22691; GFX11-GISEL-NEXT: s_max_u32 s0, s0, s32692; GFX11-GISEL-NEXT: s_cmp_lg_u32 s1, 02693; GFX11-GISEL-NEXT: s_cbranch_scc1 .LBB17_12694; GFX11-GISEL-NEXT: ; %bb.2:2695; GFX11-GISEL-NEXT: v_mov_b32_e32 v0, 0x29a2696; GFX11-GISEL-NEXT: s_mov_b32 s1, s322697; GFX11-GISEL-NEXT: s_lshl_b32 s0, s0, 52698; GFX11-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2699; GFX11-GISEL-NEXT: s_add_u32 s32, s1, s02700; GFX11-GISEL-NEXT: scratch_store_b32 off, v0, s1 dlc2701; GFX11-GISEL-NEXT: s_waitcnt_vscnt null, 0x02702; GFX11-GISEL-NEXT: s_mov_b32 s32, s332703; GFX11-GISEL-NEXT: s_mov_b32 s33, s42704; GFX11-GISEL-NEXT: s_setpc_b64 s[30:31]2705 %alloca = alloca i32, i64 %n, align 2, addrspace(5)2706 store volatile i32 666, ptr addrspace(5) %alloca2707 ret void2708}2709