1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 --amdgpu-enable-flat-scratch < %s | FileCheck -check-prefixes=GCN,FLAT_SCR_OPT %s
3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 --mattr=+architected-flat-scratch < %s | FileCheck -check-prefixes=GCN,FLAT_SCR_ARCH %s
4
5declare void @extern_func() #0
6
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 s0, s0, s3
11; FLAT_SCR_OPT-NEXT:    s_addc_u32 s1, s1, 0
12; FLAT_SCR_OPT-NEXT:    s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s0
13; FLAT_SCR_OPT-NEXT:    s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s1
14; FLAT_SCR_OPT-NEXT:    v_mov_b32_e32 v0, 4
15; FLAT_SCR_OPT-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_SH_MEM_BASES, 0, 16)
16; FLAT_SCR_OPT-NEXT:    v_mov_b32_e32 v2, 0
17; FLAT_SCR_OPT-NEXT:    s_lshl_b32 s0, s0, 16
18; FLAT_SCR_OPT-NEXT:    v_cmp_ne_u32_e32 vcc_lo, -1, v0
19; FLAT_SCR_OPT-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc_lo
20; FLAT_SCR_OPT-NEXT:    v_cndmask_b32_e64 v1, 0, s0, vcc_lo
21; FLAT_SCR_OPT-NEXT:    flat_store_dword v[0:1], v2
22; FLAT_SCR_OPT-NEXT:    s_waitcnt_vscnt null, 0x0
23; FLAT_SCR_OPT-NEXT:    s_endpgm
24;
25; FLAT_SCR_ARCH-LABEL: stack_object_addrspacecast_in_kernel_no_calls:
26; FLAT_SCR_ARCH:       ; %bb.0:
27; FLAT_SCR_ARCH-NEXT:    v_mov_b32_e32 v0, 4
28; FLAT_SCR_ARCH-NEXT:    s_getreg_b32 s0, hwreg(HW_REG_SH_MEM_BASES, 0, 16)
29; FLAT_SCR_ARCH-NEXT:    v_mov_b32_e32 v2, 0
30; FLAT_SCR_ARCH-NEXT:    s_lshl_b32 s0, s0, 16
31; FLAT_SCR_ARCH-NEXT:    v_cmp_ne_u32_e32 vcc_lo, -1, v0
32; FLAT_SCR_ARCH-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc_lo
33; FLAT_SCR_ARCH-NEXT:    v_cndmask_b32_e64 v1, 0, s0, vcc_lo
34; FLAT_SCR_ARCH-NEXT:    flat_store_dword v[0:1], v2
35; FLAT_SCR_ARCH-NEXT:    s_waitcnt_vscnt null, 0x0
36; FLAT_SCR_ARCH-NEXT:    s_endpgm
37  %alloca = alloca i32, addrspace(5)
38  %cast = addrspacecast i32 addrspace(5)* %alloca to i32*
39  store volatile i32 0, i32* %cast
40  ret void
41}
42
43define amdgpu_kernel void @stack_object_in_kernel_no_calls() {
44; FLAT_SCR_OPT-LABEL: stack_object_in_kernel_no_calls:
45; FLAT_SCR_OPT:       ; %bb.0:
46; FLAT_SCR_OPT-NEXT:    s_add_u32 s0, s0, s3
47; FLAT_SCR_OPT-NEXT:    s_addc_u32 s1, s1, 0
48; FLAT_SCR_OPT-NEXT:    s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s0
49; FLAT_SCR_OPT-NEXT:    s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s1
50; FLAT_SCR_OPT-NEXT:    v_mov_b32_e32 v0, 0
51; FLAT_SCR_OPT-NEXT:    s_mov_b32 vcc_lo, 0
52; FLAT_SCR_OPT-NEXT:    scratch_store_dword off, v0, vcc_lo offset:4
53; FLAT_SCR_OPT-NEXT:    s_waitcnt_vscnt null, 0x0
54; FLAT_SCR_OPT-NEXT:    s_endpgm
55;
56; FLAT_SCR_ARCH-LABEL: stack_object_in_kernel_no_calls:
57; FLAT_SCR_ARCH:       ; %bb.0:
58; FLAT_SCR_ARCH-NEXT:    v_mov_b32_e32 v0, 0
59; FLAT_SCR_ARCH-NEXT:    s_mov_b32 vcc_lo, 0
60; FLAT_SCR_ARCH-NEXT:    scratch_store_dword off, v0, vcc_lo offset:4
61; FLAT_SCR_ARCH-NEXT:    s_waitcnt_vscnt null, 0x0
62; FLAT_SCR_ARCH-NEXT:    s_endpgm
63  %alloca = alloca i32, addrspace(5)
64  store volatile i32 0, i32 addrspace(5)* %alloca
65  ret void
66}
67
68define amdgpu_kernel void @kernel_calls_no_stack() {
69; FLAT_SCR_OPT-LABEL: kernel_calls_no_stack:
70; FLAT_SCR_OPT:       ; %bb.0:
71; FLAT_SCR_OPT-NEXT:    s_add_u32 s8, s8, s13
72; FLAT_SCR_OPT-NEXT:    s_mov_b32 s32, 0
73; FLAT_SCR_OPT-NEXT:    s_addc_u32 s9, s9, 0
74; FLAT_SCR_OPT-NEXT:    s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s8
75; FLAT_SCR_OPT-NEXT:    s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s9
76; FLAT_SCR_OPT-NEXT:    s_mov_b64 s[8:9], s[4:5]
77; FLAT_SCR_OPT-NEXT:    s_getpc_b64 s[4:5]
78; FLAT_SCR_OPT-NEXT:    s_add_u32 s4, s4, extern_func@gotpcrel32@lo+4
79; FLAT_SCR_OPT-NEXT:    s_addc_u32 s5, s5, extern_func@gotpcrel32@hi+12
80; FLAT_SCR_OPT-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
81; FLAT_SCR_OPT-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
82; FLAT_SCR_OPT-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
83; FLAT_SCR_OPT-NEXT:    s_mov_b32 s14, s12
84; FLAT_SCR_OPT-NEXT:    s_mov_b32 s13, s11
85; FLAT_SCR_OPT-NEXT:    s_mov_b32 s12, s10
86; FLAT_SCR_OPT-NEXT:    s_mov_b64 s[10:11], s[6:7]
87; FLAT_SCR_OPT-NEXT:    v_or3_b32 v31, v0, v1, v2
88; FLAT_SCR_OPT-NEXT:    s_mov_b64 s[4:5], s[0:1]
89; FLAT_SCR_OPT-NEXT:    s_mov_b64 s[6:7], s[2:3]
90; FLAT_SCR_OPT-NEXT:    s_waitcnt lgkmcnt(0)
91; FLAT_SCR_OPT-NEXT:    s_swappc_b64 s[30:31], s[16:17]
92; FLAT_SCR_OPT-NEXT:    s_endpgm
93;
94; FLAT_SCR_ARCH-LABEL: kernel_calls_no_stack:
95; FLAT_SCR_ARCH:       ; %bb.0:
96; FLAT_SCR_ARCH-NEXT:    s_mov_b32 s13, s9
97; FLAT_SCR_ARCH-NEXT:    s_mov_b32 s12, s8
98; FLAT_SCR_ARCH-NEXT:    s_mov_b64 s[8:9], s[4:5]
99; FLAT_SCR_ARCH-NEXT:    s_getpc_b64 s[4:5]
100; FLAT_SCR_ARCH-NEXT:    s_add_u32 s4, s4, extern_func@gotpcrel32@lo+4
101; FLAT_SCR_ARCH-NEXT:    s_addc_u32 s5, s5, extern_func@gotpcrel32@hi+12
102; FLAT_SCR_ARCH-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
103; FLAT_SCR_ARCH-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
104; FLAT_SCR_ARCH-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
105; FLAT_SCR_ARCH-NEXT:    s_mov_b32 s14, s10
106; FLAT_SCR_ARCH-NEXT:    s_mov_b64 s[10:11], s[6:7]
107; FLAT_SCR_ARCH-NEXT:    s_mov_b64 s[4:5], s[0:1]
108; FLAT_SCR_ARCH-NEXT:    s_mov_b64 s[6:7], s[2:3]
109; FLAT_SCR_ARCH-NEXT:    v_or3_b32 v31, v0, v1, v2
110; FLAT_SCR_ARCH-NEXT:    s_mov_b32 s32, 0
111; FLAT_SCR_ARCH-NEXT:    s_waitcnt lgkmcnt(0)
112; FLAT_SCR_ARCH-NEXT:    s_swappc_b64 s[30:31], s[16:17]
113; FLAT_SCR_ARCH-NEXT:    s_endpgm
114  call void @extern_func()
115  ret void
116}
117
118define amdgpu_kernel void @test(i32 addrspace(1)* %out, i32 %in) {
119; FLAT_SCR_OPT-LABEL: test:
120; FLAT_SCR_OPT:       ; %bb.0:
121; FLAT_SCR_OPT-NEXT:    s_add_u32 s2, s2, s5
122; FLAT_SCR_OPT-NEXT:    s_addc_u32 s3, s3, 0
123; FLAT_SCR_OPT-NEXT:    s_setreg_b32 hwreg(HW_REG_FLAT_SCR_LO), s2
124; FLAT_SCR_OPT-NEXT:    s_setreg_b32 hwreg(HW_REG_FLAT_SCR_HI), s3
125; FLAT_SCR_OPT-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0
126; FLAT_SCR_OPT-NEXT:    s_mov_b32 s104, exec_lo
127; FLAT_SCR_OPT-NEXT:    s_mov_b32 exec_lo, 3
128; FLAT_SCR_OPT-NEXT:    s_mov_b32 s105, 0
129; FLAT_SCR_OPT-NEXT:    scratch_store_dword off, v72, s105
130; FLAT_SCR_OPT-NEXT:    s_waitcnt lgkmcnt(0)
131; FLAT_SCR_OPT-NEXT:    v_writelane_b32 v72, s2, 0
132; FLAT_SCR_OPT-NEXT:    s_mov_b32 s105, 4
133; FLAT_SCR_OPT-NEXT:    v_writelane_b32 v72, s3, 1
134; FLAT_SCR_OPT-NEXT:    scratch_store_dword off, v72, s105 ; 4-byte Folded Spill
135; FLAT_SCR_OPT-NEXT:    s_waitcnt_depctr 0xffe3
136; FLAT_SCR_OPT-NEXT:    s_mov_b32 s105, 0
137; FLAT_SCR_OPT-NEXT:    scratch_load_dword v72, off, s105
138; FLAT_SCR_OPT-NEXT:    s_waitcnt vmcnt(0)
139; FLAT_SCR_OPT-NEXT:    s_waitcnt_depctr 0xffe3
140; FLAT_SCR_OPT-NEXT:    s_mov_b32 exec_lo, s104
141; FLAT_SCR_OPT-NEXT:    s_load_dword vcc_lo, s[0:1], 0x8
142; FLAT_SCR_OPT-NEXT:    ; kill: killed $sgpr0_sgpr1
143; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
144; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
145; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
146; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
147; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
148; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
149; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
150; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
151; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
152; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
153; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
154; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
155; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
156; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
157; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
158; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
159; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
160; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
161; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
162; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
163; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
164; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
165; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
166; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
167; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
168; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
169; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
170; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
171; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
172; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
173; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
174; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
175; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
176; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
177; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
178; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
179; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
180; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
181; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
182; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
183; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
184; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
185; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
186; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
187; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
188; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
189; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
190; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
191; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
192; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
193; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
194; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
195; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
196; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
197; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
198; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
199; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
200; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
201; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
202; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
203; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
204; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
205; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
206; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
207; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
208; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
209; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
210; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
211; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
212; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
213; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
214; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
215; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
216; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
217; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
218; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
219; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
220; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
221; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
222; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
223; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
224; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
225; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
226; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
227; FLAT_SCR_OPT-NEXT:    s_waitcnt lgkmcnt(0)
228; FLAT_SCR_OPT-NEXT:    v_mov_b32_e32 v0, vcc_lo
229; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
230; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
231; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
232; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
233; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
234; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
235; FLAT_SCR_OPT-NEXT:    ;;#ASMSTART
236; FLAT_SCR_OPT-NEXT:    ;;#ASMEND
237; FLAT_SCR_OPT-NEXT:    s_mov_b32 s2, exec_lo
238; FLAT_SCR_OPT-NEXT:    s_mov_b32 exec_lo, 3
239; FLAT_SCR_OPT-NEXT:    s_mov_b32 s3, 0
240; FLAT_SCR_OPT-NEXT:    scratch_store_dword off, v2, s3
241; FLAT_SCR_OPT-NEXT:    s_waitcnt_depctr 0xffe3
242; FLAT_SCR_OPT-NEXT:    s_mov_b32 s3, 4
243; FLAT_SCR_OPT-NEXT:    scratch_load_dword v2, off, s3 ; 4-byte Folded Reload
244; FLAT_SCR_OPT-NEXT:    s_waitcnt_depctr 0xffe3
245; FLAT_SCR_OPT-NEXT:    s_mov_b32 s3, 0
246; FLAT_SCR_OPT-NEXT:    s_waitcnt vmcnt(0)
247; FLAT_SCR_OPT-NEXT:    v_readlane_b32 s0, v2, 0
248; FLAT_SCR_OPT-NEXT:    v_readlane_b32 s1, v2, 1
249; FLAT_SCR_OPT-NEXT:    scratch_load_dword v2, off, s3
250; FLAT_SCR_OPT-NEXT:    s_waitcnt vmcnt(0)
251; FLAT_SCR_OPT-NEXT:    s_waitcnt_depctr 0xffe3
252; FLAT_SCR_OPT-NEXT:    s_mov_b32 exec_lo, s2
253; FLAT_SCR_OPT-NEXT:    v_mov_b32_e32 v1, 0
254; FLAT_SCR_OPT-NEXT:    global_store_dword v1, v0, s[0:1]
255; FLAT_SCR_OPT-NEXT:    s_endpgm
256;
257; FLAT_SCR_ARCH-LABEL: test:
258; FLAT_SCR_ARCH:       ; %bb.0:
259; FLAT_SCR_ARCH-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0
260; FLAT_SCR_ARCH-NEXT:    s_mov_b32 s104, exec_lo
261; FLAT_SCR_ARCH-NEXT:    s_mov_b32 exec_lo, 3
262; FLAT_SCR_ARCH-NEXT:    s_mov_b32 s105, 0
263; FLAT_SCR_ARCH-NEXT:    scratch_store_dword off, v72, s105
264; FLAT_SCR_ARCH-NEXT:    s_waitcnt lgkmcnt(0)
265; FLAT_SCR_ARCH-NEXT:    v_writelane_b32 v72, s2, 0
266; FLAT_SCR_ARCH-NEXT:    s_mov_b32 s105, 4
267; FLAT_SCR_ARCH-NEXT:    v_writelane_b32 v72, s3, 1
268; FLAT_SCR_ARCH-NEXT:    scratch_store_dword off, v72, s105 ; 4-byte Folded Spill
269; FLAT_SCR_ARCH-NEXT:    s_waitcnt_depctr 0xffe3
270; FLAT_SCR_ARCH-NEXT:    s_mov_b32 s105, 0
271; FLAT_SCR_ARCH-NEXT:    scratch_load_dword v72, off, s105
272; FLAT_SCR_ARCH-NEXT:    s_waitcnt vmcnt(0)
273; FLAT_SCR_ARCH-NEXT:    s_waitcnt_depctr 0xffe3
274; FLAT_SCR_ARCH-NEXT:    s_mov_b32 exec_lo, s104
275; FLAT_SCR_ARCH-NEXT:    s_load_dword vcc_lo, s[0:1], 0x8
276; FLAT_SCR_ARCH-NEXT:    ; kill: killed $sgpr0_sgpr1
277; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
278; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
279; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
280; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
281; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
282; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
283; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
284; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
285; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
286; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
287; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
288; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
289; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
290; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
291; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
292; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
293; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
294; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
295; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
296; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
297; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
298; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
299; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
300; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
301; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
302; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
303; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
304; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
305; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
306; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
307; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
308; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
309; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
310; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
311; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
312; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
313; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
314; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
315; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
316; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
317; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
318; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
319; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
320; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
321; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
322; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
323; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
324; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
325; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
326; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
327; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
328; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
329; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
330; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
331; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
332; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
333; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
334; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
335; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
336; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
337; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
338; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
339; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
340; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
341; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
342; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
343; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
344; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
345; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
346; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
347; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
348; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
349; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
350; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
351; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
352; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
353; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
354; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
355; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
356; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
357; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
358; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
359; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
360; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
361; FLAT_SCR_ARCH-NEXT:    s_waitcnt lgkmcnt(0)
362; FLAT_SCR_ARCH-NEXT:    v_mov_b32_e32 v0, vcc_lo
363; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
364; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
365; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
366; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
367; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
368; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
369; FLAT_SCR_ARCH-NEXT:    ;;#ASMSTART
370; FLAT_SCR_ARCH-NEXT:    ;;#ASMEND
371; FLAT_SCR_ARCH-NEXT:    s_mov_b32 s2, exec_lo
372; FLAT_SCR_ARCH-NEXT:    s_mov_b32 exec_lo, 3
373; FLAT_SCR_ARCH-NEXT:    s_mov_b32 s3, 0
374; FLAT_SCR_ARCH-NEXT:    scratch_store_dword off, v2, s3
375; FLAT_SCR_ARCH-NEXT:    s_waitcnt_depctr 0xffe3
376; FLAT_SCR_ARCH-NEXT:    s_mov_b32 s3, 4
377; FLAT_SCR_ARCH-NEXT:    scratch_load_dword v2, off, s3 ; 4-byte Folded Reload
378; FLAT_SCR_ARCH-NEXT:    s_waitcnt_depctr 0xffe3
379; FLAT_SCR_ARCH-NEXT:    s_mov_b32 s3, 0
380; FLAT_SCR_ARCH-NEXT:    s_waitcnt vmcnt(0)
381; FLAT_SCR_ARCH-NEXT:    v_readlane_b32 s0, v2, 0
382; FLAT_SCR_ARCH-NEXT:    v_readlane_b32 s1, v2, 1
383; FLAT_SCR_ARCH-NEXT:    scratch_load_dword v2, off, s3
384; FLAT_SCR_ARCH-NEXT:    s_waitcnt vmcnt(0)
385; FLAT_SCR_ARCH-NEXT:    s_waitcnt_depctr 0xffe3
386; FLAT_SCR_ARCH-NEXT:    s_mov_b32 exec_lo, s2
387; FLAT_SCR_ARCH-NEXT:    v_mov_b32_e32 v1, 0
388; FLAT_SCR_ARCH-NEXT:    global_store_dword v1, v0, s[0:1]
389; FLAT_SCR_ARCH-NEXT:    s_endpgm
390  call void asm sideeffect "", "~{s[0:7]}" ()
391  call void asm sideeffect "", "~{s[8:15]}" ()
392  call void asm sideeffect "", "~{s[16:23]}" ()
393  call void asm sideeffect "", "~{s[24:31]}" ()
394  call void asm sideeffect "", "~{s[32:39]}" ()
395  call void asm sideeffect "", "~{s[40:47]}" ()
396  call void asm sideeffect "", "~{s[48:55]}" ()
397  call void asm sideeffect "", "~{s[56:63]}" ()
398  call void asm sideeffect "", "~{s[64:71]}" ()
399  call void asm sideeffect "", "~{s[72:79]}" ()
400  call void asm sideeffect "", "~{s[80:87]}" ()
401  call void asm sideeffect "", "~{s[88:95]}" ()
402  call void asm sideeffect "", "~{s[96:103]}" ()
403  call void asm sideeffect "", "~{s[104:105]}" ()
404  call void asm sideeffect "", "~{v[0:7]}" ()
405  call void asm sideeffect "", "~{v[8:15]}" ()
406  call void asm sideeffect "", "~{v[16:23]}" ()
407  call void asm sideeffect "", "~{v[24:31]}" ()
408  call void asm sideeffect "", "~{v[32:39]}" ()
409  call void asm sideeffect "", "~{v[40:47]}" ()
410  call void asm sideeffect "", "~{v[48:55]}" ()
411  call void asm sideeffect "", "~{v[56:63]}" ()
412  call void asm sideeffect "", "~{v[64:71]}" ()
413  call void asm sideeffect "", "~{v[72:79]}" ()
414  call void asm sideeffect "", "~{v[80:87]}" ()
415  call void asm sideeffect "", "~{v[88:95]}" ()
416  call void asm sideeffect "", "~{v[96:103]}" ()
417  call void asm sideeffect "", "~{v[104:111]}" ()
418  call void asm sideeffect "", "~{v[112:119]}" ()
419  call void asm sideeffect "", "~{v[120:127]}" ()
420  call void asm sideeffect "", "~{v[128:135]}" ()
421  call void asm sideeffect "", "~{v[136:143]}" ()
422  call void asm sideeffect "", "~{v[144:151]}" ()
423  call void asm sideeffect "", "~{v[152:159]}" ()
424  call void asm sideeffect "", "~{v[160:167]}" ()
425  call void asm sideeffect "", "~{v[168:175]}" ()
426  call void asm sideeffect "", "~{v[176:183]}" ()
427  call void asm sideeffect "", "~{v[184:191]}" ()
428  call void asm sideeffect "", "~{v[192:199]}" ()
429  call void asm sideeffect "", "~{v[200:207]}" ()
430  call void asm sideeffect "", "~{v[208:215]}" ()
431  call void asm sideeffect "", "~{v[216:223]}" ()
432  call void asm sideeffect "", "~{v[224:231]}" ()
433  call void asm sideeffect "", "~{v[232:239]}" ()
434  call void asm sideeffect "", "~{v[240:247]}" ()
435  call void asm sideeffect "", "~{v[248:255]}" ()
436
437  store i32 %in, i32 addrspace(1)* %out
438  ret void
439}
440
441define amdgpu_kernel void @kernel_no_calls_no_stack() {
442; GCN-LABEL: kernel_no_calls_no_stack:
443; GCN:       ; %bb.0:
444; GCN-NEXT:    s_endpgm
445  ret void
446}
447
448attributes #0 = { nounwind }
449