[clang] Fix crashes when passing VLA to va_arg (#119563)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / materialize-frame-index-sgpr.gfx10.ll
blobb77c3a9bb532bc9587b19e977733848b1ae6dd3d
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -mattr=+cumode < %s | FileCheck -check-prefix=GFX10_1 %s
3 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1030 -mattr=+cumode < %s | FileCheck -check-prefix=GFX10_3 %s
4 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+cumode < %s | FileCheck -check-prefix=GFX11 %s
5 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -mattr=+cumode < %s | FileCheck -check-prefix=GFX12 %s
6 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx803 < %s | FileCheck -check-prefix=GFX8 %s
7 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9,GFX900 %s
8 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx940 < %s | FileCheck -check-prefixes=GFX9,GFX940 %s
10 ; We aren't pressuring the SGPRs, so this can use the add with carry out pre-gfx9.
11 define void @scalar_mov_materializes_frame_index_unavailable_scc() #0 {
12 ; GFX10_1-LABEL: scalar_mov_materializes_frame_index_unavailable_scc:
13 ; GFX10_1:       ; %bb.0:
14 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
16 ; GFX10_1-NEXT:    s_add_i32 s5, s32, 0x80880
17 ; GFX10_1-NEXT:    buffer_store_dword v1, off, s[0:3], s5 ; 4-byte Folded Spill
18 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
19 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
20 ; GFX10_1-NEXT:    v_lshrrev_b32_e64 v0, 5, s32
21 ; GFX10_1-NEXT:    v_writelane_b32 v1, s59, 0
22 ; GFX10_1-NEXT:    s_and_b32 s4, 0, exec_lo
23 ; GFX10_1-NEXT:    v_add_nc_u32_e32 v0, 64, v0
24 ; GFX10_1-NEXT:    ;;#ASMSTART
25 ; GFX10_1-NEXT:    ; use alloca0 v0
26 ; GFX10_1-NEXT:    ;;#ASMEND
27 ; GFX10_1-NEXT:    v_lshrrev_b32_e64 v0, 5, s32
28 ; GFX10_1-NEXT:    v_add_nc_u32_e32 v0, 0x4040, v0
29 ; GFX10_1-NEXT:    v_readfirstlane_b32 s59, v0
30 ; GFX10_1-NEXT:    ;;#ASMSTART
31 ; GFX10_1-NEXT:    ; use s59, scc
32 ; GFX10_1-NEXT:    ;;#ASMEND
33 ; GFX10_1-NEXT:    v_readlane_b32 s59, v1, 0
34 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
35 ; GFX10_1-NEXT:    s_add_i32 s5, s32, 0x80880
36 ; GFX10_1-NEXT:    buffer_load_dword v1, off, s[0:3], s5 ; 4-byte Folded Reload
37 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
38 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
39 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0)
40 ; GFX10_1-NEXT:    s_setpc_b64 s[30:31]
42 ; GFX10_3-LABEL: scalar_mov_materializes_frame_index_unavailable_scc:
43 ; GFX10_3:       ; %bb.0:
44 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
45 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
46 ; GFX10_3-NEXT:    s_add_i32 s5, s32, 0x80880
47 ; GFX10_3-NEXT:    buffer_store_dword v1, off, s[0:3], s5 ; 4-byte Folded Spill
48 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
49 ; GFX10_3-NEXT:    v_lshrrev_b32_e64 v0, 5, s32
50 ; GFX10_3-NEXT:    v_writelane_b32 v1, s59, 0
51 ; GFX10_3-NEXT:    s_and_b32 s4, 0, exec_lo
52 ; GFX10_3-NEXT:    v_add_nc_u32_e32 v0, 64, v0
53 ; GFX10_3-NEXT:    ;;#ASMSTART
54 ; GFX10_3-NEXT:    ; use alloca0 v0
55 ; GFX10_3-NEXT:    ;;#ASMEND
56 ; GFX10_3-NEXT:    v_lshrrev_b32_e64 v0, 5, s32
57 ; GFX10_3-NEXT:    v_add_nc_u32_e32 v0, 0x4040, v0
58 ; GFX10_3-NEXT:    v_readfirstlane_b32 s59, v0
59 ; GFX10_3-NEXT:    ;;#ASMSTART
60 ; GFX10_3-NEXT:    ; use s59, scc
61 ; GFX10_3-NEXT:    ;;#ASMEND
62 ; GFX10_3-NEXT:    v_readlane_b32 s59, v1, 0
63 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
64 ; GFX10_3-NEXT:    s_add_i32 s5, s32, 0x80880
65 ; GFX10_3-NEXT:    buffer_load_dword v1, off, s[0:3], s5 ; 4-byte Folded Reload
66 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
67 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0)
68 ; GFX10_3-NEXT:    s_setpc_b64 s[30:31]
70 ; GFX11-LABEL: scalar_mov_materializes_frame_index_unavailable_scc:
71 ; GFX11:       ; %bb.0:
72 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
73 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
74 ; GFX11-NEXT:    s_add_i32 s1, s32, 0x4044
75 ; GFX11-NEXT:    scratch_store_b32 off, v1, s1 ; 4-byte Folded Spill
76 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
77 ; GFX11-NEXT:    s_add_i32 s0, s32, 64
78 ; GFX11-NEXT:    v_writelane_b32 v1, s59, 0
79 ; GFX11-NEXT:    v_mov_b32_e32 v0, s0
80 ; GFX11-NEXT:    s_and_b32 s0, 0, exec_lo
81 ; GFX11-NEXT:    s_addc_u32 s0, s32, 0x4040
82 ; GFX11-NEXT:    ;;#ASMSTART
83 ; GFX11-NEXT:    ; use alloca0 v0
84 ; GFX11-NEXT:    ;;#ASMEND
85 ; GFX11-NEXT:    s_bitcmp1_b32 s0, 0
86 ; GFX11-NEXT:    s_bitset0_b32 s0, 0
87 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
88 ; GFX11-NEXT:    s_mov_b32 s59, s0
89 ; GFX11-NEXT:    ;;#ASMSTART
90 ; GFX11-NEXT:    ; use s59, scc
91 ; GFX11-NEXT:    ;;#ASMEND
92 ; GFX11-NEXT:    v_readlane_b32 s59, v1, 0
93 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
94 ; GFX11-NEXT:    s_add_i32 s1, s32, 0x4044
95 ; GFX11-NEXT:    scratch_load_b32 v1, off, s1 ; 4-byte Folded Reload
96 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
97 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
98 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
100 ; GFX12-LABEL: scalar_mov_materializes_frame_index_unavailable_scc:
101 ; GFX12:       ; %bb.0:
102 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
103 ; GFX12-NEXT:    s_wait_expcnt 0x0
104 ; GFX12-NEXT:    s_wait_samplecnt 0x0
105 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
106 ; GFX12-NEXT:    s_wait_kmcnt 0x0
107 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
108 ; GFX12-NEXT:    scratch_store_b32 off, v1, s32 offset:16388 ; 4-byte Folded Spill
109 ; GFX12-NEXT:    s_wait_alu 0xfffe
110 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
111 ; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
112 ; GFX12-NEXT:    s_and_b32 s0, 0, exec_lo
113 ; GFX12-NEXT:    v_writelane_b32 v1, s59, 0
114 ; GFX12-NEXT:    s_add_co_ci_u32 s0, s32, 0x4000
115 ; GFX12-NEXT:    v_mov_b32_e32 v0, s32
116 ; GFX12-NEXT:    s_wait_alu 0xfffe
117 ; GFX12-NEXT:    s_bitcmp1_b32 s0, 0
118 ; GFX12-NEXT:    s_bitset0_b32 s0, 0
119 ; GFX12-NEXT:    ;;#ASMSTART
120 ; GFX12-NEXT:    ; use alloca0 v0
121 ; GFX12-NEXT:    ;;#ASMEND
122 ; GFX12-NEXT:    s_wait_alu 0xfffe
123 ; GFX12-NEXT:    s_mov_b32 s59, s0
124 ; GFX12-NEXT:    ;;#ASMSTART
125 ; GFX12-NEXT:    ; use s59, scc
126 ; GFX12-NEXT:    ;;#ASMEND
127 ; GFX12-NEXT:    v_readlane_b32 s59, v1, 0
128 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
129 ; GFX12-NEXT:    scratch_load_b32 v1, off, s32 offset:16388 ; 4-byte Folded Reload
130 ; GFX12-NEXT:    s_wait_alu 0xfffe
131 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
132 ; GFX12-NEXT:    s_wait_loadcnt 0x0
133 ; GFX12-NEXT:    s_wait_alu 0xfffe
134 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
136 ; GFX8-LABEL: scalar_mov_materializes_frame_index_unavailable_scc:
137 ; GFX8:       ; %bb.0:
138 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
139 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
140 ; GFX8-NEXT:    s_add_i32 s6, s32, 0x101100
141 ; GFX8-NEXT:    buffer_store_dword v1, off, s[0:3], s6 ; 4-byte Folded Spill
142 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
143 ; GFX8-NEXT:    v_lshrrev_b32_e64 v0, 6, s32
144 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 64, v0
145 ; GFX8-NEXT:    v_writelane_b32 v1, s59, 0
146 ; GFX8-NEXT:    ;;#ASMSTART
147 ; GFX8-NEXT:    ; use alloca0 v0
148 ; GFX8-NEXT:    ;;#ASMEND
149 ; GFX8-NEXT:    v_lshrrev_b32_e64 v0, 6, s32
150 ; GFX8-NEXT:    s_movk_i32 s59, 0x4040
151 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s59, v0
152 ; GFX8-NEXT:    v_readfirstlane_b32 s59, v0
153 ; GFX8-NEXT:    s_and_b64 s[4:5], 0, exec
154 ; GFX8-NEXT:    ;;#ASMSTART
155 ; GFX8-NEXT:    ; use s59, scc
156 ; GFX8-NEXT:    ;;#ASMEND
157 ; GFX8-NEXT:    v_readlane_b32 s59, v1, 0
158 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
159 ; GFX8-NEXT:    s_add_i32 s6, s32, 0x101100
160 ; GFX8-NEXT:    buffer_load_dword v1, off, s[0:3], s6 ; 4-byte Folded Reload
161 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
162 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
163 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
165 ; GFX900-LABEL: scalar_mov_materializes_frame_index_unavailable_scc:
166 ; GFX900:       ; %bb.0:
167 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
168 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
169 ; GFX900-NEXT:    s_add_i32 s6, s32, 0x101100
170 ; GFX900-NEXT:    buffer_store_dword v1, off, s[0:3], s6 ; 4-byte Folded Spill
171 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
172 ; GFX900-NEXT:    v_lshrrev_b32_e64 v0, 6, s32
173 ; GFX900-NEXT:    v_add_u32_e32 v0, 64, v0
174 ; GFX900-NEXT:    ;;#ASMSTART
175 ; GFX900-NEXT:    ; use alloca0 v0
176 ; GFX900-NEXT:    ;;#ASMEND
177 ; GFX900-NEXT:    v_lshrrev_b32_e64 v0, 6, s32
178 ; GFX900-NEXT:    v_add_u32_e32 v0, 0x4040, v0
179 ; GFX900-NEXT:    v_writelane_b32 v1, s59, 0
180 ; GFX900-NEXT:    v_readfirstlane_b32 s59, v0
181 ; GFX900-NEXT:    s_and_b64 s[4:5], 0, exec
182 ; GFX900-NEXT:    ;;#ASMSTART
183 ; GFX900-NEXT:    ; use s59, scc
184 ; GFX900-NEXT:    ;;#ASMEND
185 ; GFX900-NEXT:    v_readlane_b32 s59, v1, 0
186 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
187 ; GFX900-NEXT:    s_add_i32 s6, s32, 0x101100
188 ; GFX900-NEXT:    buffer_load_dword v1, off, s[0:3], s6 ; 4-byte Folded Reload
189 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
190 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
191 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
193 ; GFX940-LABEL: scalar_mov_materializes_frame_index_unavailable_scc:
194 ; GFX940:       ; %bb.0:
195 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
196 ; GFX940-NEXT:    s_xor_saveexec_b64 s[0:1], -1
197 ; GFX940-NEXT:    s_add_i32 s2, s32, 0x4044
198 ; GFX940-NEXT:    scratch_store_dword off, v1, s2 sc0 sc1 ; 4-byte Folded Spill
199 ; GFX940-NEXT:    s_mov_b64 exec, s[0:1]
200 ; GFX940-NEXT:    s_add_i32 s0, s32, 64
201 ; GFX940-NEXT:    v_mov_b32_e32 v0, s0
202 ; GFX940-NEXT:    s_and_b64 s[0:1], 0, exec
203 ; GFX940-NEXT:    s_addc_u32 s0, s32, 0x4040
204 ; GFX940-NEXT:    s_bitcmp1_b32 s0, 0
205 ; GFX940-NEXT:    s_bitset0_b32 s0, 0
206 ; GFX940-NEXT:    v_writelane_b32 v1, s59, 0
207 ; GFX940-NEXT:    s_mov_b32 s59, s0
208 ; GFX940-NEXT:    ;;#ASMSTART
209 ; GFX940-NEXT:    ; use alloca0 v0
210 ; GFX940-NEXT:    ;;#ASMEND
211 ; GFX940-NEXT:    ;;#ASMSTART
212 ; GFX940-NEXT:    ; use s59, scc
213 ; GFX940-NEXT:    ;;#ASMEND
214 ; GFX940-NEXT:    v_readlane_b32 s59, v1, 0
215 ; GFX940-NEXT:    s_xor_saveexec_b64 s[0:1], -1
216 ; GFX940-NEXT:    s_add_i32 s2, s32, 0x4044
217 ; GFX940-NEXT:    scratch_load_dword v1, off, s2 ; 4-byte Folded Reload
218 ; GFX940-NEXT:    s_mov_b64 exec, s[0:1]
219 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
220 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
221   %alloca0 = alloca [4096 x i32], align 64, addrspace(5)
222   %alloca1 = alloca i32, align 4, addrspace(5)
223   call void asm sideeffect "; use alloca0 $0", "v"(ptr addrspace(5) %alloca0)
224   call void asm sideeffect "; use $0, $1", "{s59},{scc}"(ptr addrspace(5) %alloca1, i32 0)
225   ret void
228 ; %alloca1 should end up materializing with s_mov_b32, and scc is
229 ; available.
230 define void @scalar_mov_materializes_frame_index_dead_scc() #0 {
231 ; GFX10_1-LABEL: scalar_mov_materializes_frame_index_dead_scc:
232 ; GFX10_1:       ; %bb.0:
233 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
234 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
235 ; GFX10_1-NEXT:    s_add_i32 s5, s32, 0x80880
236 ; GFX10_1-NEXT:    buffer_store_dword v1, off, s[0:3], s5 ; 4-byte Folded Spill
237 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
238 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
239 ; GFX10_1-NEXT:    v_writelane_b32 v1, s59, 0
240 ; GFX10_1-NEXT:    v_lshrrev_b32_e64 v0, 5, s32
241 ; GFX10_1-NEXT:    s_lshr_b32 s59, s32, 5
242 ; GFX10_1-NEXT:    s_addk_i32 s59, 0x4040
243 ; GFX10_1-NEXT:    v_add_nc_u32_e32 v0, 64, v0
244 ; GFX10_1-NEXT:    ;;#ASMSTART
245 ; GFX10_1-NEXT:    ; use alloca0 v0
246 ; GFX10_1-NEXT:    ;;#ASMEND
247 ; GFX10_1-NEXT:    ;;#ASMSTART
248 ; GFX10_1-NEXT:    ; use s59
249 ; GFX10_1-NEXT:    ;;#ASMEND
250 ; GFX10_1-NEXT:    v_readlane_b32 s59, v1, 0
251 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
252 ; GFX10_1-NEXT:    s_add_i32 s5, s32, 0x80880
253 ; GFX10_1-NEXT:    buffer_load_dword v1, off, s[0:3], s5 ; 4-byte Folded Reload
254 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
255 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
256 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0)
257 ; GFX10_1-NEXT:    s_setpc_b64 s[30:31]
259 ; GFX10_3-LABEL: scalar_mov_materializes_frame_index_dead_scc:
260 ; GFX10_3:       ; %bb.0:
261 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
262 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
263 ; GFX10_3-NEXT:    s_add_i32 s5, s32, 0x80880
264 ; GFX10_3-NEXT:    buffer_store_dword v1, off, s[0:3], s5 ; 4-byte Folded Spill
265 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
266 ; GFX10_3-NEXT:    v_writelane_b32 v1, s59, 0
267 ; GFX10_3-NEXT:    v_lshrrev_b32_e64 v0, 5, s32
268 ; GFX10_3-NEXT:    s_lshr_b32 s59, s32, 5
269 ; GFX10_3-NEXT:    s_addk_i32 s59, 0x4040
270 ; GFX10_3-NEXT:    v_add_nc_u32_e32 v0, 64, v0
271 ; GFX10_3-NEXT:    ;;#ASMSTART
272 ; GFX10_3-NEXT:    ; use alloca0 v0
273 ; GFX10_3-NEXT:    ;;#ASMEND
274 ; GFX10_3-NEXT:    ;;#ASMSTART
275 ; GFX10_3-NEXT:    ; use s59
276 ; GFX10_3-NEXT:    ;;#ASMEND
277 ; GFX10_3-NEXT:    v_readlane_b32 s59, v1, 0
278 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
279 ; GFX10_3-NEXT:    s_add_i32 s5, s32, 0x80880
280 ; GFX10_3-NEXT:    buffer_load_dword v1, off, s[0:3], s5 ; 4-byte Folded Reload
281 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
282 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0)
283 ; GFX10_3-NEXT:    s_setpc_b64 s[30:31]
285 ; GFX11-LABEL: scalar_mov_materializes_frame_index_dead_scc:
286 ; GFX11:       ; %bb.0:
287 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
288 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
289 ; GFX11-NEXT:    s_add_i32 s1, s32, 0x4044
290 ; GFX11-NEXT:    scratch_store_b32 off, v1, s1 ; 4-byte Folded Spill
291 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
292 ; GFX11-NEXT:    v_writelane_b32 v1, s59, 0
293 ; GFX11-NEXT:    s_add_i32 s0, s32, 64
294 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
295 ; GFX11-NEXT:    v_mov_b32_e32 v0, s0
296 ; GFX11-NEXT:    s_add_i32 s0, s32, 0x4040
297 ; GFX11-NEXT:    ;;#ASMSTART
298 ; GFX11-NEXT:    ; use alloca0 v0
299 ; GFX11-NEXT:    ;;#ASMEND
300 ; GFX11-NEXT:    s_mov_b32 s59, s0
301 ; GFX11-NEXT:    ;;#ASMSTART
302 ; GFX11-NEXT:    ; use s59
303 ; GFX11-NEXT:    ;;#ASMEND
304 ; GFX11-NEXT:    v_readlane_b32 s59, v1, 0
305 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
306 ; GFX11-NEXT:    s_add_i32 s1, s32, 0x4044
307 ; GFX11-NEXT:    scratch_load_b32 v1, off, s1 ; 4-byte Folded Reload
308 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
309 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
310 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
312 ; GFX12-LABEL: scalar_mov_materializes_frame_index_dead_scc:
313 ; GFX12:       ; %bb.0:
314 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
315 ; GFX12-NEXT:    s_wait_expcnt 0x0
316 ; GFX12-NEXT:    s_wait_samplecnt 0x0
317 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
318 ; GFX12-NEXT:    s_wait_kmcnt 0x0
319 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
320 ; GFX12-NEXT:    scratch_store_b32 off, v1, s32 offset:16388 ; 4-byte Folded Spill
321 ; GFX12-NEXT:    s_wait_alu 0xfffe
322 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
323 ; GFX12-NEXT:    v_writelane_b32 v1, s59, 0
324 ; GFX12-NEXT:    s_add_co_i32 s0, s32, 0x4000
325 ; GFX12-NEXT:    v_mov_b32_e32 v0, s32
326 ; GFX12-NEXT:    s_wait_alu 0xfffe
327 ; GFX12-NEXT:    s_mov_b32 s59, s0
328 ; GFX12-NEXT:    ;;#ASMSTART
329 ; GFX12-NEXT:    ; use alloca0 v0
330 ; GFX12-NEXT:    ;;#ASMEND
331 ; GFX12-NEXT:    ;;#ASMSTART
332 ; GFX12-NEXT:    ; use s59
333 ; GFX12-NEXT:    ;;#ASMEND
334 ; GFX12-NEXT:    v_readlane_b32 s59, v1, 0
335 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
336 ; GFX12-NEXT:    scratch_load_b32 v1, off, s32 offset:16388 ; 4-byte Folded Reload
337 ; GFX12-NEXT:    s_wait_alu 0xfffe
338 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
339 ; GFX12-NEXT:    s_wait_loadcnt 0x0
340 ; GFX12-NEXT:    s_wait_alu 0xfffe
341 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
343 ; GFX8-LABEL: scalar_mov_materializes_frame_index_dead_scc:
344 ; GFX8:       ; %bb.0:
345 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
346 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
347 ; GFX8-NEXT:    s_add_i32 s6, s32, 0x101100
348 ; GFX8-NEXT:    buffer_store_dword v1, off, s[0:3], s6 ; 4-byte Folded Spill
349 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
350 ; GFX8-NEXT:    v_writelane_b32 v1, s59, 0
351 ; GFX8-NEXT:    s_lshr_b32 s59, s32, 6
352 ; GFX8-NEXT:    v_lshrrev_b32_e64 v0, 6, s32
353 ; GFX8-NEXT:    s_addk_i32 s59, 0x4040
354 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 64, v0
355 ; GFX8-NEXT:    ;;#ASMSTART
356 ; GFX8-NEXT:    ; use alloca0 v0
357 ; GFX8-NEXT:    ;;#ASMEND
358 ; GFX8-NEXT:    ;;#ASMSTART
359 ; GFX8-NEXT:    ; use s59
360 ; GFX8-NEXT:    ;;#ASMEND
361 ; GFX8-NEXT:    v_readlane_b32 s59, v1, 0
362 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
363 ; GFX8-NEXT:    s_add_i32 s6, s32, 0x101100
364 ; GFX8-NEXT:    buffer_load_dword v1, off, s[0:3], s6 ; 4-byte Folded Reload
365 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
366 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
367 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
369 ; GFX900-LABEL: scalar_mov_materializes_frame_index_dead_scc:
370 ; GFX900:       ; %bb.0:
371 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
372 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
373 ; GFX900-NEXT:    s_add_i32 s6, s32, 0x101100
374 ; GFX900-NEXT:    buffer_store_dword v1, off, s[0:3], s6 ; 4-byte Folded Spill
375 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
376 ; GFX900-NEXT:    v_writelane_b32 v1, s59, 0
377 ; GFX900-NEXT:    s_lshr_b32 s59, s32, 6
378 ; GFX900-NEXT:    v_lshrrev_b32_e64 v0, 6, s32
379 ; GFX900-NEXT:    s_addk_i32 s59, 0x4040
380 ; GFX900-NEXT:    v_add_u32_e32 v0, 64, v0
381 ; GFX900-NEXT:    ;;#ASMSTART
382 ; GFX900-NEXT:    ; use alloca0 v0
383 ; GFX900-NEXT:    ;;#ASMEND
384 ; GFX900-NEXT:    ;;#ASMSTART
385 ; GFX900-NEXT:    ; use s59
386 ; GFX900-NEXT:    ;;#ASMEND
387 ; GFX900-NEXT:    v_readlane_b32 s59, v1, 0
388 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
389 ; GFX900-NEXT:    s_add_i32 s6, s32, 0x101100
390 ; GFX900-NEXT:    buffer_load_dword v1, off, s[0:3], s6 ; 4-byte Folded Reload
391 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
392 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
393 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
395 ; GFX940-LABEL: scalar_mov_materializes_frame_index_dead_scc:
396 ; GFX940:       ; %bb.0:
397 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
398 ; GFX940-NEXT:    s_xor_saveexec_b64 s[0:1], -1
399 ; GFX940-NEXT:    s_add_i32 s2, s32, 0x4044
400 ; GFX940-NEXT:    scratch_store_dword off, v1, s2 sc0 sc1 ; 4-byte Folded Spill
401 ; GFX940-NEXT:    s_mov_b64 exec, s[0:1]
402 ; GFX940-NEXT:    s_add_i32 s0, s32, 64
403 ; GFX940-NEXT:    v_mov_b32_e32 v0, s0
404 ; GFX940-NEXT:    s_add_i32 s0, s32, 0x4040
405 ; GFX940-NEXT:    v_writelane_b32 v1, s59, 0
406 ; GFX940-NEXT:    s_mov_b32 s59, s0
407 ; GFX940-NEXT:    ;;#ASMSTART
408 ; GFX940-NEXT:    ; use alloca0 v0
409 ; GFX940-NEXT:    ;;#ASMEND
410 ; GFX940-NEXT:    ;;#ASMSTART
411 ; GFX940-NEXT:    ; use s59
412 ; GFX940-NEXT:    ;;#ASMEND
413 ; GFX940-NEXT:    v_readlane_b32 s59, v1, 0
414 ; GFX940-NEXT:    s_xor_saveexec_b64 s[0:1], -1
415 ; GFX940-NEXT:    s_add_i32 s2, s32, 0x4044
416 ; GFX940-NEXT:    scratch_load_dword v1, off, s2 ; 4-byte Folded Reload
417 ; GFX940-NEXT:    s_mov_b64 exec, s[0:1]
418 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
419 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
420   %alloca0 = alloca [4096 x i32], align 64, addrspace(5)
421   %alloca1 = alloca i32, align 4, addrspace(5)
422   call void asm sideeffect "; use alloca0 $0", "v"(ptr addrspace(5) %alloca0)
423   call void asm sideeffect "; use $0", "{s59}"(ptr addrspace(5) %alloca1)
424   ret void
427 define void @scalar_mov_materializes_frame_index_unavailable_scc_fp() #1 {
428 ; GFX10_1-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_fp:
429 ; GFX10_1:       ; %bb.0:
430 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
431 ; GFX10_1-NEXT:    s_mov_b32 s5, s33
432 ; GFX10_1-NEXT:    s_mov_b32 s33, s32
433 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
434 ; GFX10_1-NEXT:    s_add_i32 s6, s33, 0x80880
435 ; GFX10_1-NEXT:    buffer_store_dword v1, off, s[0:3], s6 ; 4-byte Folded Spill
436 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
437 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
438 ; GFX10_1-NEXT:    v_lshrrev_b32_e64 v0, 5, s33
439 ; GFX10_1-NEXT:    v_writelane_b32 v1, s59, 0
440 ; GFX10_1-NEXT:    s_add_i32 s32, s32, 0x81000
441 ; GFX10_1-NEXT:    s_and_b32 s4, 0, exec_lo
442 ; GFX10_1-NEXT:    v_add_nc_u32_e32 v0, 64, v0
443 ; GFX10_1-NEXT:    ;;#ASMSTART
444 ; GFX10_1-NEXT:    ; use alloca0 v0
445 ; GFX10_1-NEXT:    ;;#ASMEND
446 ; GFX10_1-NEXT:    v_lshrrev_b32_e64 v0, 5, s33
447 ; GFX10_1-NEXT:    v_add_nc_u32_e32 v0, 0x4040, v0
448 ; GFX10_1-NEXT:    v_readfirstlane_b32 s59, v0
449 ; GFX10_1-NEXT:    ;;#ASMSTART
450 ; GFX10_1-NEXT:    ; use s59, scc
451 ; GFX10_1-NEXT:    ;;#ASMEND
452 ; GFX10_1-NEXT:    v_readlane_b32 s59, v1, 0
453 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
454 ; GFX10_1-NEXT:    s_add_i32 s6, s33, 0x80880
455 ; GFX10_1-NEXT:    buffer_load_dword v1, off, s[0:3], s6 ; 4-byte Folded Reload
456 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
457 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
458 ; GFX10_1-NEXT:    s_add_i32 s32, s32, 0xfff7f000
459 ; GFX10_1-NEXT:    s_mov_b32 s33, s5
460 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0)
461 ; GFX10_1-NEXT:    s_setpc_b64 s[30:31]
463 ; GFX10_3-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_fp:
464 ; GFX10_3:       ; %bb.0:
465 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
466 ; GFX10_3-NEXT:    s_mov_b32 s5, s33
467 ; GFX10_3-NEXT:    s_mov_b32 s33, s32
468 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
469 ; GFX10_3-NEXT:    s_add_i32 s6, s33, 0x80880
470 ; GFX10_3-NEXT:    buffer_store_dword v1, off, s[0:3], s6 ; 4-byte Folded Spill
471 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
472 ; GFX10_3-NEXT:    v_lshrrev_b32_e64 v0, 5, s33
473 ; GFX10_3-NEXT:    v_writelane_b32 v1, s59, 0
474 ; GFX10_3-NEXT:    s_add_i32 s32, s32, 0x81000
475 ; GFX10_3-NEXT:    s_and_b32 s4, 0, exec_lo
476 ; GFX10_3-NEXT:    v_add_nc_u32_e32 v0, 64, v0
477 ; GFX10_3-NEXT:    ;;#ASMSTART
478 ; GFX10_3-NEXT:    ; use alloca0 v0
479 ; GFX10_3-NEXT:    ;;#ASMEND
480 ; GFX10_3-NEXT:    v_lshrrev_b32_e64 v0, 5, s33
481 ; GFX10_3-NEXT:    v_add_nc_u32_e32 v0, 0x4040, v0
482 ; GFX10_3-NEXT:    v_readfirstlane_b32 s59, v0
483 ; GFX10_3-NEXT:    ;;#ASMSTART
484 ; GFX10_3-NEXT:    ; use s59, scc
485 ; GFX10_3-NEXT:    ;;#ASMEND
486 ; GFX10_3-NEXT:    v_readlane_b32 s59, v1, 0
487 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
488 ; GFX10_3-NEXT:    s_add_i32 s6, s33, 0x80880
489 ; GFX10_3-NEXT:    buffer_load_dword v1, off, s[0:3], s6 ; 4-byte Folded Reload
490 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
491 ; GFX10_3-NEXT:    s_add_i32 s32, s32, 0xfff7f000
492 ; GFX10_3-NEXT:    s_mov_b32 s33, s5
493 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0)
494 ; GFX10_3-NEXT:    s_setpc_b64 s[30:31]
496 ; GFX11-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_fp:
497 ; GFX11:       ; %bb.0:
498 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
499 ; GFX11-NEXT:    s_mov_b32 s1, s33
500 ; GFX11-NEXT:    s_mov_b32 s33, s32
501 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
502 ; GFX11-NEXT:    s_add_i32 s2, s33, 0x4044
503 ; GFX11-NEXT:    scratch_store_b32 off, v1, s2 ; 4-byte Folded Spill
504 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
505 ; GFX11-NEXT:    s_addk_i32 s32, 0x4080
506 ; GFX11-NEXT:    s_add_i32 s0, s33, 64
507 ; GFX11-NEXT:    v_writelane_b32 v1, s59, 0
508 ; GFX11-NEXT:    v_mov_b32_e32 v0, s0
509 ; GFX11-NEXT:    s_and_b32 s0, 0, exec_lo
510 ; GFX11-NEXT:    s_addc_u32 s0, s33, 0x4040
511 ; GFX11-NEXT:    ;;#ASMSTART
512 ; GFX11-NEXT:    ; use alloca0 v0
513 ; GFX11-NEXT:    ;;#ASMEND
514 ; GFX11-NEXT:    s_bitcmp1_b32 s0, 0
515 ; GFX11-NEXT:    s_bitset0_b32 s0, 0
516 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
517 ; GFX11-NEXT:    s_mov_b32 s59, s0
518 ; GFX11-NEXT:    ;;#ASMSTART
519 ; GFX11-NEXT:    ; use s59, scc
520 ; GFX11-NEXT:    ;;#ASMEND
521 ; GFX11-NEXT:    v_readlane_b32 s59, v1, 0
522 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
523 ; GFX11-NEXT:    s_add_i32 s2, s33, 0x4044
524 ; GFX11-NEXT:    scratch_load_b32 v1, off, s2 ; 4-byte Folded Reload
525 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
526 ; GFX11-NEXT:    s_addk_i32 s32, 0xbf80
527 ; GFX11-NEXT:    s_mov_b32 s33, s1
528 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
529 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
531 ; GFX12-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_fp:
532 ; GFX12:       ; %bb.0:
533 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
534 ; GFX12-NEXT:    s_wait_expcnt 0x0
535 ; GFX12-NEXT:    s_wait_samplecnt 0x0
536 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
537 ; GFX12-NEXT:    s_wait_kmcnt 0x0
538 ; GFX12-NEXT:    s_mov_b32 s1, s33
539 ; GFX12-NEXT:    s_mov_b32 s33, s32
540 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
541 ; GFX12-NEXT:    scratch_store_b32 off, v1, s33 offset:16388 ; 4-byte Folded Spill
542 ; GFX12-NEXT:    s_wait_alu 0xfffe
543 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
544 ; GFX12-NEXT:    s_addk_co_i32 s32, 0x4040
545 ; GFX12-NEXT:    s_and_b32 s0, 0, exec_lo
546 ; GFX12-NEXT:    v_writelane_b32 v1, s59, 0
547 ; GFX12-NEXT:    s_add_co_ci_u32 s0, s33, 0x4000
548 ; GFX12-NEXT:    v_mov_b32_e32 v0, s33
549 ; GFX12-NEXT:    s_wait_alu 0xfffe
550 ; GFX12-NEXT:    s_bitcmp1_b32 s0, 0
551 ; GFX12-NEXT:    s_bitset0_b32 s0, 0
552 ; GFX12-NEXT:    ;;#ASMSTART
553 ; GFX12-NEXT:    ; use alloca0 v0
554 ; GFX12-NEXT:    ;;#ASMEND
555 ; GFX12-NEXT:    s_wait_alu 0xfffe
556 ; GFX12-NEXT:    s_mov_b32 s59, s0
557 ; GFX12-NEXT:    ;;#ASMSTART
558 ; GFX12-NEXT:    ; use s59, scc
559 ; GFX12-NEXT:    ;;#ASMEND
560 ; GFX12-NEXT:    v_readlane_b32 s59, v1, 0
561 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
562 ; GFX12-NEXT:    scratch_load_b32 v1, off, s33 offset:16388 ; 4-byte Folded Reload
563 ; GFX12-NEXT:    s_wait_alu 0xfffe
564 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
565 ; GFX12-NEXT:    s_addk_co_i32 s32, 0xbfc0
566 ; GFX12-NEXT:    s_mov_b32 s33, s1
567 ; GFX12-NEXT:    s_wait_loadcnt 0x0
568 ; GFX12-NEXT:    s_wait_alu 0xfffe
569 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
571 ; GFX8-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_fp:
572 ; GFX8:       ; %bb.0:
573 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
574 ; GFX8-NEXT:    s_mov_b32 s6, s33
575 ; GFX8-NEXT:    s_mov_b32 s33, s32
576 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
577 ; GFX8-NEXT:    s_add_i32 s7, s33, 0x101100
578 ; GFX8-NEXT:    buffer_store_dword v1, off, s[0:3], s7 ; 4-byte Folded Spill
579 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
580 ; GFX8-NEXT:    v_lshrrev_b32_e64 v0, 6, s33
581 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 64, v0
582 ; GFX8-NEXT:    v_writelane_b32 v1, s59, 0
583 ; GFX8-NEXT:    ;;#ASMSTART
584 ; GFX8-NEXT:    ; use alloca0 v0
585 ; GFX8-NEXT:    ;;#ASMEND
586 ; GFX8-NEXT:    v_lshrrev_b32_e64 v0, 6, s33
587 ; GFX8-NEXT:    s_movk_i32 s59, 0x4040
588 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s59, v0
589 ; GFX8-NEXT:    s_add_i32 s32, s32, 0x102000
590 ; GFX8-NEXT:    v_readfirstlane_b32 s59, v0
591 ; GFX8-NEXT:    s_and_b64 s[4:5], 0, exec
592 ; GFX8-NEXT:    ;;#ASMSTART
593 ; GFX8-NEXT:    ; use s59, scc
594 ; GFX8-NEXT:    ;;#ASMEND
595 ; GFX8-NEXT:    v_readlane_b32 s59, v1, 0
596 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
597 ; GFX8-NEXT:    s_add_i32 s7, s33, 0x101100
598 ; GFX8-NEXT:    buffer_load_dword v1, off, s[0:3], s7 ; 4-byte Folded Reload
599 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
600 ; GFX8-NEXT:    s_add_i32 s32, s32, 0xffefe000
601 ; GFX8-NEXT:    s_mov_b32 s33, s6
602 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
603 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
605 ; GFX900-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_fp:
606 ; GFX900:       ; %bb.0:
607 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
608 ; GFX900-NEXT:    s_mov_b32 s6, s33
609 ; GFX900-NEXT:    s_mov_b32 s33, s32
610 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
611 ; GFX900-NEXT:    s_add_i32 s7, s33, 0x101100
612 ; GFX900-NEXT:    buffer_store_dword v1, off, s[0:3], s7 ; 4-byte Folded Spill
613 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
614 ; GFX900-NEXT:    v_lshrrev_b32_e64 v0, 6, s33
615 ; GFX900-NEXT:    v_add_u32_e32 v0, 64, v0
616 ; GFX900-NEXT:    ;;#ASMSTART
617 ; GFX900-NEXT:    ; use alloca0 v0
618 ; GFX900-NEXT:    ;;#ASMEND
619 ; GFX900-NEXT:    v_lshrrev_b32_e64 v0, 6, s33
620 ; GFX900-NEXT:    v_add_u32_e32 v0, 0x4040, v0
621 ; GFX900-NEXT:    s_add_i32 s32, s32, 0x102000
622 ; GFX900-NEXT:    v_writelane_b32 v1, s59, 0
623 ; GFX900-NEXT:    v_readfirstlane_b32 s59, v0
624 ; GFX900-NEXT:    s_and_b64 s[4:5], 0, exec
625 ; GFX900-NEXT:    ;;#ASMSTART
626 ; GFX900-NEXT:    ; use s59, scc
627 ; GFX900-NEXT:    ;;#ASMEND
628 ; GFX900-NEXT:    v_readlane_b32 s59, v1, 0
629 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
630 ; GFX900-NEXT:    s_add_i32 s7, s33, 0x101100
631 ; GFX900-NEXT:    buffer_load_dword v1, off, s[0:3], s7 ; 4-byte Folded Reload
632 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
633 ; GFX900-NEXT:    s_add_i32 s32, s32, 0xffefe000
634 ; GFX900-NEXT:    s_mov_b32 s33, s6
635 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
636 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
638 ; GFX940-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_fp:
639 ; GFX940:       ; %bb.0:
640 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
641 ; GFX940-NEXT:    s_mov_b32 s2, s33
642 ; GFX940-NEXT:    s_mov_b32 s33, s32
643 ; GFX940-NEXT:    s_xor_saveexec_b64 s[0:1], -1
644 ; GFX940-NEXT:    s_add_i32 s3, s33, 0x4044
645 ; GFX940-NEXT:    scratch_store_dword off, v1, s3 sc0 sc1 ; 4-byte Folded Spill
646 ; GFX940-NEXT:    s_mov_b64 exec, s[0:1]
647 ; GFX940-NEXT:    s_addk_i32 s32, 0x4080
648 ; GFX940-NEXT:    s_add_i32 s0, s33, 64
649 ; GFX940-NEXT:    v_mov_b32_e32 v0, s0
650 ; GFX940-NEXT:    s_and_b64 s[0:1], 0, exec
651 ; GFX940-NEXT:    s_addc_u32 s0, s33, 0x4040
652 ; GFX940-NEXT:    s_bitcmp1_b32 s0, 0
653 ; GFX940-NEXT:    s_bitset0_b32 s0, 0
654 ; GFX940-NEXT:    v_writelane_b32 v1, s59, 0
655 ; GFX940-NEXT:    s_mov_b32 s59, s0
656 ; GFX940-NEXT:    ;;#ASMSTART
657 ; GFX940-NEXT:    ; use alloca0 v0
658 ; GFX940-NEXT:    ;;#ASMEND
659 ; GFX940-NEXT:    ;;#ASMSTART
660 ; GFX940-NEXT:    ; use s59, scc
661 ; GFX940-NEXT:    ;;#ASMEND
662 ; GFX940-NEXT:    v_readlane_b32 s59, v1, 0
663 ; GFX940-NEXT:    s_xor_saveexec_b64 s[0:1], -1
664 ; GFX940-NEXT:    s_add_i32 s3, s33, 0x4044
665 ; GFX940-NEXT:    scratch_load_dword v1, off, s3 ; 4-byte Folded Reload
666 ; GFX940-NEXT:    s_mov_b64 exec, s[0:1]
667 ; GFX940-NEXT:    s_addk_i32 s32, 0xbf80
668 ; GFX940-NEXT:    s_mov_b32 s33, s2
669 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
670 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
671   %alloca0 = alloca [4096 x i32], align 64, addrspace(5)
672   %alloca1 = alloca i32, align 4, addrspace(5)
673   call void asm sideeffect "; use alloca0 $0", "v"(ptr addrspace(5) %alloca0)
674   call void asm sideeffect "; use $0, $1", "{s59},{scc}"(ptr addrspace(5) %alloca1, i32 0)
675   ret void
678 define void @scalar_mov_materializes_frame_index_unavailable_scc_small_offset() #0 {
679 ; GFX10_1-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_small_offset:
680 ; GFX10_1:       ; %bb.0:
681 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
682 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
683 ; GFX10_1-NEXT:    s_add_i32 s5, s32, 0x80800
684 ; GFX10_1-NEXT:    buffer_store_dword v0, off, s[0:3], s5 ; 4-byte Folded Spill
685 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
686 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
687 ; GFX10_1-NEXT:    v_lshrrev_b32_e64 v1, 5, s32
688 ; GFX10_1-NEXT:    v_writelane_b32 v0, s59, 0
689 ; GFX10_1-NEXT:    s_and_b32 s4, 0, exec_lo
690 ; GFX10_1-NEXT:    v_add_nc_u32_e32 v1, 64, v1
691 ; GFX10_1-NEXT:    v_readfirstlane_b32 s59, v1
692 ; GFX10_1-NEXT:    ;;#ASMSTART
693 ; GFX10_1-NEXT:    ; use s59, scc
694 ; GFX10_1-NEXT:    ;;#ASMEND
695 ; GFX10_1-NEXT:    v_readlane_b32 s59, v0, 0
696 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
697 ; GFX10_1-NEXT:    s_add_i32 s5, s32, 0x80800
698 ; GFX10_1-NEXT:    buffer_load_dword v0, off, s[0:3], s5 ; 4-byte Folded Reload
699 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
700 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
701 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0)
702 ; GFX10_1-NEXT:    s_setpc_b64 s[30:31]
704 ; GFX10_3-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_small_offset:
705 ; GFX10_3:       ; %bb.0:
706 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
707 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
708 ; GFX10_3-NEXT:    s_add_i32 s5, s32, 0x80800
709 ; GFX10_3-NEXT:    buffer_store_dword v0, off, s[0:3], s5 ; 4-byte Folded Spill
710 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
711 ; GFX10_3-NEXT:    v_lshrrev_b32_e64 v1, 5, s32
712 ; GFX10_3-NEXT:    v_writelane_b32 v0, s59, 0
713 ; GFX10_3-NEXT:    s_and_b32 s4, 0, exec_lo
714 ; GFX10_3-NEXT:    v_add_nc_u32_e32 v1, 64, v1
715 ; GFX10_3-NEXT:    v_readfirstlane_b32 s59, v1
716 ; GFX10_3-NEXT:    ;;#ASMSTART
717 ; GFX10_3-NEXT:    ; use s59, scc
718 ; GFX10_3-NEXT:    ;;#ASMEND
719 ; GFX10_3-NEXT:    v_readlane_b32 s59, v0, 0
720 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
721 ; GFX10_3-NEXT:    s_add_i32 s5, s32, 0x80800
722 ; GFX10_3-NEXT:    buffer_load_dword v0, off, s[0:3], s5 ; 4-byte Folded Reload
723 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
724 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0)
725 ; GFX10_3-NEXT:    s_setpc_b64 s[30:31]
727 ; GFX11-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_small_offset:
728 ; GFX11:       ; %bb.0:
729 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
730 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
731 ; GFX11-NEXT:    s_add_i32 s1, s32, 0x4040
732 ; GFX11-NEXT:    scratch_store_b32 off, v0, s1 ; 4-byte Folded Spill
733 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
734 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
735 ; GFX11-NEXT:    s_and_b32 s0, 0, exec_lo
736 ; GFX11-NEXT:    v_writelane_b32 v0, s59, 0
737 ; GFX11-NEXT:    s_addc_u32 s0, s32, 64
738 ; GFX11-NEXT:    s_bitcmp1_b32 s0, 0
739 ; GFX11-NEXT:    s_bitset0_b32 s0, 0
740 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
741 ; GFX11-NEXT:    s_mov_b32 s59, s0
742 ; GFX11-NEXT:    ;;#ASMSTART
743 ; GFX11-NEXT:    ; use s59, scc
744 ; GFX11-NEXT:    ;;#ASMEND
745 ; GFX11-NEXT:    v_readlane_b32 s59, v0, 0
746 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
747 ; GFX11-NEXT:    s_add_i32 s1, s32, 0x4040
748 ; GFX11-NEXT:    scratch_load_b32 v0, off, s1 ; 4-byte Folded Reload
749 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
750 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
751 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
753 ; GFX12-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_small_offset:
754 ; GFX12:       ; %bb.0:
755 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
756 ; GFX12-NEXT:    s_wait_expcnt 0x0
757 ; GFX12-NEXT:    s_wait_samplecnt 0x0
758 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
759 ; GFX12-NEXT:    s_wait_kmcnt 0x0
760 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
761 ; GFX12-NEXT:    scratch_store_b32 off, v0, s32 offset:16384 ; 4-byte Folded Spill
762 ; GFX12-NEXT:    s_wait_alu 0xfffe
763 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
764 ; GFX12-NEXT:    v_writelane_b32 v0, s59, 0
765 ; GFX12-NEXT:    s_mov_b32 s59, s32
766 ; GFX12-NEXT:    s_and_b32 s0, 0, exec_lo
767 ; GFX12-NEXT:    ;;#ASMSTART
768 ; GFX12-NEXT:    ; use s59, scc
769 ; GFX12-NEXT:    ;;#ASMEND
770 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
771 ; GFX12-NEXT:    v_readlane_b32 s59, v0, 0
772 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
773 ; GFX12-NEXT:    scratch_load_b32 v0, off, s32 offset:16384 ; 4-byte Folded Reload
774 ; GFX12-NEXT:    s_wait_alu 0xfffe
775 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
776 ; GFX12-NEXT:    s_wait_loadcnt 0x0
777 ; GFX12-NEXT:    s_wait_alu 0xfffe
778 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
780 ; GFX8-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_small_offset:
781 ; GFX8:       ; %bb.0:
782 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
783 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
784 ; GFX8-NEXT:    s_add_i32 s6, s32, 0x101000
785 ; GFX8-NEXT:    buffer_store_dword v0, off, s[0:3], s6 ; 4-byte Folded Spill
786 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
787 ; GFX8-NEXT:    v_writelane_b32 v0, s59, 0
788 ; GFX8-NEXT:    v_lshrrev_b32_e64 v1, 6, s32
789 ; GFX8-NEXT:    s_mov_b32 s59, 64
790 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, s59, v1
791 ; GFX8-NEXT:    v_readfirstlane_b32 s59, v1
792 ; GFX8-NEXT:    s_and_b64 s[4:5], 0, exec
793 ; GFX8-NEXT:    ;;#ASMSTART
794 ; GFX8-NEXT:    ; use s59, scc
795 ; GFX8-NEXT:    ;;#ASMEND
796 ; GFX8-NEXT:    v_readlane_b32 s59, v0, 0
797 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
798 ; GFX8-NEXT:    s_add_i32 s6, s32, 0x101000
799 ; GFX8-NEXT:    buffer_load_dword v0, off, s[0:3], s6 ; 4-byte Folded Reload
800 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
801 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
802 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
804 ; GFX900-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_small_offset:
805 ; GFX900:       ; %bb.0:
806 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
807 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
808 ; GFX900-NEXT:    s_add_i32 s6, s32, 0x101000
809 ; GFX900-NEXT:    buffer_store_dword v0, off, s[0:3], s6 ; 4-byte Folded Spill
810 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
811 ; GFX900-NEXT:    v_lshrrev_b32_e64 v1, 6, s32
812 ; GFX900-NEXT:    v_add_u32_e32 v1, 64, v1
813 ; GFX900-NEXT:    v_writelane_b32 v0, s59, 0
814 ; GFX900-NEXT:    v_readfirstlane_b32 s59, v1
815 ; GFX900-NEXT:    s_and_b64 s[4:5], 0, exec
816 ; GFX900-NEXT:    ;;#ASMSTART
817 ; GFX900-NEXT:    ; use s59, scc
818 ; GFX900-NEXT:    ;;#ASMEND
819 ; GFX900-NEXT:    v_readlane_b32 s59, v0, 0
820 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
821 ; GFX900-NEXT:    s_add_i32 s6, s32, 0x101000
822 ; GFX900-NEXT:    buffer_load_dword v0, off, s[0:3], s6 ; 4-byte Folded Reload
823 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
824 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
825 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
827 ; GFX940-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_small_offset:
828 ; GFX940:       ; %bb.0:
829 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
830 ; GFX940-NEXT:    s_xor_saveexec_b64 s[0:1], -1
831 ; GFX940-NEXT:    s_add_i32 s2, s32, 0x4040
832 ; GFX940-NEXT:    scratch_store_dword off, v0, s2 sc0 sc1 ; 4-byte Folded Spill
833 ; GFX940-NEXT:    s_mov_b64 exec, s[0:1]
834 ; GFX940-NEXT:    s_and_b64 s[0:1], 0, exec
835 ; GFX940-NEXT:    s_addc_u32 s0, s32, 64
836 ; GFX940-NEXT:    s_bitcmp1_b32 s0, 0
837 ; GFX940-NEXT:    s_bitset0_b32 s0, 0
838 ; GFX940-NEXT:    v_writelane_b32 v0, s59, 0
839 ; GFX940-NEXT:    s_mov_b32 s59, s0
840 ; GFX940-NEXT:    ;;#ASMSTART
841 ; GFX940-NEXT:    ; use s59, scc
842 ; GFX940-NEXT:    ;;#ASMEND
843 ; GFX940-NEXT:    v_readlane_b32 s59, v0, 0
844 ; GFX940-NEXT:    s_xor_saveexec_b64 s[0:1], -1
845 ; GFX940-NEXT:    s_add_i32 s2, s32, 0x4040
846 ; GFX940-NEXT:    scratch_load_dword v0, off, s2 ; 4-byte Folded Reload
847 ; GFX940-NEXT:    s_mov_b64 exec, s[0:1]
848 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
849 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
850   %alloca0 = alloca [4096 x i32], align 64, addrspace(5)
851   call void asm sideeffect "; use $0, $1", "{s59},{scc}"(ptr addrspace(5) %alloca0, i32 0)
852   ret void
855 define void @scalar_mov_materializes_frame_index_available_scc_small_offset() #0 {
856 ; GFX10_1-LABEL: scalar_mov_materializes_frame_index_available_scc_small_offset:
857 ; GFX10_1:       ; %bb.0:
858 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
859 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
860 ; GFX10_1-NEXT:    s_add_i32 s5, s32, 0x80800
861 ; GFX10_1-NEXT:    buffer_store_dword v0, off, s[0:3], s5 ; 4-byte Folded Spill
862 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
863 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
864 ; GFX10_1-NEXT:    v_writelane_b32 v0, s59, 0
865 ; GFX10_1-NEXT:    s_lshr_b32 s59, s32, 5
866 ; GFX10_1-NEXT:    s_add_i32 s59, s59, 64
867 ; GFX10_1-NEXT:    ;;#ASMSTART
868 ; GFX10_1-NEXT:    ; use s59
869 ; GFX10_1-NEXT:    ;;#ASMEND
870 ; GFX10_1-NEXT:    v_readlane_b32 s59, v0, 0
871 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
872 ; GFX10_1-NEXT:    s_add_i32 s5, s32, 0x80800
873 ; GFX10_1-NEXT:    buffer_load_dword v0, off, s[0:3], s5 ; 4-byte Folded Reload
874 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
875 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
876 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0)
877 ; GFX10_1-NEXT:    s_setpc_b64 s[30:31]
879 ; GFX10_3-LABEL: scalar_mov_materializes_frame_index_available_scc_small_offset:
880 ; GFX10_3:       ; %bb.0:
881 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
882 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
883 ; GFX10_3-NEXT:    s_add_i32 s5, s32, 0x80800
884 ; GFX10_3-NEXT:    buffer_store_dword v0, off, s[0:3], s5 ; 4-byte Folded Spill
885 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
886 ; GFX10_3-NEXT:    v_writelane_b32 v0, s59, 0
887 ; GFX10_3-NEXT:    s_lshr_b32 s59, s32, 5
888 ; GFX10_3-NEXT:    s_add_i32 s59, s59, 64
889 ; GFX10_3-NEXT:    ;;#ASMSTART
890 ; GFX10_3-NEXT:    ; use s59
891 ; GFX10_3-NEXT:    ;;#ASMEND
892 ; GFX10_3-NEXT:    v_readlane_b32 s59, v0, 0
893 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
894 ; GFX10_3-NEXT:    s_add_i32 s5, s32, 0x80800
895 ; GFX10_3-NEXT:    buffer_load_dword v0, off, s[0:3], s5 ; 4-byte Folded Reload
896 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
897 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0)
898 ; GFX10_3-NEXT:    s_setpc_b64 s[30:31]
900 ; GFX11-LABEL: scalar_mov_materializes_frame_index_available_scc_small_offset:
901 ; GFX11:       ; %bb.0:
902 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
903 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
904 ; GFX11-NEXT:    s_add_i32 s1, s32, 0x4040
905 ; GFX11-NEXT:    scratch_store_b32 off, v0, s1 ; 4-byte Folded Spill
906 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
907 ; GFX11-NEXT:    v_writelane_b32 v0, s59, 0
908 ; GFX11-NEXT:    s_add_i32 s0, s32, 64
909 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
910 ; GFX11-NEXT:    s_mov_b32 s59, s0
911 ; GFX11-NEXT:    ;;#ASMSTART
912 ; GFX11-NEXT:    ; use s59
913 ; GFX11-NEXT:    ;;#ASMEND
914 ; GFX11-NEXT:    v_readlane_b32 s59, v0, 0
915 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
916 ; GFX11-NEXT:    s_add_i32 s1, s32, 0x4040
917 ; GFX11-NEXT:    scratch_load_b32 v0, off, s1 ; 4-byte Folded Reload
918 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
919 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
920 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
922 ; GFX12-LABEL: scalar_mov_materializes_frame_index_available_scc_small_offset:
923 ; GFX12:       ; %bb.0:
924 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
925 ; GFX12-NEXT:    s_wait_expcnt 0x0
926 ; GFX12-NEXT:    s_wait_samplecnt 0x0
927 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
928 ; GFX12-NEXT:    s_wait_kmcnt 0x0
929 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
930 ; GFX12-NEXT:    scratch_store_b32 off, v0, s32 offset:16384 ; 4-byte Folded Spill
931 ; GFX12-NEXT:    s_wait_alu 0xfffe
932 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
933 ; GFX12-NEXT:    v_writelane_b32 v0, s59, 0
934 ; GFX12-NEXT:    s_mov_b32 s59, s32
935 ; GFX12-NEXT:    ;;#ASMSTART
936 ; GFX12-NEXT:    ; use s59
937 ; GFX12-NEXT:    ;;#ASMEND
938 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
939 ; GFX12-NEXT:    v_readlane_b32 s59, v0, 0
940 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
941 ; GFX12-NEXT:    scratch_load_b32 v0, off, s32 offset:16384 ; 4-byte Folded Reload
942 ; GFX12-NEXT:    s_wait_alu 0xfffe
943 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
944 ; GFX12-NEXT:    s_wait_loadcnt 0x0
945 ; GFX12-NEXT:    s_wait_alu 0xfffe
946 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
948 ; GFX8-LABEL: scalar_mov_materializes_frame_index_available_scc_small_offset:
949 ; GFX8:       ; %bb.0:
950 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
951 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
952 ; GFX8-NEXT:    s_add_i32 s6, s32, 0x101000
953 ; GFX8-NEXT:    buffer_store_dword v0, off, s[0:3], s6 ; 4-byte Folded Spill
954 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
955 ; GFX8-NEXT:    v_writelane_b32 v0, s59, 0
956 ; GFX8-NEXT:    s_lshr_b32 s59, s32, 6
957 ; GFX8-NEXT:    s_add_i32 s59, s59, 64
958 ; GFX8-NEXT:    ;;#ASMSTART
959 ; GFX8-NEXT:    ; use s59
960 ; GFX8-NEXT:    ;;#ASMEND
961 ; GFX8-NEXT:    v_readlane_b32 s59, v0, 0
962 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
963 ; GFX8-NEXT:    s_add_i32 s6, s32, 0x101000
964 ; GFX8-NEXT:    buffer_load_dword v0, off, s[0:3], s6 ; 4-byte Folded Reload
965 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
966 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
967 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
969 ; GFX900-LABEL: scalar_mov_materializes_frame_index_available_scc_small_offset:
970 ; GFX900:       ; %bb.0:
971 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
972 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
973 ; GFX900-NEXT:    s_add_i32 s6, s32, 0x101000
974 ; GFX900-NEXT:    buffer_store_dword v0, off, s[0:3], s6 ; 4-byte Folded Spill
975 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
976 ; GFX900-NEXT:    v_writelane_b32 v0, s59, 0
977 ; GFX900-NEXT:    s_lshr_b32 s59, s32, 6
978 ; GFX900-NEXT:    s_add_i32 s59, s59, 64
979 ; GFX900-NEXT:    ;;#ASMSTART
980 ; GFX900-NEXT:    ; use s59
981 ; GFX900-NEXT:    ;;#ASMEND
982 ; GFX900-NEXT:    v_readlane_b32 s59, v0, 0
983 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
984 ; GFX900-NEXT:    s_add_i32 s6, s32, 0x101000
985 ; GFX900-NEXT:    buffer_load_dword v0, off, s[0:3], s6 ; 4-byte Folded Reload
986 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
987 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
988 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
990 ; GFX940-LABEL: scalar_mov_materializes_frame_index_available_scc_small_offset:
991 ; GFX940:       ; %bb.0:
992 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
993 ; GFX940-NEXT:    s_xor_saveexec_b64 s[0:1], -1
994 ; GFX940-NEXT:    s_add_i32 s2, s32, 0x4040
995 ; GFX940-NEXT:    scratch_store_dword off, v0, s2 sc0 sc1 ; 4-byte Folded Spill
996 ; GFX940-NEXT:    s_mov_b64 exec, s[0:1]
997 ; GFX940-NEXT:    s_add_i32 s0, s32, 64
998 ; GFX940-NEXT:    v_writelane_b32 v0, s59, 0
999 ; GFX940-NEXT:    s_mov_b32 s59, s0
1000 ; GFX940-NEXT:    ;;#ASMSTART
1001 ; GFX940-NEXT:    ; use s59
1002 ; GFX940-NEXT:    ;;#ASMEND
1003 ; GFX940-NEXT:    v_readlane_b32 s59, v0, 0
1004 ; GFX940-NEXT:    s_xor_saveexec_b64 s[0:1], -1
1005 ; GFX940-NEXT:    s_add_i32 s2, s32, 0x4040
1006 ; GFX940-NEXT:    scratch_load_dword v0, off, s2 ; 4-byte Folded Reload
1007 ; GFX940-NEXT:    s_mov_b64 exec, s[0:1]
1008 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1009 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1010   %alloca0 = alloca [4096 x i32], align 64, addrspace(5)
1011   call void asm sideeffect "; use $0", "{s59}"(ptr addrspace(5) %alloca0)
1012   ret void
1015 define void @scalar_mov_materializes_frame_index_unavailable_scc_small_offset_fp() #1 {
1016 ; GFX10_1-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_small_offset_fp:
1017 ; GFX10_1:       ; %bb.0:
1018 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1019 ; GFX10_1-NEXT:    s_mov_b32 s5, s33
1020 ; GFX10_1-NEXT:    s_mov_b32 s33, s32
1021 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
1022 ; GFX10_1-NEXT:    s_add_i32 s6, s33, 0x80800
1023 ; GFX10_1-NEXT:    buffer_store_dword v0, off, s[0:3], s6 ; 4-byte Folded Spill
1024 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
1025 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
1026 ; GFX10_1-NEXT:    v_lshrrev_b32_e64 v1, 5, s33
1027 ; GFX10_1-NEXT:    v_writelane_b32 v0, s59, 0
1028 ; GFX10_1-NEXT:    s_add_i32 s32, s32, 0x81000
1029 ; GFX10_1-NEXT:    s_and_b32 s4, 0, exec_lo
1030 ; GFX10_1-NEXT:    v_add_nc_u32_e32 v1, 64, v1
1031 ; GFX10_1-NEXT:    v_readfirstlane_b32 s59, v1
1032 ; GFX10_1-NEXT:    ;;#ASMSTART
1033 ; GFX10_1-NEXT:    ; use s59, scc
1034 ; GFX10_1-NEXT:    ;;#ASMEND
1035 ; GFX10_1-NEXT:    v_readlane_b32 s59, v0, 0
1036 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
1037 ; GFX10_1-NEXT:    s_add_i32 s6, s33, 0x80800
1038 ; GFX10_1-NEXT:    buffer_load_dword v0, off, s[0:3], s6 ; 4-byte Folded Reload
1039 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
1040 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
1041 ; GFX10_1-NEXT:    s_add_i32 s32, s32, 0xfff7f000
1042 ; GFX10_1-NEXT:    s_mov_b32 s33, s5
1043 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0)
1044 ; GFX10_1-NEXT:    s_setpc_b64 s[30:31]
1046 ; GFX10_3-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_small_offset_fp:
1047 ; GFX10_3:       ; %bb.0:
1048 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1049 ; GFX10_3-NEXT:    s_mov_b32 s5, s33
1050 ; GFX10_3-NEXT:    s_mov_b32 s33, s32
1051 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
1052 ; GFX10_3-NEXT:    s_add_i32 s6, s33, 0x80800
1053 ; GFX10_3-NEXT:    buffer_store_dword v0, off, s[0:3], s6 ; 4-byte Folded Spill
1054 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
1055 ; GFX10_3-NEXT:    v_lshrrev_b32_e64 v1, 5, s33
1056 ; GFX10_3-NEXT:    v_writelane_b32 v0, s59, 0
1057 ; GFX10_3-NEXT:    s_add_i32 s32, s32, 0x81000
1058 ; GFX10_3-NEXT:    s_and_b32 s4, 0, exec_lo
1059 ; GFX10_3-NEXT:    v_add_nc_u32_e32 v1, 64, v1
1060 ; GFX10_3-NEXT:    v_readfirstlane_b32 s59, v1
1061 ; GFX10_3-NEXT:    ;;#ASMSTART
1062 ; GFX10_3-NEXT:    ; use s59, scc
1063 ; GFX10_3-NEXT:    ;;#ASMEND
1064 ; GFX10_3-NEXT:    v_readlane_b32 s59, v0, 0
1065 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
1066 ; GFX10_3-NEXT:    s_add_i32 s6, s33, 0x80800
1067 ; GFX10_3-NEXT:    buffer_load_dword v0, off, s[0:3], s6 ; 4-byte Folded Reload
1068 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
1069 ; GFX10_3-NEXT:    s_add_i32 s32, s32, 0xfff7f000
1070 ; GFX10_3-NEXT:    s_mov_b32 s33, s5
1071 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0)
1072 ; GFX10_3-NEXT:    s_setpc_b64 s[30:31]
1074 ; GFX11-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_small_offset_fp:
1075 ; GFX11:       ; %bb.0:
1076 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1077 ; GFX11-NEXT:    s_mov_b32 s1, s33
1078 ; GFX11-NEXT:    s_mov_b32 s33, s32
1079 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
1080 ; GFX11-NEXT:    s_add_i32 s2, s33, 0x4040
1081 ; GFX11-NEXT:    scratch_store_b32 off, v0, s2 ; 4-byte Folded Spill
1082 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
1083 ; GFX11-NEXT:    s_addk_i32 s32, 0x4080
1084 ; GFX11-NEXT:    s_and_b32 s0, 0, exec_lo
1085 ; GFX11-NEXT:    v_writelane_b32 v0, s59, 0
1086 ; GFX11-NEXT:    s_addc_u32 s0, s33, 64
1087 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
1088 ; GFX11-NEXT:    s_bitcmp1_b32 s0, 0
1089 ; GFX11-NEXT:    s_bitset0_b32 s0, 0
1090 ; GFX11-NEXT:    s_mov_b32 s59, s0
1091 ; GFX11-NEXT:    ;;#ASMSTART
1092 ; GFX11-NEXT:    ; use s59, scc
1093 ; GFX11-NEXT:    ;;#ASMEND
1094 ; GFX11-NEXT:    v_readlane_b32 s59, v0, 0
1095 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
1096 ; GFX11-NEXT:    s_add_i32 s2, s33, 0x4040
1097 ; GFX11-NEXT:    scratch_load_b32 v0, off, s2 ; 4-byte Folded Reload
1098 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
1099 ; GFX11-NEXT:    s_addk_i32 s32, 0xbf80
1100 ; GFX11-NEXT:    s_mov_b32 s33, s1
1101 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1102 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1104 ; GFX12-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_small_offset_fp:
1105 ; GFX12:       ; %bb.0:
1106 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1107 ; GFX12-NEXT:    s_wait_expcnt 0x0
1108 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1109 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1110 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1111 ; GFX12-NEXT:    s_mov_b32 s1, s33
1112 ; GFX12-NEXT:    s_mov_b32 s33, s32
1113 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
1114 ; GFX12-NEXT:    scratch_store_b32 off, v0, s33 offset:16384 ; 4-byte Folded Spill
1115 ; GFX12-NEXT:    s_wait_alu 0xfffe
1116 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
1117 ; GFX12-NEXT:    v_writelane_b32 v0, s59, 0
1118 ; GFX12-NEXT:    s_addk_co_i32 s32, 0x4040
1119 ; GFX12-NEXT:    s_mov_b32 s59, s33
1120 ; GFX12-NEXT:    s_and_b32 s0, 0, exec_lo
1121 ; GFX12-NEXT:    ;;#ASMSTART
1122 ; GFX12-NEXT:    ; use s59, scc
1123 ; GFX12-NEXT:    ;;#ASMEND
1124 ; GFX12-NEXT:    v_readlane_b32 s59, v0, 0
1125 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
1126 ; GFX12-NEXT:    scratch_load_b32 v0, off, s33 offset:16384 ; 4-byte Folded Reload
1127 ; GFX12-NEXT:    s_wait_alu 0xfffe
1128 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
1129 ; GFX12-NEXT:    s_addk_co_i32 s32, 0xbfc0
1130 ; GFX12-NEXT:    s_mov_b32 s33, s1
1131 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1132 ; GFX12-NEXT:    s_wait_alu 0xfffe
1133 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1135 ; GFX8-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_small_offset_fp:
1136 ; GFX8:       ; %bb.0:
1137 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1138 ; GFX8-NEXT:    s_mov_b32 s6, s33
1139 ; GFX8-NEXT:    s_mov_b32 s33, s32
1140 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1141 ; GFX8-NEXT:    s_add_i32 s7, s33, 0x101000
1142 ; GFX8-NEXT:    buffer_store_dword v0, off, s[0:3], s7 ; 4-byte Folded Spill
1143 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
1144 ; GFX8-NEXT:    v_writelane_b32 v0, s59, 0
1145 ; GFX8-NEXT:    v_lshrrev_b32_e64 v1, 6, s33
1146 ; GFX8-NEXT:    s_mov_b32 s59, 64
1147 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, s59, v1
1148 ; GFX8-NEXT:    s_add_i32 s32, s32, 0x102000
1149 ; GFX8-NEXT:    v_readfirstlane_b32 s59, v1
1150 ; GFX8-NEXT:    s_and_b64 s[4:5], 0, exec
1151 ; GFX8-NEXT:    ;;#ASMSTART
1152 ; GFX8-NEXT:    ; use s59, scc
1153 ; GFX8-NEXT:    ;;#ASMEND
1154 ; GFX8-NEXT:    v_readlane_b32 s59, v0, 0
1155 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1156 ; GFX8-NEXT:    s_add_i32 s7, s33, 0x101000
1157 ; GFX8-NEXT:    buffer_load_dword v0, off, s[0:3], s7 ; 4-byte Folded Reload
1158 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
1159 ; GFX8-NEXT:    s_add_i32 s32, s32, 0xffefe000
1160 ; GFX8-NEXT:    s_mov_b32 s33, s6
1161 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1162 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1164 ; GFX900-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_small_offset_fp:
1165 ; GFX900:       ; %bb.0:
1166 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1167 ; GFX900-NEXT:    s_mov_b32 s6, s33
1168 ; GFX900-NEXT:    s_mov_b32 s33, s32
1169 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1170 ; GFX900-NEXT:    s_add_i32 s7, s33, 0x101000
1171 ; GFX900-NEXT:    buffer_store_dword v0, off, s[0:3], s7 ; 4-byte Folded Spill
1172 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
1173 ; GFX900-NEXT:    v_lshrrev_b32_e64 v1, 6, s33
1174 ; GFX900-NEXT:    v_add_u32_e32 v1, 64, v1
1175 ; GFX900-NEXT:    s_add_i32 s32, s32, 0x102000
1176 ; GFX900-NEXT:    v_writelane_b32 v0, s59, 0
1177 ; GFX900-NEXT:    v_readfirstlane_b32 s59, v1
1178 ; GFX900-NEXT:    s_and_b64 s[4:5], 0, exec
1179 ; GFX900-NEXT:    ;;#ASMSTART
1180 ; GFX900-NEXT:    ; use s59, scc
1181 ; GFX900-NEXT:    ;;#ASMEND
1182 ; GFX900-NEXT:    v_readlane_b32 s59, v0, 0
1183 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1184 ; GFX900-NEXT:    s_add_i32 s7, s33, 0x101000
1185 ; GFX900-NEXT:    buffer_load_dword v0, off, s[0:3], s7 ; 4-byte Folded Reload
1186 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
1187 ; GFX900-NEXT:    s_add_i32 s32, s32, 0xffefe000
1188 ; GFX900-NEXT:    s_mov_b32 s33, s6
1189 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1190 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1192 ; GFX940-LABEL: scalar_mov_materializes_frame_index_unavailable_scc_small_offset_fp:
1193 ; GFX940:       ; %bb.0:
1194 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1195 ; GFX940-NEXT:    s_mov_b32 s2, s33
1196 ; GFX940-NEXT:    s_mov_b32 s33, s32
1197 ; GFX940-NEXT:    s_xor_saveexec_b64 s[0:1], -1
1198 ; GFX940-NEXT:    s_add_i32 s3, s33, 0x4040
1199 ; GFX940-NEXT:    scratch_store_dword off, v0, s3 sc0 sc1 ; 4-byte Folded Spill
1200 ; GFX940-NEXT:    s_mov_b64 exec, s[0:1]
1201 ; GFX940-NEXT:    s_addk_i32 s32, 0x4080
1202 ; GFX940-NEXT:    s_and_b64 s[0:1], 0, exec
1203 ; GFX940-NEXT:    s_addc_u32 s0, s33, 64
1204 ; GFX940-NEXT:    s_bitcmp1_b32 s0, 0
1205 ; GFX940-NEXT:    s_bitset0_b32 s0, 0
1206 ; GFX940-NEXT:    v_writelane_b32 v0, s59, 0
1207 ; GFX940-NEXT:    s_mov_b32 s59, s0
1208 ; GFX940-NEXT:    ;;#ASMSTART
1209 ; GFX940-NEXT:    ; use s59, scc
1210 ; GFX940-NEXT:    ;;#ASMEND
1211 ; GFX940-NEXT:    v_readlane_b32 s59, v0, 0
1212 ; GFX940-NEXT:    s_xor_saveexec_b64 s[0:1], -1
1213 ; GFX940-NEXT:    s_add_i32 s3, s33, 0x4040
1214 ; GFX940-NEXT:    scratch_load_dword v0, off, s3 ; 4-byte Folded Reload
1215 ; GFX940-NEXT:    s_mov_b64 exec, s[0:1]
1216 ; GFX940-NEXT:    s_addk_i32 s32, 0xbf80
1217 ; GFX940-NEXT:    s_mov_b32 s33, s2
1218 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1219 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1220   %alloca0 = alloca [4096 x i32], align 64, addrspace(5)
1221   call void asm sideeffect "; use $0, $1", "{s59},{scc}"(ptr addrspace(5) %alloca0, i32 0)
1222   ret void
1225 define void @scalar_mov_materializes_frame_index_available_scc_small_offset_fp() #1 {
1226 ; GFX10_1-LABEL: scalar_mov_materializes_frame_index_available_scc_small_offset_fp:
1227 ; GFX10_1:       ; %bb.0:
1228 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1229 ; GFX10_1-NEXT:    s_mov_b32 s4, s33
1230 ; GFX10_1-NEXT:    s_mov_b32 s33, s32
1231 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s5, -1
1232 ; GFX10_1-NEXT:    s_add_i32 s6, s33, 0x80800
1233 ; GFX10_1-NEXT:    buffer_store_dword v0, off, s[0:3], s6 ; 4-byte Folded Spill
1234 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
1235 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s5
1236 ; GFX10_1-NEXT:    v_writelane_b32 v0, s59, 0
1237 ; GFX10_1-NEXT:    s_add_i32 s32, s32, 0x81000
1238 ; GFX10_1-NEXT:    s_lshr_b32 s59, s33, 5
1239 ; GFX10_1-NEXT:    s_add_i32 s59, s59, 64
1240 ; GFX10_1-NEXT:    ;;#ASMSTART
1241 ; GFX10_1-NEXT:    ; use s59
1242 ; GFX10_1-NEXT:    ;;#ASMEND
1243 ; GFX10_1-NEXT:    v_readlane_b32 s59, v0, 0
1244 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s5, -1
1245 ; GFX10_1-NEXT:    s_add_i32 s6, s33, 0x80800
1246 ; GFX10_1-NEXT:    buffer_load_dword v0, off, s[0:3], s6 ; 4-byte Folded Reload
1247 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
1248 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s5
1249 ; GFX10_1-NEXT:    s_add_i32 s32, s32, 0xfff7f000
1250 ; GFX10_1-NEXT:    s_mov_b32 s33, s4
1251 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0)
1252 ; GFX10_1-NEXT:    s_setpc_b64 s[30:31]
1254 ; GFX10_3-LABEL: scalar_mov_materializes_frame_index_available_scc_small_offset_fp:
1255 ; GFX10_3:       ; %bb.0:
1256 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1257 ; GFX10_3-NEXT:    s_mov_b32 s4, s33
1258 ; GFX10_3-NEXT:    s_mov_b32 s33, s32
1259 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s5, -1
1260 ; GFX10_3-NEXT:    s_add_i32 s6, s33, 0x80800
1261 ; GFX10_3-NEXT:    buffer_store_dword v0, off, s[0:3], s6 ; 4-byte Folded Spill
1262 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s5
1263 ; GFX10_3-NEXT:    v_writelane_b32 v0, s59, 0
1264 ; GFX10_3-NEXT:    s_add_i32 s32, s32, 0x81000
1265 ; GFX10_3-NEXT:    s_lshr_b32 s59, s33, 5
1266 ; GFX10_3-NEXT:    s_add_i32 s59, s59, 64
1267 ; GFX10_3-NEXT:    ;;#ASMSTART
1268 ; GFX10_3-NEXT:    ; use s59
1269 ; GFX10_3-NEXT:    ;;#ASMEND
1270 ; GFX10_3-NEXT:    v_readlane_b32 s59, v0, 0
1271 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s5, -1
1272 ; GFX10_3-NEXT:    s_add_i32 s6, s33, 0x80800
1273 ; GFX10_3-NEXT:    buffer_load_dword v0, off, s[0:3], s6 ; 4-byte Folded Reload
1274 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s5
1275 ; GFX10_3-NEXT:    s_add_i32 s32, s32, 0xfff7f000
1276 ; GFX10_3-NEXT:    s_mov_b32 s33, s4
1277 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0)
1278 ; GFX10_3-NEXT:    s_setpc_b64 s[30:31]
1280 ; GFX11-LABEL: scalar_mov_materializes_frame_index_available_scc_small_offset_fp:
1281 ; GFX11:       ; %bb.0:
1282 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1283 ; GFX11-NEXT:    s_mov_b32 s0, s33
1284 ; GFX11-NEXT:    s_mov_b32 s33, s32
1285 ; GFX11-NEXT:    s_xor_saveexec_b32 s1, -1
1286 ; GFX11-NEXT:    s_add_i32 s2, s33, 0x4040
1287 ; GFX11-NEXT:    scratch_store_b32 off, v0, s2 ; 4-byte Folded Spill
1288 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1289 ; GFX11-NEXT:    v_writelane_b32 v0, s59, 0
1290 ; GFX11-NEXT:    s_addk_i32 s32, 0x4080
1291 ; GFX11-NEXT:    s_add_i32 s1, s33, 64
1292 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1293 ; GFX11-NEXT:    s_mov_b32 s59, s1
1294 ; GFX11-NEXT:    ;;#ASMSTART
1295 ; GFX11-NEXT:    ; use s59
1296 ; GFX11-NEXT:    ;;#ASMEND
1297 ; GFX11-NEXT:    v_readlane_b32 s59, v0, 0
1298 ; GFX11-NEXT:    s_xor_saveexec_b32 s1, -1
1299 ; GFX11-NEXT:    s_add_i32 s2, s33, 0x4040
1300 ; GFX11-NEXT:    scratch_load_b32 v0, off, s2 ; 4-byte Folded Reload
1301 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1302 ; GFX11-NEXT:    s_addk_i32 s32, 0xbf80
1303 ; GFX11-NEXT:    s_mov_b32 s33, s0
1304 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1305 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1307 ; GFX12-LABEL: scalar_mov_materializes_frame_index_available_scc_small_offset_fp:
1308 ; GFX12:       ; %bb.0:
1309 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1310 ; GFX12-NEXT:    s_wait_expcnt 0x0
1311 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1312 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1313 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1314 ; GFX12-NEXT:    s_mov_b32 s0, s33
1315 ; GFX12-NEXT:    s_mov_b32 s33, s32
1316 ; GFX12-NEXT:    s_xor_saveexec_b32 s1, -1
1317 ; GFX12-NEXT:    scratch_store_b32 off, v0, s33 offset:16384 ; 4-byte Folded Spill
1318 ; GFX12-NEXT:    s_wait_alu 0xfffe
1319 ; GFX12-NEXT:    s_mov_b32 exec_lo, s1
1320 ; GFX12-NEXT:    v_writelane_b32 v0, s59, 0
1321 ; GFX12-NEXT:    s_mov_b32 s59, s33
1322 ; GFX12-NEXT:    s_addk_co_i32 s32, 0x4040
1323 ; GFX12-NEXT:    ;;#ASMSTART
1324 ; GFX12-NEXT:    ; use s59
1325 ; GFX12-NEXT:    ;;#ASMEND
1326 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1327 ; GFX12-NEXT:    v_readlane_b32 s59, v0, 0
1328 ; GFX12-NEXT:    s_xor_saveexec_b32 s1, -1
1329 ; GFX12-NEXT:    scratch_load_b32 v0, off, s33 offset:16384 ; 4-byte Folded Reload
1330 ; GFX12-NEXT:    s_wait_alu 0xfffe
1331 ; GFX12-NEXT:    s_mov_b32 exec_lo, s1
1332 ; GFX12-NEXT:    s_addk_co_i32 s32, 0xbfc0
1333 ; GFX12-NEXT:    s_mov_b32 s33, s0
1334 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1335 ; GFX12-NEXT:    s_wait_alu 0xfffe
1336 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1338 ; GFX8-LABEL: scalar_mov_materializes_frame_index_available_scc_small_offset_fp:
1339 ; GFX8:       ; %bb.0:
1340 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1341 ; GFX8-NEXT:    s_mov_b32 s4, s33
1342 ; GFX8-NEXT:    s_mov_b32 s33, s32
1343 ; GFX8-NEXT:    s_xor_saveexec_b64 s[6:7], -1
1344 ; GFX8-NEXT:    s_add_i32 s5, s33, 0x101000
1345 ; GFX8-NEXT:    buffer_store_dword v0, off, s[0:3], s5 ; 4-byte Folded Spill
1346 ; GFX8-NEXT:    s_mov_b64 exec, s[6:7]
1347 ; GFX8-NEXT:    s_add_i32 s32, s32, 0x102000
1348 ; GFX8-NEXT:    v_writelane_b32 v0, s59, 0
1349 ; GFX8-NEXT:    s_lshr_b32 s59, s33, 6
1350 ; GFX8-NEXT:    s_add_i32 s59, s59, 64
1351 ; GFX8-NEXT:    ;;#ASMSTART
1352 ; GFX8-NEXT:    ; use s59
1353 ; GFX8-NEXT:    ;;#ASMEND
1354 ; GFX8-NEXT:    v_readlane_b32 s59, v0, 0
1355 ; GFX8-NEXT:    s_xor_saveexec_b64 s[6:7], -1
1356 ; GFX8-NEXT:    s_add_i32 s5, s33, 0x101000
1357 ; GFX8-NEXT:    buffer_load_dword v0, off, s[0:3], s5 ; 4-byte Folded Reload
1358 ; GFX8-NEXT:    s_mov_b64 exec, s[6:7]
1359 ; GFX8-NEXT:    s_add_i32 s32, s32, 0xffefe000
1360 ; GFX8-NEXT:    s_mov_b32 s33, s4
1361 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1362 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1364 ; GFX900-LABEL: scalar_mov_materializes_frame_index_available_scc_small_offset_fp:
1365 ; GFX900:       ; %bb.0:
1366 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1367 ; GFX900-NEXT:    s_mov_b32 s4, s33
1368 ; GFX900-NEXT:    s_mov_b32 s33, s32
1369 ; GFX900-NEXT:    s_xor_saveexec_b64 s[6:7], -1
1370 ; GFX900-NEXT:    s_add_i32 s5, s33, 0x101000
1371 ; GFX900-NEXT:    buffer_store_dword v0, off, s[0:3], s5 ; 4-byte Folded Spill
1372 ; GFX900-NEXT:    s_mov_b64 exec, s[6:7]
1373 ; GFX900-NEXT:    s_add_i32 s32, s32, 0x102000
1374 ; GFX900-NEXT:    v_writelane_b32 v0, s59, 0
1375 ; GFX900-NEXT:    s_lshr_b32 s59, s33, 6
1376 ; GFX900-NEXT:    s_add_i32 s59, s59, 64
1377 ; GFX900-NEXT:    ;;#ASMSTART
1378 ; GFX900-NEXT:    ; use s59
1379 ; GFX900-NEXT:    ;;#ASMEND
1380 ; GFX900-NEXT:    v_readlane_b32 s59, v0, 0
1381 ; GFX900-NEXT:    s_xor_saveexec_b64 s[6:7], -1
1382 ; GFX900-NEXT:    s_add_i32 s5, s33, 0x101000
1383 ; GFX900-NEXT:    buffer_load_dword v0, off, s[0:3], s5 ; 4-byte Folded Reload
1384 ; GFX900-NEXT:    s_mov_b64 exec, s[6:7]
1385 ; GFX900-NEXT:    s_add_i32 s32, s32, 0xffefe000
1386 ; GFX900-NEXT:    s_mov_b32 s33, s4
1387 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1388 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1390 ; GFX940-LABEL: scalar_mov_materializes_frame_index_available_scc_small_offset_fp:
1391 ; GFX940:       ; %bb.0:
1392 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1393 ; GFX940-NEXT:    s_mov_b32 s0, s33
1394 ; GFX940-NEXT:    s_mov_b32 s33, s32
1395 ; GFX940-NEXT:    s_xor_saveexec_b64 s[2:3], -1
1396 ; GFX940-NEXT:    s_add_i32 s1, s33, 0x4040
1397 ; GFX940-NEXT:    scratch_store_dword off, v0, s1 sc0 sc1 ; 4-byte Folded Spill
1398 ; GFX940-NEXT:    s_mov_b64 exec, s[2:3]
1399 ; GFX940-NEXT:    s_addk_i32 s32, 0x4080
1400 ; GFX940-NEXT:    s_add_i32 s1, s33, 64
1401 ; GFX940-NEXT:    v_writelane_b32 v0, s59, 0
1402 ; GFX940-NEXT:    s_mov_b32 s59, s1
1403 ; GFX940-NEXT:    ;;#ASMSTART
1404 ; GFX940-NEXT:    ; use s59
1405 ; GFX940-NEXT:    ;;#ASMEND
1406 ; GFX940-NEXT:    v_readlane_b32 s59, v0, 0
1407 ; GFX940-NEXT:    s_xor_saveexec_b64 s[2:3], -1
1408 ; GFX940-NEXT:    s_add_i32 s1, s33, 0x4040
1409 ; GFX940-NEXT:    scratch_load_dword v0, off, s1 ; 4-byte Folded Reload
1410 ; GFX940-NEXT:    s_mov_b64 exec, s[2:3]
1411 ; GFX940-NEXT:    s_addk_i32 s32, 0xbf80
1412 ; GFX940-NEXT:    s_mov_b32 s33, s0
1413 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1414 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1415   %alloca0 = alloca [4096 x i32], align 64, addrspace(5)
1416   call void asm sideeffect "; use $0", "{s59}"(ptr addrspace(5) %alloca0)
1417   ret void
1420 define void @scalar_mov_materializes_frame_index_unavailable_scc__gep_immoffset() #0 {
1421 ; GFX10_1-LABEL: scalar_mov_materializes_frame_index_unavailable_scc__gep_immoffset:
1422 ; GFX10_1:       ; %bb.0:
1423 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1424 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
1425 ; GFX10_1-NEXT:    s_add_i32 s5, s32, 0x100800
1426 ; GFX10_1-NEXT:    buffer_store_dword v1, off, s[0:3], s5 ; 4-byte Folded Spill
1427 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
1428 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
1429 ; GFX10_1-NEXT:    v_writelane_b32 v1, s59, 0
1430 ; GFX10_1-NEXT:    v_lshrrev_b32_e64 v0, 5, s32
1431 ; GFX10_1-NEXT:    s_lshr_b32 s4, s32, 5
1432 ; GFX10_1-NEXT:    s_add_i32 s59, s4, 0x442c
1433 ; GFX10_1-NEXT:    s_and_b32 s4, 0, exec_lo
1434 ; GFX10_1-NEXT:    v_add_nc_u32_e32 v0, 64, v0
1435 ; GFX10_1-NEXT:    ;;#ASMSTART
1436 ; GFX10_1-NEXT:    ; use alloca0 v0
1437 ; GFX10_1-NEXT:    ;;#ASMEND
1438 ; GFX10_1-NEXT:    ;;#ASMSTART
1439 ; GFX10_1-NEXT:    ; use s59, scc
1440 ; GFX10_1-NEXT:    ;;#ASMEND
1441 ; GFX10_1-NEXT:    v_readlane_b32 s59, v1, 0
1442 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
1443 ; GFX10_1-NEXT:    s_add_i32 s5, s32, 0x100800
1444 ; GFX10_1-NEXT:    buffer_load_dword v1, off, s[0:3], s5 ; 4-byte Folded Reload
1445 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
1446 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
1447 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0)
1448 ; GFX10_1-NEXT:    s_setpc_b64 s[30:31]
1450 ; GFX10_3-LABEL: scalar_mov_materializes_frame_index_unavailable_scc__gep_immoffset:
1451 ; GFX10_3:       ; %bb.0:
1452 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1453 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
1454 ; GFX10_3-NEXT:    s_add_i32 s5, s32, 0x100800
1455 ; GFX10_3-NEXT:    buffer_store_dword v1, off, s[0:3], s5 ; 4-byte Folded Spill
1456 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
1457 ; GFX10_3-NEXT:    v_writelane_b32 v1, s59, 0
1458 ; GFX10_3-NEXT:    v_lshrrev_b32_e64 v0, 5, s32
1459 ; GFX10_3-NEXT:    s_lshr_b32 s4, s32, 5
1460 ; GFX10_3-NEXT:    s_add_i32 s59, s4, 0x442c
1461 ; GFX10_3-NEXT:    s_and_b32 s4, 0, exec_lo
1462 ; GFX10_3-NEXT:    v_add_nc_u32_e32 v0, 64, v0
1463 ; GFX10_3-NEXT:    ;;#ASMSTART
1464 ; GFX10_3-NEXT:    ; use alloca0 v0
1465 ; GFX10_3-NEXT:    ;;#ASMEND
1466 ; GFX10_3-NEXT:    ;;#ASMSTART
1467 ; GFX10_3-NEXT:    ; use s59, scc
1468 ; GFX10_3-NEXT:    ;;#ASMEND
1469 ; GFX10_3-NEXT:    v_readlane_b32 s59, v1, 0
1470 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
1471 ; GFX10_3-NEXT:    s_add_i32 s5, s32, 0x100800
1472 ; GFX10_3-NEXT:    buffer_load_dword v1, off, s[0:3], s5 ; 4-byte Folded Reload
1473 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
1474 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0)
1475 ; GFX10_3-NEXT:    s_setpc_b64 s[30:31]
1477 ; GFX11-LABEL: scalar_mov_materializes_frame_index_unavailable_scc__gep_immoffset:
1478 ; GFX11:       ; %bb.0:
1479 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1480 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
1481 ; GFX11-NEXT:    s_add_i32 s1, s32, 0x8040
1482 ; GFX11-NEXT:    scratch_store_b32 off, v1, s1 ; 4-byte Folded Spill
1483 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
1484 ; GFX11-NEXT:    v_writelane_b32 v1, s59, 0
1485 ; GFX11-NEXT:    s_add_i32 s0, s32, 64
1486 ; GFX11-NEXT:    s_add_i32 s59, s32, 0x442c
1487 ; GFX11-NEXT:    v_mov_b32_e32 v0, s0
1488 ; GFX11-NEXT:    s_and_b32 s0, 0, exec_lo
1489 ; GFX11-NEXT:    ;;#ASMSTART
1490 ; GFX11-NEXT:    ; use alloca0 v0
1491 ; GFX11-NEXT:    ;;#ASMEND
1492 ; GFX11-NEXT:    ;;#ASMSTART
1493 ; GFX11-NEXT:    ; use s59, scc
1494 ; GFX11-NEXT:    ;;#ASMEND
1495 ; GFX11-NEXT:    v_readlane_b32 s59, v1, 0
1496 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
1497 ; GFX11-NEXT:    s_add_i32 s1, s32, 0x8040
1498 ; GFX11-NEXT:    scratch_load_b32 v1, off, s1 ; 4-byte Folded Reload
1499 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
1500 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1501 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1503 ; GFX12-LABEL: scalar_mov_materializes_frame_index_unavailable_scc__gep_immoffset:
1504 ; GFX12:       ; %bb.0:
1505 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1506 ; GFX12-NEXT:    s_wait_expcnt 0x0
1507 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1508 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1509 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1510 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
1511 ; GFX12-NEXT:    scratch_store_b32 off, v1, s32 offset:32768 ; 4-byte Folded Spill
1512 ; GFX12-NEXT:    s_wait_alu 0xfffe
1513 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
1514 ; GFX12-NEXT:    v_writelane_b32 v1, s59, 0
1515 ; GFX12-NEXT:    s_add_co_i32 s59, s32, 0x43ec
1516 ; GFX12-NEXT:    v_mov_b32_e32 v0, s32
1517 ; GFX12-NEXT:    s_and_b32 s0, 0, exec_lo
1518 ; GFX12-NEXT:    ;;#ASMSTART
1519 ; GFX12-NEXT:    ; use alloca0 v0
1520 ; GFX12-NEXT:    ;;#ASMEND
1521 ; GFX12-NEXT:    ;;#ASMSTART
1522 ; GFX12-NEXT:    ; use s59, scc
1523 ; GFX12-NEXT:    ;;#ASMEND
1524 ; GFX12-NEXT:    v_readlane_b32 s59, v1, 0
1525 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
1526 ; GFX12-NEXT:    scratch_load_b32 v1, off, s32 offset:32768 ; 4-byte Folded Reload
1527 ; GFX12-NEXT:    s_wait_alu 0xfffe
1528 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
1529 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1530 ; GFX12-NEXT:    s_wait_alu 0xfffe
1531 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1533 ; GFX8-LABEL: scalar_mov_materializes_frame_index_unavailable_scc__gep_immoffset:
1534 ; GFX8:       ; %bb.0:
1535 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1536 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1537 ; GFX8-NEXT:    s_add_i32 s6, s32, 0x201000
1538 ; GFX8-NEXT:    buffer_store_dword v1, off, s[0:3], s6 ; 4-byte Folded Spill
1539 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
1540 ; GFX8-NEXT:    s_lshr_b32 s4, s32, 6
1541 ; GFX8-NEXT:    v_writelane_b32 v1, s59, 0
1542 ; GFX8-NEXT:    s_add_i32 s59, s4, 0x442c
1543 ; GFX8-NEXT:    v_lshrrev_b32_e64 v0, 6, s32
1544 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 64, v0
1545 ; GFX8-NEXT:    ;;#ASMSTART
1546 ; GFX8-NEXT:    ; use alloca0 v0
1547 ; GFX8-NEXT:    ;;#ASMEND
1548 ; GFX8-NEXT:    s_and_b64 s[4:5], 0, exec
1549 ; GFX8-NEXT:    ;;#ASMSTART
1550 ; GFX8-NEXT:    ; use s59, scc
1551 ; GFX8-NEXT:    ;;#ASMEND
1552 ; GFX8-NEXT:    v_readlane_b32 s59, v1, 0
1553 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1554 ; GFX8-NEXT:    s_add_i32 s6, s32, 0x201000
1555 ; GFX8-NEXT:    buffer_load_dword v1, off, s[0:3], s6 ; 4-byte Folded Reload
1556 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
1557 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1558 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1560 ; GFX900-LABEL: scalar_mov_materializes_frame_index_unavailable_scc__gep_immoffset:
1561 ; GFX900:       ; %bb.0:
1562 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1563 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1564 ; GFX900-NEXT:    s_add_i32 s6, s32, 0x201000
1565 ; GFX900-NEXT:    buffer_store_dword v1, off, s[0:3], s6 ; 4-byte Folded Spill
1566 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
1567 ; GFX900-NEXT:    s_lshr_b32 s4, s32, 6
1568 ; GFX900-NEXT:    v_writelane_b32 v1, s59, 0
1569 ; GFX900-NEXT:    s_add_i32 s59, s4, 0x442c
1570 ; GFX900-NEXT:    v_lshrrev_b32_e64 v0, 6, s32
1571 ; GFX900-NEXT:    v_add_u32_e32 v0, 64, v0
1572 ; GFX900-NEXT:    ;;#ASMSTART
1573 ; GFX900-NEXT:    ; use alloca0 v0
1574 ; GFX900-NEXT:    ;;#ASMEND
1575 ; GFX900-NEXT:    s_and_b64 s[4:5], 0, exec
1576 ; GFX900-NEXT:    ;;#ASMSTART
1577 ; GFX900-NEXT:    ; use s59, scc
1578 ; GFX900-NEXT:    ;;#ASMEND
1579 ; GFX900-NEXT:    v_readlane_b32 s59, v1, 0
1580 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1581 ; GFX900-NEXT:    s_add_i32 s6, s32, 0x201000
1582 ; GFX900-NEXT:    buffer_load_dword v1, off, s[0:3], s6 ; 4-byte Folded Reload
1583 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
1584 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1585 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1587 ; GFX940-LABEL: scalar_mov_materializes_frame_index_unavailable_scc__gep_immoffset:
1588 ; GFX940:       ; %bb.0:
1589 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1590 ; GFX940-NEXT:    s_xor_saveexec_b64 s[0:1], -1
1591 ; GFX940-NEXT:    s_add_i32 s2, s32, 0x8040
1592 ; GFX940-NEXT:    scratch_store_dword off, v1, s2 sc0 sc1 ; 4-byte Folded Spill
1593 ; GFX940-NEXT:    s_mov_b64 exec, s[0:1]
1594 ; GFX940-NEXT:    v_writelane_b32 v1, s59, 0
1595 ; GFX940-NEXT:    s_add_i32 s59, s32, 0x442c
1596 ; GFX940-NEXT:    s_add_i32 s0, s32, 64
1597 ; GFX940-NEXT:    v_mov_b32_e32 v0, s0
1598 ; GFX940-NEXT:    ;;#ASMSTART
1599 ; GFX940-NEXT:    ; use alloca0 v0
1600 ; GFX940-NEXT:    ;;#ASMEND
1601 ; GFX940-NEXT:    s_and_b64 s[0:1], 0, exec
1602 ; GFX940-NEXT:    ;;#ASMSTART
1603 ; GFX940-NEXT:    ; use s59, scc
1604 ; GFX940-NEXT:    ;;#ASMEND
1605 ; GFX940-NEXT:    v_readlane_b32 s59, v1, 0
1606 ; GFX940-NEXT:    s_xor_saveexec_b64 s[0:1], -1
1607 ; GFX940-NEXT:    s_add_i32 s2, s32, 0x8040
1608 ; GFX940-NEXT:    scratch_load_dword v1, off, s2 ; 4-byte Folded Reload
1609 ; GFX940-NEXT:    s_mov_b64 exec, s[0:1]
1610 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1611 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1612   %alloca0 = alloca [4096 x i32], align 64, addrspace(5)
1613   %alloca1 = alloca [4096 x i32], align 4, addrspace(5)
1614   %alloca1.offset = getelementptr [4096 x i32], ptr addrspace(5) %alloca1, i32 0, i32 251
1615   call void asm sideeffect "; use alloca0 $0", "v"(ptr addrspace(5) %alloca0)
1616   call void asm sideeffect "; use $0, $1", "{s59},{scc}"(ptr addrspace(5) %alloca1.offset, i32 0)
1617   ret void
1620 define void @scalar_mov_materializes_frame_index_unavailable_scc__gep_sgpr_offset(i32 inreg %soffset) #0 {
1621 ; GFX10_1-LABEL: scalar_mov_materializes_frame_index_unavailable_scc__gep_sgpr_offset:
1622 ; GFX10_1:       ; %bb.0:
1623 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1624 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
1625 ; GFX10_1-NEXT:    s_add_i32 s5, s32, 0x100800
1626 ; GFX10_1-NEXT:    buffer_store_dword v1, off, s[0:3], s5 ; 4-byte Folded Spill
1627 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
1628 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
1629 ; GFX10_1-NEXT:    v_writelane_b32 v1, s59, 0
1630 ; GFX10_1-NEXT:    v_lshrrev_b32_e64 v0, 5, s32
1631 ; GFX10_1-NEXT:    s_lshl_b32 s4, s16, 2
1632 ; GFX10_1-NEXT:    s_lshr_b32 s59, s32, 5
1633 ; GFX10_1-NEXT:    s_add_i32 s59, s59, s4
1634 ; GFX10_1-NEXT:    v_add_nc_u32_e32 v0, 64, v0
1635 ; GFX10_1-NEXT:    s_addk_i32 s59, 0x4040
1636 ; GFX10_1-NEXT:    ;;#ASMSTART
1637 ; GFX10_1-NEXT:    ; use alloca0 v0
1638 ; GFX10_1-NEXT:    ;;#ASMEND
1639 ; GFX10_1-NEXT:    s_and_b32 s4, 0, exec_lo
1640 ; GFX10_1-NEXT:    ;;#ASMSTART
1641 ; GFX10_1-NEXT:    ; use s59, scc
1642 ; GFX10_1-NEXT:    ;;#ASMEND
1643 ; GFX10_1-NEXT:    v_readlane_b32 s59, v1, 0
1644 ; GFX10_1-NEXT:    s_xor_saveexec_b32 s4, -1
1645 ; GFX10_1-NEXT:    s_add_i32 s5, s32, 0x100800
1646 ; GFX10_1-NEXT:    buffer_load_dword v1, off, s[0:3], s5 ; 4-byte Folded Reload
1647 ; GFX10_1-NEXT:    s_waitcnt_depctr 0xffe3
1648 ; GFX10_1-NEXT:    s_mov_b32 exec_lo, s4
1649 ; GFX10_1-NEXT:    s_waitcnt vmcnt(0)
1650 ; GFX10_1-NEXT:    s_setpc_b64 s[30:31]
1652 ; GFX10_3-LABEL: scalar_mov_materializes_frame_index_unavailable_scc__gep_sgpr_offset:
1653 ; GFX10_3:       ; %bb.0:
1654 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1655 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
1656 ; GFX10_3-NEXT:    s_add_i32 s5, s32, 0x100800
1657 ; GFX10_3-NEXT:    buffer_store_dword v1, off, s[0:3], s5 ; 4-byte Folded Spill
1658 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
1659 ; GFX10_3-NEXT:    v_writelane_b32 v1, s59, 0
1660 ; GFX10_3-NEXT:    v_lshrrev_b32_e64 v0, 5, s32
1661 ; GFX10_3-NEXT:    s_lshl_b32 s4, s16, 2
1662 ; GFX10_3-NEXT:    s_lshr_b32 s59, s32, 5
1663 ; GFX10_3-NEXT:    s_add_i32 s59, s59, s4
1664 ; GFX10_3-NEXT:    v_add_nc_u32_e32 v0, 64, v0
1665 ; GFX10_3-NEXT:    s_addk_i32 s59, 0x4040
1666 ; GFX10_3-NEXT:    ;;#ASMSTART
1667 ; GFX10_3-NEXT:    ; use alloca0 v0
1668 ; GFX10_3-NEXT:    ;;#ASMEND
1669 ; GFX10_3-NEXT:    s_and_b32 s4, 0, exec_lo
1670 ; GFX10_3-NEXT:    ;;#ASMSTART
1671 ; GFX10_3-NEXT:    ; use s59, scc
1672 ; GFX10_3-NEXT:    ;;#ASMEND
1673 ; GFX10_3-NEXT:    v_readlane_b32 s59, v1, 0
1674 ; GFX10_3-NEXT:    s_xor_saveexec_b32 s4, -1
1675 ; GFX10_3-NEXT:    s_add_i32 s5, s32, 0x100800
1676 ; GFX10_3-NEXT:    buffer_load_dword v1, off, s[0:3], s5 ; 4-byte Folded Reload
1677 ; GFX10_3-NEXT:    s_mov_b32 exec_lo, s4
1678 ; GFX10_3-NEXT:    s_waitcnt vmcnt(0)
1679 ; GFX10_3-NEXT:    s_setpc_b64 s[30:31]
1681 ; GFX11-LABEL: scalar_mov_materializes_frame_index_unavailable_scc__gep_sgpr_offset:
1682 ; GFX11:       ; %bb.0:
1683 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1684 ; GFX11-NEXT:    s_xor_saveexec_b32 s1, -1
1685 ; GFX11-NEXT:    s_add_i32 s2, s32, 0x8040
1686 ; GFX11-NEXT:    scratch_store_b32 off, v1, s2 ; 4-byte Folded Spill
1687 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
1688 ; GFX11-NEXT:    s_add_i32 s1, s32, 64
1689 ; GFX11-NEXT:    v_writelane_b32 v1, s59, 0
1690 ; GFX11-NEXT:    s_lshl_b32 s0, s0, 2
1691 ; GFX11-NEXT:    v_mov_b32_e32 v0, s1
1692 ; GFX11-NEXT:    s_add_i32 s59, s32, s0
1693 ; GFX11-NEXT:    ;;#ASMSTART
1694 ; GFX11-NEXT:    ; use alloca0 v0
1695 ; GFX11-NEXT:    ;;#ASMEND
1696 ; GFX11-NEXT:    s_addk_i32 s59, 0x4040
1697 ; GFX11-NEXT:    s_and_b32 s0, 0, exec_lo
1698 ; GFX11-NEXT:    ;;#ASMSTART
1699 ; GFX11-NEXT:    ; use s59, scc
1700 ; GFX11-NEXT:    ;;#ASMEND
1701 ; GFX11-NEXT:    v_readlane_b32 s59, v1, 0
1702 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
1703 ; GFX11-NEXT:    s_add_i32 s1, s32, 0x8040
1704 ; GFX11-NEXT:    scratch_load_b32 v1, off, s1 ; 4-byte Folded Reload
1705 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
1706 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1707 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1709 ; GFX12-LABEL: scalar_mov_materializes_frame_index_unavailable_scc__gep_sgpr_offset:
1710 ; GFX12:       ; %bb.0:
1711 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1712 ; GFX12-NEXT:    s_wait_expcnt 0x0
1713 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1714 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1715 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1716 ; GFX12-NEXT:    s_xor_saveexec_b32 s1, -1
1717 ; GFX12-NEXT:    scratch_store_b32 off, v1, s32 offset:32768 ; 4-byte Folded Spill
1718 ; GFX12-NEXT:    s_wait_alu 0xfffe
1719 ; GFX12-NEXT:    s_mov_b32 exec_lo, s1
1720 ; GFX12-NEXT:    v_writelane_b32 v1, s59, 0
1721 ; GFX12-NEXT:    s_lshl_b32 s0, s0, 2
1722 ; GFX12-NEXT:    v_mov_b32_e32 v0, s32
1723 ; GFX12-NEXT:    s_wait_alu 0xfffe
1724 ; GFX12-NEXT:    s_add_co_i32 s59, s32, s0
1725 ; GFX12-NEXT:    ;;#ASMSTART
1726 ; GFX12-NEXT:    ; use alloca0 v0
1727 ; GFX12-NEXT:    ;;#ASMEND
1728 ; GFX12-NEXT:    s_wait_alu 0xfffe
1729 ; GFX12-NEXT:    s_addk_co_i32 s59, 0x4000
1730 ; GFX12-NEXT:    s_and_b32 s0, 0, exec_lo
1731 ; GFX12-NEXT:    ;;#ASMSTART
1732 ; GFX12-NEXT:    ; use s59, scc
1733 ; GFX12-NEXT:    ;;#ASMEND
1734 ; GFX12-NEXT:    v_readlane_b32 s59, v1, 0
1735 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
1736 ; GFX12-NEXT:    scratch_load_b32 v1, off, s32 offset:32768 ; 4-byte Folded Reload
1737 ; GFX12-NEXT:    s_wait_alu 0xfffe
1738 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
1739 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1740 ; GFX12-NEXT:    s_wait_alu 0xfffe
1741 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1743 ; GFX8-LABEL: scalar_mov_materializes_frame_index_unavailable_scc__gep_sgpr_offset:
1744 ; GFX8:       ; %bb.0:
1745 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1746 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1747 ; GFX8-NEXT:    s_add_i32 s6, s32, 0x201000
1748 ; GFX8-NEXT:    buffer_store_dword v1, off, s[0:3], s6 ; 4-byte Folded Spill
1749 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
1750 ; GFX8-NEXT:    v_writelane_b32 v1, s59, 0
1751 ; GFX8-NEXT:    s_lshl_b32 s4, s16, 2
1752 ; GFX8-NEXT:    s_lshr_b32 s59, s32, 6
1753 ; GFX8-NEXT:    s_add_i32 s59, s59, s4
1754 ; GFX8-NEXT:    s_addk_i32 s59, 0x4040
1755 ; GFX8-NEXT:    v_lshrrev_b32_e64 v0, 6, s32
1756 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 64, v0
1757 ; GFX8-NEXT:    ;;#ASMSTART
1758 ; GFX8-NEXT:    ; use alloca0 v0
1759 ; GFX8-NEXT:    ;;#ASMEND
1760 ; GFX8-NEXT:    s_and_b64 s[4:5], 0, exec
1761 ; GFX8-NEXT:    ;;#ASMSTART
1762 ; GFX8-NEXT:    ; use s59, scc
1763 ; GFX8-NEXT:    ;;#ASMEND
1764 ; GFX8-NEXT:    v_readlane_b32 s59, v1, 0
1765 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1766 ; GFX8-NEXT:    s_add_i32 s6, s32, 0x201000
1767 ; GFX8-NEXT:    buffer_load_dword v1, off, s[0:3], s6 ; 4-byte Folded Reload
1768 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
1769 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1770 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1772 ; GFX900-LABEL: scalar_mov_materializes_frame_index_unavailable_scc__gep_sgpr_offset:
1773 ; GFX900:       ; %bb.0:
1774 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1775 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1776 ; GFX900-NEXT:    s_add_i32 s6, s32, 0x201000
1777 ; GFX900-NEXT:    buffer_store_dword v1, off, s[0:3], s6 ; 4-byte Folded Spill
1778 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
1779 ; GFX900-NEXT:    v_writelane_b32 v1, s59, 0
1780 ; GFX900-NEXT:    s_lshl_b32 s4, s16, 2
1781 ; GFX900-NEXT:    s_lshr_b32 s59, s32, 6
1782 ; GFX900-NEXT:    s_add_i32 s59, s59, s4
1783 ; GFX900-NEXT:    s_addk_i32 s59, 0x4040
1784 ; GFX900-NEXT:    v_lshrrev_b32_e64 v0, 6, s32
1785 ; GFX900-NEXT:    v_add_u32_e32 v0, 64, v0
1786 ; GFX900-NEXT:    ;;#ASMSTART
1787 ; GFX900-NEXT:    ; use alloca0 v0
1788 ; GFX900-NEXT:    ;;#ASMEND
1789 ; GFX900-NEXT:    s_and_b64 s[4:5], 0, exec
1790 ; GFX900-NEXT:    ;;#ASMSTART
1791 ; GFX900-NEXT:    ; use s59, scc
1792 ; GFX900-NEXT:    ;;#ASMEND
1793 ; GFX900-NEXT:    v_readlane_b32 s59, v1, 0
1794 ; GFX900-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1795 ; GFX900-NEXT:    s_add_i32 s6, s32, 0x201000
1796 ; GFX900-NEXT:    buffer_load_dword v1, off, s[0:3], s6 ; 4-byte Folded Reload
1797 ; GFX900-NEXT:    s_mov_b64 exec, s[4:5]
1798 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1799 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1801 ; GFX940-LABEL: scalar_mov_materializes_frame_index_unavailable_scc__gep_sgpr_offset:
1802 ; GFX940:       ; %bb.0:
1803 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1804 ; GFX940-NEXT:    s_xor_saveexec_b64 s[2:3], -1
1805 ; GFX940-NEXT:    s_add_i32 s1, s32, 0x8040
1806 ; GFX940-NEXT:    scratch_store_dword off, v1, s1 sc0 sc1 ; 4-byte Folded Spill
1807 ; GFX940-NEXT:    s_mov_b64 exec, s[2:3]
1808 ; GFX940-NEXT:    s_lshl_b32 s0, s0, 2
1809 ; GFX940-NEXT:    v_writelane_b32 v1, s59, 0
1810 ; GFX940-NEXT:    s_add_i32 s59, s32, s0
1811 ; GFX940-NEXT:    s_addk_i32 s59, 0x4040
1812 ; GFX940-NEXT:    s_add_i32 s0, s32, 64
1813 ; GFX940-NEXT:    v_mov_b32_e32 v0, s0
1814 ; GFX940-NEXT:    ;;#ASMSTART
1815 ; GFX940-NEXT:    ; use alloca0 v0
1816 ; GFX940-NEXT:    ;;#ASMEND
1817 ; GFX940-NEXT:    s_and_b64 s[0:1], 0, exec
1818 ; GFX940-NEXT:    ;;#ASMSTART
1819 ; GFX940-NEXT:    ; use s59, scc
1820 ; GFX940-NEXT:    ;;#ASMEND
1821 ; GFX940-NEXT:    v_readlane_b32 s59, v1, 0
1822 ; GFX940-NEXT:    s_xor_saveexec_b64 s[0:1], -1
1823 ; GFX940-NEXT:    s_add_i32 s2, s32, 0x8040
1824 ; GFX940-NEXT:    scratch_load_dword v1, off, s2 ; 4-byte Folded Reload
1825 ; GFX940-NEXT:    s_mov_b64 exec, s[0:1]
1826 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1827 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1828   %alloca0 = alloca [4096 x i32], align 64, addrspace(5)
1829   %alloca1 = alloca [4096 x i32], align 4, addrspace(5)
1830   %alloca1.offset = getelementptr [4096 x i32], ptr addrspace(5) %alloca1, i32 0, i32 %soffset
1831   call void asm sideeffect "; use alloca0 $0", "v"(ptr addrspace(5) %alloca0)
1832   call void asm sideeffect "; use $0, $1", "{s59},{scc}"(ptr addrspace(5) %alloca1.offset, i32 0)
1833   ret void
1836 attributes #0 = { nounwind alignstack=64 "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "amdgpu-waves-per-eu"="10,10" "no-realign-stack" }
1837 attributes #1 = { nounwind alignstack=64 "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "amdgpu-waves-per-eu"="10,10" "no-realign-stack" "frame-pointer"="all" }
1838 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
1839 ; GFX9: {{.*}}