281 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 --mattr=+enable-flat-scratch < %s | FileCheck -check-prefixes=GCN,FLAT_SCR_OPT %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 --mattr=+architected-flat-scratch < %s | FileCheck -check-prefixes=GCN,FLAT_SCR_ARCH %s4 5declare void @extern_func() #06 7define amdgpu_kernel void @stack_object_addrspacecast_in_kernel_no_calls() {8; FLAT_SCR_OPT-LABEL: stack_object_addrspacecast_in_kernel_no_calls:9; FLAT_SCR_OPT: ; %bb.0:10; FLAT_SCR_OPT-NEXT: s_add_u32 s8, s8, s1311; FLAT_SCR_OPT-NEXT: s_addc_u32 s9, s9, 012; FLAT_SCR_OPT-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s813; FLAT_SCR_OPT-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s914; FLAT_SCR_OPT-NEXT: s_mov_b64 s[0:1], src_private_base15; FLAT_SCR_OPT-NEXT: v_mov_b32_e32 v0, 016; FLAT_SCR_OPT-NEXT: v_mov_b32_e32 v1, s117; FLAT_SCR_OPT-NEXT: v_mov_b32_e32 v2, 018; FLAT_SCR_OPT-NEXT: flat_store_dword v[0:1], v219; FLAT_SCR_OPT-NEXT: s_waitcnt_vscnt null, 0x020; FLAT_SCR_OPT-NEXT: s_endpgm21;22; FLAT_SCR_ARCH-LABEL: stack_object_addrspacecast_in_kernel_no_calls:23; FLAT_SCR_ARCH: ; %bb.0:24; FLAT_SCR_ARCH-NEXT: s_mov_b64 s[0:1], src_private_base25; FLAT_SCR_ARCH-NEXT: v_mov_b32_e32 v0, 026; FLAT_SCR_ARCH-NEXT: v_mov_b32_e32 v1, s127; FLAT_SCR_ARCH-NEXT: v_mov_b32_e32 v2, 028; FLAT_SCR_ARCH-NEXT: flat_store_dword v[0:1], v229; FLAT_SCR_ARCH-NEXT: s_waitcnt_vscnt null, 0x030; FLAT_SCR_ARCH-NEXT: s_endpgm31 %alloca = alloca i32, addrspace(5)32 %cast = addrspacecast ptr addrspace(5) %alloca to ptr33 store volatile i32 0, ptr %cast34 ret void35}36 37define amdgpu_kernel void @stack_object_in_kernel_no_calls() {38; FLAT_SCR_OPT-LABEL: stack_object_in_kernel_no_calls:39; FLAT_SCR_OPT: ; %bb.0:40; FLAT_SCR_OPT-NEXT: s_add_u32 s8, s8, s1341; FLAT_SCR_OPT-NEXT: s_addc_u32 s9, s9, 042; FLAT_SCR_OPT-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s843; FLAT_SCR_OPT-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s944; FLAT_SCR_OPT-NEXT: v_mov_b32_e32 v0, 045; FLAT_SCR_OPT-NEXT: s_mov_b32 s0, 046; FLAT_SCR_OPT-NEXT: scratch_store_dword off, v0, s047; FLAT_SCR_OPT-NEXT: s_waitcnt_vscnt null, 0x048; FLAT_SCR_OPT-NEXT: s_endpgm49;50; FLAT_SCR_ARCH-LABEL: stack_object_in_kernel_no_calls:51; FLAT_SCR_ARCH: ; %bb.0:52; FLAT_SCR_ARCH-NEXT: v_mov_b32_e32 v0, 053; FLAT_SCR_ARCH-NEXT: s_mov_b32 s0, 054; FLAT_SCR_ARCH-NEXT: scratch_store_dword off, v0, s055; FLAT_SCR_ARCH-NEXT: s_waitcnt_vscnt null, 0x056; FLAT_SCR_ARCH-NEXT: s_endpgm57 %alloca = alloca i32, addrspace(5)58 store volatile i32 0, ptr addrspace(5) %alloca59 ret void60}61 62define amdgpu_kernel void @kernel_calls_no_stack() {63; FLAT_SCR_OPT-LABEL: kernel_calls_no_stack:64; FLAT_SCR_OPT: ; %bb.0:65; FLAT_SCR_OPT-NEXT: s_add_u32 s8, s8, s1366; FLAT_SCR_OPT-NEXT: s_mov_b32 s32, 067; FLAT_SCR_OPT-NEXT: s_addc_u32 s9, s9, 068; FLAT_SCR_OPT-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s869; FLAT_SCR_OPT-NEXT: s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s970; FLAT_SCR_OPT-NEXT: s_mov_b64 s[8:9], s[4:5]71; FLAT_SCR_OPT-NEXT: s_getpc_b64 s[4:5]72; FLAT_SCR_OPT-NEXT: s_add_u32 s4, s4, extern_func@gotpcrel32@lo+473; FLAT_SCR_OPT-NEXT: s_addc_u32 s5, s5, extern_func@gotpcrel32@hi+1274; FLAT_SCR_OPT-NEXT: v_lshlrev_b32_e32 v2, 20, v275; FLAT_SCR_OPT-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x076; FLAT_SCR_OPT-NEXT: v_lshlrev_b32_e32 v1, 10, v177; FLAT_SCR_OPT-NEXT: s_mov_b32 s14, s1278; FLAT_SCR_OPT-NEXT: s_mov_b32 s13, s1179; FLAT_SCR_OPT-NEXT: s_mov_b32 s12, s1080; FLAT_SCR_OPT-NEXT: s_mov_b64 s[10:11], s[6:7]81; FLAT_SCR_OPT-NEXT: v_or3_b32 v31, v0, v1, v282; FLAT_SCR_OPT-NEXT: s_mov_b64 s[4:5], s[0:1]83; FLAT_SCR_OPT-NEXT: s_mov_b64 s[6:7], s[2:3]84; FLAT_SCR_OPT-NEXT: s_waitcnt lgkmcnt(0)85; FLAT_SCR_OPT-NEXT: s_swappc_b64 s[30:31], s[16:17]86; FLAT_SCR_OPT-NEXT: s_endpgm87;88; FLAT_SCR_ARCH-LABEL: kernel_calls_no_stack:89; FLAT_SCR_ARCH: ; %bb.0:90; FLAT_SCR_ARCH-NEXT: s_mov_b32 s13, s991; FLAT_SCR_ARCH-NEXT: s_mov_b32 s12, s892; FLAT_SCR_ARCH-NEXT: s_mov_b64 s[8:9], s[4:5]93; FLAT_SCR_ARCH-NEXT: s_getpc_b64 s[4:5]94; FLAT_SCR_ARCH-NEXT: s_add_u32 s4, s4, extern_func@gotpcrel32@lo+495; FLAT_SCR_ARCH-NEXT: s_addc_u32 s5, s5, extern_func@gotpcrel32@hi+1296; FLAT_SCR_ARCH-NEXT: v_lshlrev_b32_e32 v2, 20, v297; FLAT_SCR_ARCH-NEXT: s_load_dwordx2 s[16:17], s[4:5], 0x098; FLAT_SCR_ARCH-NEXT: v_lshlrev_b32_e32 v1, 10, v199; FLAT_SCR_ARCH-NEXT: s_mov_b32 s14, s10100; FLAT_SCR_ARCH-NEXT: s_mov_b64 s[10:11], s[6:7]101; FLAT_SCR_ARCH-NEXT: s_mov_b64 s[4:5], s[0:1]102; FLAT_SCR_ARCH-NEXT: s_mov_b64 s[6:7], s[2:3]103; FLAT_SCR_ARCH-NEXT: v_or3_b32 v31, v0, v1, v2104; FLAT_SCR_ARCH-NEXT: s_mov_b32 s32, 0105; FLAT_SCR_ARCH-NEXT: s_waitcnt lgkmcnt(0)106; FLAT_SCR_ARCH-NEXT: s_swappc_b64 s[30:31], s[16:17]107; FLAT_SCR_ARCH-NEXT: s_endpgm108 call void @extern_func()109 ret void110}111 112define amdgpu_kernel void @test(ptr addrspace(1) %out, i32 %in) {113; GCN-LABEL: test:114; GCN: ; %bb.0:115; GCN-NEXT: s_clause 0x1116; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x0117; GCN-NEXT: s_load_dword vcc_lo, s[4:5], 0x8118; GCN-NEXT: ; implicit-def: $vgpr0 : SGPR spill to VGPR lane119; GCN-NEXT: ; kill: killed $sgpr4_sgpr5120; GCN-NEXT: s_waitcnt lgkmcnt(0)121; GCN-NEXT: v_writelane_b32 v0, s0, 0122; GCN-NEXT: v_writelane_b32 v0, s1, 1123; GCN-NEXT: ;;#ASMSTART124; GCN-NEXT: ;;#ASMEND125; GCN-NEXT: ;;#ASMSTART126; GCN-NEXT: ;;#ASMEND127; GCN-NEXT: ;;#ASMSTART128; GCN-NEXT: ;;#ASMEND129; GCN-NEXT: ;;#ASMSTART130; GCN-NEXT: ;;#ASMEND131; GCN-NEXT: ;;#ASMSTART132; GCN-NEXT: ;;#ASMEND133; GCN-NEXT: ;;#ASMSTART134; GCN-NEXT: ;;#ASMEND135; GCN-NEXT: ;;#ASMSTART136; GCN-NEXT: ;;#ASMEND137; GCN-NEXT: ;;#ASMSTART138; GCN-NEXT: ;;#ASMEND139; GCN-NEXT: ;;#ASMSTART140; GCN-NEXT: ;;#ASMEND141; GCN-NEXT: ;;#ASMSTART142; GCN-NEXT: ;;#ASMEND143; GCN-NEXT: ;;#ASMSTART144; GCN-NEXT: ;;#ASMEND145; GCN-NEXT: ;;#ASMSTART146; GCN-NEXT: ;;#ASMEND147; GCN-NEXT: ;;#ASMSTART148; GCN-NEXT: ;;#ASMEND149; GCN-NEXT: ;;#ASMSTART150; GCN-NEXT: ;;#ASMEND151; GCN-NEXT: ;;#ASMSTART152; GCN-NEXT: ;;#ASMEND153; GCN-NEXT: v_readlane_b32 s0, v0, 0154; GCN-NEXT: v_mov_b32_e32 v1, vcc_lo155; GCN-NEXT: v_readlane_b32 s1, v0, 1156; GCN-NEXT: v_mov_b32_e32 v2, 0157; GCN-NEXT: ;;#ASMSTART158; GCN-NEXT: ;;#ASMEND159; GCN-NEXT: ;;#ASMSTART160; GCN-NEXT: ;;#ASMEND161; GCN-NEXT: ;;#ASMSTART162; GCN-NEXT: ;;#ASMEND163; GCN-NEXT: ;;#ASMSTART164; GCN-NEXT: ;;#ASMEND165; GCN-NEXT: ;;#ASMSTART166; GCN-NEXT: ;;#ASMEND167; GCN-NEXT: ;;#ASMSTART168; GCN-NEXT: ;;#ASMEND169; GCN-NEXT: ;;#ASMSTART170; GCN-NEXT: ;;#ASMEND171; GCN-NEXT: ;;#ASMSTART172; GCN-NEXT: ;;#ASMEND173; GCN-NEXT: ;;#ASMSTART174; GCN-NEXT: ;;#ASMEND175; GCN-NEXT: ;;#ASMSTART176; GCN-NEXT: ;;#ASMEND177; GCN-NEXT: ;;#ASMSTART178; GCN-NEXT: ;;#ASMEND179; GCN-NEXT: ;;#ASMSTART180; GCN-NEXT: ;;#ASMEND181; GCN-NEXT: ;;#ASMSTART182; GCN-NEXT: ;;#ASMEND183; GCN-NEXT: ;;#ASMSTART184; GCN-NEXT: ;;#ASMEND185; GCN-NEXT: ;;#ASMSTART186; GCN-NEXT: ;;#ASMEND187; GCN-NEXT: ;;#ASMSTART188; GCN-NEXT: ;;#ASMEND189; GCN-NEXT: ;;#ASMSTART190; GCN-NEXT: ;;#ASMEND191; GCN-NEXT: ;;#ASMSTART192; GCN-NEXT: ;;#ASMEND193; GCN-NEXT: ;;#ASMSTART194; GCN-NEXT: ;;#ASMEND195; GCN-NEXT: ;;#ASMSTART196; GCN-NEXT: ;;#ASMEND197; GCN-NEXT: ;;#ASMSTART198; GCN-NEXT: ;;#ASMEND199; GCN-NEXT: ;;#ASMSTART200; GCN-NEXT: ;;#ASMEND201; GCN-NEXT: ;;#ASMSTART202; GCN-NEXT: ;;#ASMEND203; GCN-NEXT: ;;#ASMSTART204; GCN-NEXT: ;;#ASMEND205; GCN-NEXT: ;;#ASMSTART206; GCN-NEXT: ;;#ASMEND207; GCN-NEXT: ;;#ASMSTART208; GCN-NEXT: ;;#ASMEND209; GCN-NEXT: ;;#ASMSTART210; GCN-NEXT: ;;#ASMEND211; GCN-NEXT: ;;#ASMSTART212; GCN-NEXT: ;;#ASMEND213; GCN-NEXT: ;;#ASMSTART214; GCN-NEXT: ;;#ASMEND215; GCN-NEXT: ;;#ASMSTART216; GCN-NEXT: ;;#ASMEND217; GCN-NEXT: ;;#ASMSTART218; GCN-NEXT: ;;#ASMEND219; GCN-NEXT: global_store_dword v2, v1, s[0:1]220; GCN-NEXT: s_endpgm221 call void asm sideeffect "", "~{s[0:7]}" ()222 call void asm sideeffect "", "~{s[8:15]}" ()223 call void asm sideeffect "", "~{s[16:23]}" ()224 call void asm sideeffect "", "~{s[24:31]}" ()225 call void asm sideeffect "", "~{s[32:39]}" ()226 call void asm sideeffect "", "~{s[40:47]}" ()227 call void asm sideeffect "", "~{s[48:55]}" ()228 call void asm sideeffect "", "~{s[56:63]}" ()229 call void asm sideeffect "", "~{s[64:71]}" ()230 call void asm sideeffect "", "~{s[72:79]}" ()231 call void asm sideeffect "", "~{s[80:87]}" ()232 call void asm sideeffect "", "~{s[88:95]}" ()233 call void asm sideeffect "", "~{s[96:103]}" ()234 call void asm sideeffect "", "~{s[104:105]}" ()235 call void asm sideeffect "", "~{v[1:7]}" ()236 call void asm sideeffect "", "~{v[8:15]}" ()237 call void asm sideeffect "", "~{v[16:23]}" ()238 call void asm sideeffect "", "~{v[24:31]}" ()239 call void asm sideeffect "", "~{v[32:39]}" ()240 call void asm sideeffect "", "~{v[40:47]}" ()241 call void asm sideeffect "", "~{v[48:55]}" ()242 call void asm sideeffect "", "~{v[56:63]}" ()243 call void asm sideeffect "", "~{v[64:71]}" ()244 call void asm sideeffect "", "~{v[72:79]}" ()245 call void asm sideeffect "", "~{v[80:87]}" ()246 call void asm sideeffect "", "~{v[88:95]}" ()247 call void asm sideeffect "", "~{v[96:103]}" ()248 call void asm sideeffect "", "~{v[104:111]}" ()249 call void asm sideeffect "", "~{v[112:119]}" ()250 call void asm sideeffect "", "~{v[120:127]}" ()251 call void asm sideeffect "", "~{v[128:135]}" ()252 call void asm sideeffect "", "~{v[136:143]}" ()253 call void asm sideeffect "", "~{v[144:151]}" ()254 call void asm sideeffect "", "~{v[152:159]}" ()255 call void asm sideeffect "", "~{v[160:167]}" ()256 call void asm sideeffect "", "~{v[168:175]}" ()257 call void asm sideeffect "", "~{v[176:183]}" ()258 call void asm sideeffect "", "~{v[184:191]}" ()259 call void asm sideeffect "", "~{v[192:199]}" ()260 call void asm sideeffect "", "~{v[200:207]}" ()261 call void asm sideeffect "", "~{v[208:215]}" ()262 call void asm sideeffect "", "~{v[216:223]}" ()263 call void asm sideeffect "", "~{v[224:231]}" ()264 call void asm sideeffect "", "~{v[232:239]}" ()265 call void asm sideeffect "", "~{v[240:247]}" ()266 call void asm sideeffect "", "~{v[248:255]}" ()267 268 store i32 %in, ptr addrspace(1) %out269 ret void270}271 272define amdgpu_kernel void @kernel_no_calls_no_stack() {273; GCN-LABEL: kernel_no_calls_no_stack:274; GCN: ; %bb.0:275; GCN-NEXT: s_endpgm276 ret void277}278 279attributes #0 = { nounwind }280 281