435 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -o - %s | FileCheck -enable-var-scope -check-prefix=MUBUF %s3; RUN: llc -global-isel -mattr=+enable-flat-scratch -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -o - %s | FileCheck -enable-var-scope -check-prefix=FLATSCR %s4 5; Test end-to-end codegen for outgoing arguments passed on the6; stack. This test is likely redundant when all DAG and GlobalISel7; tests are unified.8 9declare hidden void @external_void_func_v16i32_v16i32_v4i32(<16 x i32>, <16 x i32>, <4 x i32>) #010declare hidden void @external_void_func_byval(ptr addrspace(5) byval([16 x i32])) #011 12define amdgpu_kernel void @kernel_caller_stack() {13; MUBUF-LABEL: kernel_caller_stack:14; MUBUF: ; %bb.0:15; MUBUF-NEXT: s_add_u32 flat_scratch_lo, s12, s1716; MUBUF-NEXT: s_addc_u32 flat_scratch_hi, s13, 017; MUBUF-NEXT: s_add_u32 s0, s0, s1718; MUBUF-NEXT: s_mov_b32 s32, 019; MUBUF-NEXT: s_addc_u32 s1, s1, 020; MUBUF-NEXT: v_mov_b32_e32 v0, 921; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], s32 offset:422; MUBUF-NEXT: v_mov_b32_e32 v0, 1023; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], s32 offset:824; MUBUF-NEXT: v_mov_b32_e32 v0, 1125; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], s32 offset:1226; MUBUF-NEXT: v_mov_b32_e32 v0, 1227; MUBUF-NEXT: s_getpc_b64 s[4:5]28; MUBUF-NEXT: s_add_u32 s4, s4, external_void_func_v16i32_v16i32_v4i32@rel32@lo+429; MUBUF-NEXT: s_addc_u32 s5, s5, external_void_func_v16i32_v16i32_v4i32@rel32@hi+1230; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], s32 offset:1631; MUBUF-NEXT: s_swappc_b64 s[30:31], s[4:5]32; MUBUF-NEXT: s_endpgm33;34; FLATSCR-LABEL: kernel_caller_stack:35; FLATSCR: ; %bb.0:36; FLATSCR-NEXT: s_mov_b32 s32, 037; FLATSCR-NEXT: s_add_u32 flat_scratch_lo, s8, s1338; FLATSCR-NEXT: s_addc_u32 flat_scratch_hi, s9, 039; FLATSCR-NEXT: s_add_u32 s0, s32, 440; FLATSCR-NEXT: v_mov_b32_e32 v0, 941; FLATSCR-NEXT: scratch_store_dword off, v0, s042; FLATSCR-NEXT: s_add_u32 s0, s32, 843; FLATSCR-NEXT: v_mov_b32_e32 v0, 1044; FLATSCR-NEXT: scratch_store_dword off, v0, s045; FLATSCR-NEXT: s_add_u32 s0, s32, 1246; FLATSCR-NEXT: v_mov_b32_e32 v0, 1147; FLATSCR-NEXT: s_add_u32 s2, s32, 1648; FLATSCR-NEXT: scratch_store_dword off, v0, s049; FLATSCR-NEXT: v_mov_b32_e32 v0, 1250; FLATSCR-NEXT: s_getpc_b64 s[0:1]51; FLATSCR-NEXT: s_add_u32 s0, s0, external_void_func_v16i32_v16i32_v4i32@rel32@lo+452; FLATSCR-NEXT: s_addc_u32 s1, s1, external_void_func_v16i32_v16i32_v4i32@rel32@hi+1253; FLATSCR-NEXT: scratch_store_dword off, v0, s254; FLATSCR-NEXT: s_swappc_b64 s[30:31], s[0:1]55; FLATSCR-NEXT: s_endpgm56 call void @external_void_func_v16i32_v16i32_v4i32(<16 x i32> poison, <16 x i32> poison, <4 x i32> <i32 9, i32 10, i32 11, i32 12>)57 ret void58}59 60define amdgpu_kernel void @kernel_caller_byval() {61; MUBUF-LABEL: kernel_caller_byval:62; MUBUF: ; %bb.0:63; MUBUF-NEXT: s_add_u32 flat_scratch_lo, s12, s1764; MUBUF-NEXT: s_addc_u32 flat_scratch_hi, s13, 065; MUBUF-NEXT: s_add_u32 s0, s0, s1766; MUBUF-NEXT: s_addc_u32 s1, s1, 067; MUBUF-NEXT: v_mov_b32_e32 v0, 068; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 069; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:470; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:871; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:1272; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:1673; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:2074; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:2475; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:2876; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:3277; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:3678; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:4079; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:4480; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:4881; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:5282; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:5683; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:6084; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:6485; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:6886; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:7287; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:7688; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:8089; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:8490; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:8891; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:9292; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:9693; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:10094; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:10495; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:10896; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:11297; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:11698; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:12099; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], 0 offset:124100; MUBUF-NEXT: buffer_load_dword v0, off, s[0:3], 0101; MUBUF-NEXT: s_nop 0102; MUBUF-NEXT: buffer_load_dword v1, off, s[0:3], 0 offset:4103; MUBUF-NEXT: buffer_load_dword v2, off, s[0:3], 0 offset:8104; MUBUF-NEXT: buffer_load_dword v3, off, s[0:3], 0 offset:12105; MUBUF-NEXT: buffer_load_dword v4, off, s[0:3], 0 offset:16106; MUBUF-NEXT: buffer_load_dword v5, off, s[0:3], 0 offset:20107; MUBUF-NEXT: buffer_load_dword v6, off, s[0:3], 0 offset:24108; MUBUF-NEXT: buffer_load_dword v7, off, s[0:3], 0 offset:28109; MUBUF-NEXT: buffer_load_dword v8, off, s[0:3], 0 offset:32110; MUBUF-NEXT: buffer_load_dword v9, off, s[0:3], 0 offset:36111; MUBUF-NEXT: buffer_load_dword v10, off, s[0:3], 0 offset:40112; MUBUF-NEXT: buffer_load_dword v11, off, s[0:3], 0 offset:44113; MUBUF-NEXT: buffer_load_dword v12, off, s[0:3], 0 offset:48114; MUBUF-NEXT: buffer_load_dword v13, off, s[0:3], 0 offset:52115; MUBUF-NEXT: buffer_load_dword v14, off, s[0:3], 0 offset:56116; MUBUF-NEXT: buffer_load_dword v15, off, s[0:3], 0 offset:60117; MUBUF-NEXT: s_movk_i32 s32, 0x1400118; MUBUF-NEXT: s_getpc_b64 s[4:5]119; MUBUF-NEXT: s_add_u32 s4, s4, external_void_func_byval@rel32@lo+4120; MUBUF-NEXT: s_addc_u32 s5, s5, external_void_func_byval@rel32@hi+12121; MUBUF-NEXT: s_waitcnt vmcnt(15)122; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], s32123; MUBUF-NEXT: s_waitcnt vmcnt(15)124; MUBUF-NEXT: buffer_store_dword v1, off, s[0:3], s32 offset:4125; MUBUF-NEXT: s_waitcnt vmcnt(15)126; MUBUF-NEXT: buffer_store_dword v2, off, s[0:3], s32 offset:8127; MUBUF-NEXT: s_waitcnt vmcnt(15)128; MUBUF-NEXT: buffer_store_dword v3, off, s[0:3], s32 offset:12129; MUBUF-NEXT: s_waitcnt vmcnt(15)130; MUBUF-NEXT: buffer_store_dword v4, off, s[0:3], s32 offset:16131; MUBUF-NEXT: s_waitcnt vmcnt(15)132; MUBUF-NEXT: buffer_store_dword v5, off, s[0:3], s32 offset:20133; MUBUF-NEXT: s_waitcnt vmcnt(15)134; MUBUF-NEXT: buffer_store_dword v6, off, s[0:3], s32 offset:24135; MUBUF-NEXT: s_waitcnt vmcnt(15)136; MUBUF-NEXT: buffer_store_dword v7, off, s[0:3], s32 offset:28137; MUBUF-NEXT: s_waitcnt vmcnt(15)138; MUBUF-NEXT: buffer_store_dword v8, off, s[0:3], s32 offset:32139; MUBUF-NEXT: s_waitcnt vmcnt(15)140; MUBUF-NEXT: buffer_store_dword v9, off, s[0:3], s32 offset:36141; MUBUF-NEXT: s_waitcnt vmcnt(15)142; MUBUF-NEXT: buffer_store_dword v10, off, s[0:3], s32 offset:40143; MUBUF-NEXT: s_waitcnt vmcnt(15)144; MUBUF-NEXT: buffer_store_dword v11, off, s[0:3], s32 offset:44145; MUBUF-NEXT: s_waitcnt vmcnt(15)146; MUBUF-NEXT: buffer_store_dword v12, off, s[0:3], s32 offset:48147; MUBUF-NEXT: s_waitcnt vmcnt(15)148; MUBUF-NEXT: buffer_store_dword v13, off, s[0:3], s32 offset:52149; MUBUF-NEXT: s_waitcnt vmcnt(15)150; MUBUF-NEXT: buffer_store_dword v14, off, s[0:3], s32 offset:56151; MUBUF-NEXT: s_waitcnt vmcnt(15)152; MUBUF-NEXT: buffer_store_dword v15, off, s[0:3], s32 offset:60153; MUBUF-NEXT: s_swappc_b64 s[30:31], s[4:5]154; MUBUF-NEXT: s_endpgm155;156; FLATSCR-LABEL: kernel_caller_byval:157; FLATSCR: ; %bb.0:158; FLATSCR-NEXT: s_add_u32 flat_scratch_lo, s8, s13159; FLATSCR-NEXT: v_mov_b32_e32 v0, 0160; FLATSCR-NEXT: s_addc_u32 flat_scratch_hi, s9, 0161; FLATSCR-NEXT: v_mov_b32_e32 v1, 0162; FLATSCR-NEXT: s_mov_b32 s0, 0163; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0164; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0 offset:8165; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0 offset:16166; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0 offset:24167; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0 offset:32168; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0 offset:40169; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0 offset:48170; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0 offset:56171; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0 offset:64172; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0 offset:72173; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0 offset:80174; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0 offset:88175; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0 offset:96176; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0 offset:104177; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0 offset:112178; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s0 offset:120179; FLATSCR-NEXT: scratch_load_dwordx2 v[0:1], off, s0180; FLATSCR-NEXT: s_nop 0181; FLATSCR-NEXT: scratch_load_dwordx2 v[2:3], off, s0 offset:8182; FLATSCR-NEXT: scratch_load_dwordx2 v[4:5], off, s0 offset:16183; FLATSCR-NEXT: scratch_load_dwordx2 v[6:7], off, s0 offset:24184; FLATSCR-NEXT: scratch_load_dwordx2 v[8:9], off, s0 offset:32185; FLATSCR-NEXT: scratch_load_dwordx2 v[10:11], off, s0 offset:40186; FLATSCR-NEXT: scratch_load_dwordx2 v[12:13], off, s0 offset:48187; FLATSCR-NEXT: scratch_load_dwordx2 v[14:15], off, s0 offset:56188; FLATSCR-NEXT: s_movk_i32 s32, 0x50189; FLATSCR-NEXT: s_getpc_b64 s[0:1]190; FLATSCR-NEXT: s_add_u32 s0, s0, external_void_func_byval@rel32@lo+4191; FLATSCR-NEXT: s_addc_u32 s1, s1, external_void_func_byval@rel32@hi+12192; FLATSCR-NEXT: s_waitcnt vmcnt(7)193; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s32194; FLATSCR-NEXT: s_waitcnt vmcnt(7)195; FLATSCR-NEXT: scratch_store_dwordx2 off, v[2:3], s32 offset:8196; FLATSCR-NEXT: s_waitcnt vmcnt(7)197; FLATSCR-NEXT: scratch_store_dwordx2 off, v[4:5], s32 offset:16198; FLATSCR-NEXT: s_waitcnt vmcnt(7)199; FLATSCR-NEXT: scratch_store_dwordx2 off, v[6:7], s32 offset:24200; FLATSCR-NEXT: s_waitcnt vmcnt(7)201; FLATSCR-NEXT: scratch_store_dwordx2 off, v[8:9], s32 offset:32202; FLATSCR-NEXT: s_waitcnt vmcnt(7)203; FLATSCR-NEXT: scratch_store_dwordx2 off, v[10:11], s32 offset:40204; FLATSCR-NEXT: s_waitcnt vmcnt(7)205; FLATSCR-NEXT: scratch_store_dwordx2 off, v[12:13], s32 offset:48206; FLATSCR-NEXT: s_waitcnt vmcnt(7)207; FLATSCR-NEXT: scratch_store_dwordx2 off, v[14:15], s32 offset:56208; FLATSCR-NEXT: s_swappc_b64 s[30:31], s[0:1]209; FLATSCR-NEXT: s_endpgm210 %alloca = alloca [16 x i32], align 4, addrspace(5)211 call void @llvm.memset.p5.i32(ptr addrspace(5) align 4 %alloca, i8 0, i32 128, i1 false)212 call void @external_void_func_byval(ptr addrspace(5) byval([16 x i32]) %alloca)213 ret void214}215 216define void @func_caller_stack() {217; MUBUF-LABEL: func_caller_stack:218; MUBUF: ; %bb.0:219; MUBUF-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)220; MUBUF-NEXT: s_mov_b32 s4, s33221; MUBUF-NEXT: s_mov_b32 s33, s32222; MUBUF-NEXT: s_or_saveexec_b64 s[6:7], -1223; MUBUF-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill224; MUBUF-NEXT: s_mov_b64 exec, s[6:7]225; MUBUF-NEXT: s_addk_i32 s32, 0x400226; MUBUF-NEXT: v_mov_b32_e32 v0, 9227; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], s32 offset:4228; MUBUF-NEXT: v_mov_b32_e32 v0, 10229; MUBUF-NEXT: v_writelane_b32 v40, s4, 2230; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], s32 offset:8231; MUBUF-NEXT: v_mov_b32_e32 v0, 11232; MUBUF-NEXT: v_writelane_b32 v40, s30, 0233; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], s32 offset:12234; MUBUF-NEXT: v_mov_b32_e32 v0, 12235; MUBUF-NEXT: s_getpc_b64 s[4:5]236; MUBUF-NEXT: s_add_u32 s4, s4, external_void_func_v16i32_v16i32_v4i32@rel32@lo+4237; MUBUF-NEXT: s_addc_u32 s5, s5, external_void_func_v16i32_v16i32_v4i32@rel32@hi+12238; MUBUF-NEXT: v_writelane_b32 v40, s31, 1239; MUBUF-NEXT: buffer_store_dword v0, off, s[0:3], s32 offset:16240; MUBUF-NEXT: s_swappc_b64 s[30:31], s[4:5]241; MUBUF-NEXT: v_readlane_b32 s31, v40, 1242; MUBUF-NEXT: v_readlane_b32 s30, v40, 0243; MUBUF-NEXT: s_mov_b32 s32, s33244; MUBUF-NEXT: v_readlane_b32 s4, v40, 2245; MUBUF-NEXT: s_or_saveexec_b64 s[6:7], -1246; MUBUF-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload247; MUBUF-NEXT: s_mov_b64 exec, s[6:7]248; MUBUF-NEXT: s_mov_b32 s33, s4249; MUBUF-NEXT: s_waitcnt vmcnt(0)250; MUBUF-NEXT: s_setpc_b64 s[30:31]251;252; FLATSCR-LABEL: func_caller_stack:253; FLATSCR: ; %bb.0:254; FLATSCR-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)255; FLATSCR-NEXT: s_mov_b32 s0, s33256; FLATSCR-NEXT: s_mov_b32 s33, s32257; FLATSCR-NEXT: s_or_saveexec_b64 s[2:3], -1258; FLATSCR-NEXT: scratch_store_dword off, v40, s33 ; 4-byte Folded Spill259; FLATSCR-NEXT: s_mov_b64 exec, s[2:3]260; FLATSCR-NEXT: s_add_i32 s32, s32, 16261; FLATSCR-NEXT: v_writelane_b32 v40, s0, 2262; FLATSCR-NEXT: s_add_u32 s0, s32, 4263; FLATSCR-NEXT: v_mov_b32_e32 v0, 9264; FLATSCR-NEXT: scratch_store_dword off, v0, s0265; FLATSCR-NEXT: s_add_u32 s0, s32, 8266; FLATSCR-NEXT: v_mov_b32_e32 v0, 10267; FLATSCR-NEXT: scratch_store_dword off, v0, s0268; FLATSCR-NEXT: s_add_u32 s0, s32, 12269; FLATSCR-NEXT: v_mov_b32_e32 v0, 11270; FLATSCR-NEXT: scratch_store_dword off, v0, s0271; FLATSCR-NEXT: s_add_u32 s0, s32, 16272; FLATSCR-NEXT: v_mov_b32_e32 v0, 12273; FLATSCR-NEXT: v_writelane_b32 v40, s30, 0274; FLATSCR-NEXT: scratch_store_dword off, v0, s0275; FLATSCR-NEXT: s_getpc_b64 s[0:1]276; FLATSCR-NEXT: s_add_u32 s0, s0, external_void_func_v16i32_v16i32_v4i32@rel32@lo+4277; FLATSCR-NEXT: s_addc_u32 s1, s1, external_void_func_v16i32_v16i32_v4i32@rel32@hi+12278; FLATSCR-NEXT: v_writelane_b32 v40, s31, 1279; FLATSCR-NEXT: s_swappc_b64 s[30:31], s[0:1]280; FLATSCR-NEXT: v_readlane_b32 s31, v40, 1281; FLATSCR-NEXT: v_readlane_b32 s30, v40, 0282; FLATSCR-NEXT: s_mov_b32 s32, s33283; FLATSCR-NEXT: v_readlane_b32 s0, v40, 2284; FLATSCR-NEXT: s_or_saveexec_b64 s[2:3], -1285; FLATSCR-NEXT: scratch_load_dword v40, off, s33 ; 4-byte Folded Reload286; FLATSCR-NEXT: s_mov_b64 exec, s[2:3]287; FLATSCR-NEXT: s_mov_b32 s33, s0288; FLATSCR-NEXT: s_waitcnt vmcnt(0)289; FLATSCR-NEXT: s_setpc_b64 s[30:31]290 call void @external_void_func_v16i32_v16i32_v4i32(<16 x i32> poison, <16 x i32> poison, <4 x i32> <i32 9, i32 10, i32 11, i32 12>)291 ret void292}293 294define void @func_caller_byval(ptr addrspace(5) %argptr) {295; MUBUF-LABEL: func_caller_byval:296; MUBUF: ; %bb.0:297; MUBUF-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)298; MUBUF-NEXT: s_mov_b32 s4, s33299; MUBUF-NEXT: s_mov_b32 s33, s32300; MUBUF-NEXT: s_or_saveexec_b64 s[6:7], -1301; MUBUF-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill302; MUBUF-NEXT: s_mov_b64 exec, s[6:7]303; MUBUF-NEXT: buffer_load_dword v1, v0, s[0:3], 0 offen304; MUBUF-NEXT: buffer_load_dword v2, v0, s[0:3], 0 offen offset:4305; MUBUF-NEXT: s_addk_i32 s32, 0x400306; MUBUF-NEXT: v_writelane_b32 v40, s4, 2307; MUBUF-NEXT: v_writelane_b32 v40, s30, 0308; MUBUF-NEXT: s_getpc_b64 s[4:5]309; MUBUF-NEXT: s_add_u32 s4, s4, external_void_func_byval@rel32@lo+4310; MUBUF-NEXT: s_addc_u32 s5, s5, external_void_func_byval@rel32@hi+12311; MUBUF-NEXT: v_writelane_b32 v40, s31, 1312; MUBUF-NEXT: s_waitcnt vmcnt(1)313; MUBUF-NEXT: buffer_store_dword v1, off, s[0:3], s32314; MUBUF-NEXT: s_waitcnt vmcnt(1)315; MUBUF-NEXT: buffer_store_dword v2, off, s[0:3], s32 offset:4316; MUBUF-NEXT: buffer_load_dword v1, v0, s[0:3], 0 offen offset:8317; MUBUF-NEXT: s_nop 0318; MUBUF-NEXT: buffer_load_dword v2, v0, s[0:3], 0 offen offset:12319; MUBUF-NEXT: s_waitcnt vmcnt(1)320; MUBUF-NEXT: buffer_store_dword v1, off, s[0:3], s32 offset:8321; MUBUF-NEXT: s_waitcnt vmcnt(1)322; MUBUF-NEXT: buffer_store_dword v2, off, s[0:3], s32 offset:12323; MUBUF-NEXT: buffer_load_dword v1, v0, s[0:3], 0 offen offset:16324; MUBUF-NEXT: s_nop 0325; MUBUF-NEXT: buffer_load_dword v2, v0, s[0:3], 0 offen offset:20326; MUBUF-NEXT: s_waitcnt vmcnt(1)327; MUBUF-NEXT: buffer_store_dword v1, off, s[0:3], s32 offset:16328; MUBUF-NEXT: s_waitcnt vmcnt(1)329; MUBUF-NEXT: buffer_store_dword v2, off, s[0:3], s32 offset:20330; MUBUF-NEXT: buffer_load_dword v1, v0, s[0:3], 0 offen offset:24331; MUBUF-NEXT: s_nop 0332; MUBUF-NEXT: buffer_load_dword v2, v0, s[0:3], 0 offen offset:28333; MUBUF-NEXT: s_waitcnt vmcnt(1)334; MUBUF-NEXT: buffer_store_dword v1, off, s[0:3], s32 offset:24335; MUBUF-NEXT: s_waitcnt vmcnt(1)336; MUBUF-NEXT: buffer_store_dword v2, off, s[0:3], s32 offset:28337; MUBUF-NEXT: buffer_load_dword v1, v0, s[0:3], 0 offen offset:32338; MUBUF-NEXT: s_nop 0339; MUBUF-NEXT: buffer_load_dword v2, v0, s[0:3], 0 offen offset:36340; MUBUF-NEXT: s_waitcnt vmcnt(1)341; MUBUF-NEXT: buffer_store_dword v1, off, s[0:3], s32 offset:32342; MUBUF-NEXT: s_waitcnt vmcnt(1)343; MUBUF-NEXT: buffer_store_dword v2, off, s[0:3], s32 offset:36344; MUBUF-NEXT: buffer_load_dword v1, v0, s[0:3], 0 offen offset:40345; MUBUF-NEXT: s_nop 0346; MUBUF-NEXT: buffer_load_dword v2, v0, s[0:3], 0 offen offset:44347; MUBUF-NEXT: s_waitcnt vmcnt(1)348; MUBUF-NEXT: buffer_store_dword v1, off, s[0:3], s32 offset:40349; MUBUF-NEXT: s_waitcnt vmcnt(1)350; MUBUF-NEXT: buffer_store_dword v2, off, s[0:3], s32 offset:44351; MUBUF-NEXT: buffer_load_dword v1, v0, s[0:3], 0 offen offset:48352; MUBUF-NEXT: s_nop 0353; MUBUF-NEXT: buffer_load_dword v2, v0, s[0:3], 0 offen offset:52354; MUBUF-NEXT: s_waitcnt vmcnt(1)355; MUBUF-NEXT: buffer_store_dword v1, off, s[0:3], s32 offset:48356; MUBUF-NEXT: s_waitcnt vmcnt(1)357; MUBUF-NEXT: buffer_store_dword v2, off, s[0:3], s32 offset:52358; MUBUF-NEXT: buffer_load_dword v1, v0, s[0:3], 0 offen offset:56359; MUBUF-NEXT: s_nop 0360; MUBUF-NEXT: buffer_load_dword v2, v0, s[0:3], 0 offen offset:60361; MUBUF-NEXT: s_waitcnt vmcnt(1)362; MUBUF-NEXT: buffer_store_dword v1, off, s[0:3], s32 offset:56363; MUBUF-NEXT: s_waitcnt vmcnt(1)364; MUBUF-NEXT: buffer_store_dword v2, off, s[0:3], s32 offset:60365; MUBUF-NEXT: s_swappc_b64 s[30:31], s[4:5]366; MUBUF-NEXT: v_readlane_b32 s31, v40, 1367; MUBUF-NEXT: v_readlane_b32 s30, v40, 0368; MUBUF-NEXT: s_mov_b32 s32, s33369; MUBUF-NEXT: v_readlane_b32 s4, v40, 2370; MUBUF-NEXT: s_or_saveexec_b64 s[6:7], -1371; MUBUF-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload372; MUBUF-NEXT: s_mov_b64 exec, s[6:7]373; MUBUF-NEXT: s_mov_b32 s33, s4374; MUBUF-NEXT: s_waitcnt vmcnt(0)375; MUBUF-NEXT: s_setpc_b64 s[30:31]376;377; FLATSCR-LABEL: func_caller_byval:378; FLATSCR: ; %bb.0:379; FLATSCR-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)380; FLATSCR-NEXT: s_mov_b32 s0, s33381; FLATSCR-NEXT: s_mov_b32 s33, s32382; FLATSCR-NEXT: s_or_saveexec_b64 s[2:3], -1383; FLATSCR-NEXT: scratch_store_dword off, v40, s33 ; 4-byte Folded Spill384; FLATSCR-NEXT: s_mov_b64 exec, s[2:3]385; FLATSCR-NEXT: scratch_load_dwordx2 v[1:2], v0, off386; FLATSCR-NEXT: s_add_i32 s32, s32, 16387; FLATSCR-NEXT: v_writelane_b32 v40, s0, 2388; FLATSCR-NEXT: v_writelane_b32 v40, s30, 0389; FLATSCR-NEXT: s_getpc_b64 s[0:1]390; FLATSCR-NEXT: s_add_u32 s0, s0, external_void_func_byval@rel32@lo+4391; FLATSCR-NEXT: s_addc_u32 s1, s1, external_void_func_byval@rel32@hi+12392; FLATSCR-NEXT: v_writelane_b32 v40, s31, 1393; FLATSCR-NEXT: s_waitcnt vmcnt(0)394; FLATSCR-NEXT: scratch_store_dwordx2 off, v[1:2], s32395; FLATSCR-NEXT: scratch_load_dwordx2 v[1:2], v0, off offset:8396; FLATSCR-NEXT: s_waitcnt vmcnt(0)397; FLATSCR-NEXT: scratch_store_dwordx2 off, v[1:2], s32 offset:8398; FLATSCR-NEXT: scratch_load_dwordx2 v[1:2], v0, off offset:16399; FLATSCR-NEXT: s_waitcnt vmcnt(0)400; FLATSCR-NEXT: scratch_store_dwordx2 off, v[1:2], s32 offset:16401; FLATSCR-NEXT: scratch_load_dwordx2 v[1:2], v0, off offset:24402; FLATSCR-NEXT: s_waitcnt vmcnt(0)403; FLATSCR-NEXT: scratch_store_dwordx2 off, v[1:2], s32 offset:24404; FLATSCR-NEXT: scratch_load_dwordx2 v[1:2], v0, off offset:32405; FLATSCR-NEXT: s_waitcnt vmcnt(0)406; FLATSCR-NEXT: scratch_store_dwordx2 off, v[1:2], s32 offset:32407; FLATSCR-NEXT: scratch_load_dwordx2 v[1:2], v0, off offset:40408; FLATSCR-NEXT: s_waitcnt vmcnt(0)409; FLATSCR-NEXT: scratch_store_dwordx2 off, v[1:2], s32 offset:40410; FLATSCR-NEXT: scratch_load_dwordx2 v[1:2], v0, off offset:48411; FLATSCR-NEXT: s_waitcnt vmcnt(0)412; FLATSCR-NEXT: scratch_store_dwordx2 off, v[1:2], s32 offset:48413; FLATSCR-NEXT: scratch_load_dwordx2 v[0:1], v0, off offset:56414; FLATSCR-NEXT: s_waitcnt vmcnt(0)415; FLATSCR-NEXT: scratch_store_dwordx2 off, v[0:1], s32 offset:56416; FLATSCR-NEXT: s_swappc_b64 s[30:31], s[0:1]417; FLATSCR-NEXT: v_readlane_b32 s31, v40, 1418; FLATSCR-NEXT: v_readlane_b32 s30, v40, 0419; FLATSCR-NEXT: s_mov_b32 s32, s33420; FLATSCR-NEXT: v_readlane_b32 s0, v40, 2421; FLATSCR-NEXT: s_or_saveexec_b64 s[2:3], -1422; FLATSCR-NEXT: scratch_load_dword v40, off, s33 ; 4-byte Folded Reload423; FLATSCR-NEXT: s_mov_b64 exec, s[2:3]424; FLATSCR-NEXT: s_mov_b32 s33, s0425; FLATSCR-NEXT: s_waitcnt vmcnt(0)426; FLATSCR-NEXT: s_setpc_b64 s[30:31]427 call void @external_void_func_byval(ptr addrspace(5) byval([16 x i32]) %argptr)428 ret void429}430 431declare void @llvm.memset.p5.i32(ptr addrspace(5) nocapture writeonly, i8, i32, i1 immarg) #1432 433attributes #0 = { nounwind "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-cluster-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-cluster-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-cluster-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" }434attributes #1 = { argmemonly nofree nounwind willreturn writeonly }435