[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / scc-clobbered-sgpr-to-vmem-spill.ll
blob0ad10437299f48e5ef5c556609eb8078e3c21ac2
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck %s
4 ; This was a negative test to catch an extreme case when all options are exhausted
5 ; while trying to spill SGPRs to memory. After we enabled SGPR spills into virtual VGPRs
6 ; the edge case won't arise and the test would always compile.
8 define amdgpu_kernel void @kernel0(ptr addrspace(1) %out, i32 %in) #1 {
9 ; CHECK-LABEL: kernel0:
10 ; CHECK:       ; %bb.0:
11 ; CHECK-NEXT:    ;;#ASMSTART
12 ; CHECK-NEXT:    ;;#ASMEND
13 ; CHECK-NEXT:    ;;#ASMSTART
14 ; CHECK-NEXT:    ;;#ASMEND
15 ; CHECK-NEXT:    ;;#ASMSTART
16 ; CHECK-NEXT:    ;;#ASMEND
17 ; CHECK-NEXT:    ;;#ASMSTART
18 ; CHECK-NEXT:    ;;#ASMEND
19 ; CHECK-NEXT:    ;;#ASMSTART
20 ; CHECK-NEXT:    ; def s[2:3]
21 ; CHECK-NEXT:    ;;#ASMEND
22 ; CHECK-NEXT:    ; implicit-def: $vgpr22 : SGPR spill to VGPR lane
23 ; CHECK-NEXT:    ;;#ASMSTART
24 ; CHECK-NEXT:    ; def s[4:7]
25 ; CHECK-NEXT:    ;;#ASMEND
26 ; CHECK-NEXT:    v_writelane_b32 v22, s2, 0
27 ; CHECK-NEXT:    v_writelane_b32 v22, s3, 1
28 ; CHECK-NEXT:    v_writelane_b32 v22, s4, 2
29 ; CHECK-NEXT:    v_writelane_b32 v22, s5, 3
30 ; CHECK-NEXT:    v_writelane_b32 v22, s6, 4
31 ; CHECK-NEXT:    s_load_dword s0, s[8:9], 0x8
32 ; CHECK-NEXT:    v_writelane_b32 v22, s7, 5
33 ; CHECK-NEXT:    ;;#ASMSTART
34 ; CHECK-NEXT:    ; def s[4:11]
35 ; CHECK-NEXT:    ;;#ASMEND
36 ; CHECK-NEXT:    v_writelane_b32 v22, s4, 6
37 ; CHECK-NEXT:    v_writelane_b32 v22, s5, 7
38 ; CHECK-NEXT:    v_writelane_b32 v22, s6, 8
39 ; CHECK-NEXT:    v_writelane_b32 v22, s7, 9
40 ; CHECK-NEXT:    v_writelane_b32 v22, s8, 10
41 ; CHECK-NEXT:    v_writelane_b32 v22, s9, 11
42 ; CHECK-NEXT:    v_writelane_b32 v22, s10, 12
43 ; CHECK-NEXT:    v_writelane_b32 v22, s11, 13
44 ; CHECK-NEXT:    ;;#ASMSTART
45 ; CHECK-NEXT:    ; def s[4:19]
46 ; CHECK-NEXT:    ;;#ASMEND
47 ; CHECK-NEXT:    v_writelane_b32 v22, s4, 14
48 ; CHECK-NEXT:    v_writelane_b32 v22, s5, 15
49 ; CHECK-NEXT:    v_writelane_b32 v22, s6, 16
50 ; CHECK-NEXT:    v_writelane_b32 v22, s7, 17
51 ; CHECK-NEXT:    v_writelane_b32 v22, s8, 18
52 ; CHECK-NEXT:    v_writelane_b32 v22, s9, 19
53 ; CHECK-NEXT:    v_writelane_b32 v22, s10, 20
54 ; CHECK-NEXT:    v_writelane_b32 v22, s11, 21
55 ; CHECK-NEXT:    v_writelane_b32 v22, s12, 22
56 ; CHECK-NEXT:    v_writelane_b32 v22, s13, 23
57 ; CHECK-NEXT:    v_writelane_b32 v22, s14, 24
58 ; CHECK-NEXT:    v_writelane_b32 v22, s15, 25
59 ; CHECK-NEXT:    v_writelane_b32 v22, s16, 26
60 ; CHECK-NEXT:    v_writelane_b32 v22, s17, 27
61 ; CHECK-NEXT:    v_writelane_b32 v22, s18, 28
62 ; CHECK-NEXT:    v_writelane_b32 v22, s19, 29
63 ; CHECK-NEXT:    ;;#ASMSTART
64 ; CHECK-NEXT:    ; def s[42:43]
65 ; CHECK-NEXT:    ;;#ASMEND
66 ; CHECK-NEXT:    ;;#ASMSTART
67 ; CHECK-NEXT:    ; def s[52:55]
68 ; CHECK-NEXT:    ;;#ASMEND
69 ; CHECK-NEXT:    ;;#ASMSTART
70 ; CHECK-NEXT:    ; def s[4:11]
71 ; CHECK-NEXT:    ;;#ASMEND
72 ; CHECK-NEXT:    v_writelane_b32 v22, s4, 30
73 ; CHECK-NEXT:    v_writelane_b32 v22, s5, 31
74 ; CHECK-NEXT:    v_writelane_b32 v22, s6, 32
75 ; CHECK-NEXT:    v_writelane_b32 v22, s7, 33
76 ; CHECK-NEXT:    v_writelane_b32 v22, s8, 34
77 ; CHECK-NEXT:    v_writelane_b32 v22, s9, 35
78 ; CHECK-NEXT:    v_writelane_b32 v22, s10, 36
79 ; CHECK-NEXT:    v_writelane_b32 v22, s11, 37
80 ; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
81 ; CHECK-NEXT:    s_cmp_lg_u32 s0, 0
82 ; CHECK-NEXT:    ;;#ASMSTART
83 ; CHECK-NEXT:    ; def s[16:31]
84 ; CHECK-NEXT:    ;;#ASMEND
85 ; CHECK-NEXT:    ;;#ASMSTART
86 ; CHECK-NEXT:    ; def s[40:41]
87 ; CHECK-NEXT:    ;;#ASMEND
88 ; CHECK-NEXT:    ;;#ASMSTART
89 ; CHECK-NEXT:    ; def s[36:39]
90 ; CHECK-NEXT:    ;;#ASMEND
91 ; CHECK-NEXT:    ;;#ASMSTART
92 ; CHECK-NEXT:    ; def s[44:51]
93 ; CHECK-NEXT:    ;;#ASMEND
94 ; CHECK-NEXT:    ;;#ASMSTART
95 ; CHECK-NEXT:    ; def s[0:15]
96 ; CHECK-NEXT:    ;;#ASMEND
97 ; CHECK-NEXT:    v_writelane_b32 v22, s0, 38
98 ; CHECK-NEXT:    v_writelane_b32 v22, s1, 39
99 ; CHECK-NEXT:    v_writelane_b32 v22, s2, 40
100 ; CHECK-NEXT:    v_writelane_b32 v22, s3, 41
101 ; CHECK-NEXT:    v_writelane_b32 v22, s4, 42
102 ; CHECK-NEXT:    v_writelane_b32 v22, s5, 43
103 ; CHECK-NEXT:    v_writelane_b32 v22, s6, 44
104 ; CHECK-NEXT:    v_writelane_b32 v22, s7, 45
105 ; CHECK-NEXT:    v_writelane_b32 v22, s8, 46
106 ; CHECK-NEXT:    v_writelane_b32 v22, s9, 47
107 ; CHECK-NEXT:    v_writelane_b32 v22, s10, 48
108 ; CHECK-NEXT:    v_writelane_b32 v22, s11, 49
109 ; CHECK-NEXT:    v_writelane_b32 v22, s12, 50
110 ; CHECK-NEXT:    v_writelane_b32 v22, s13, 51
111 ; CHECK-NEXT:    v_writelane_b32 v22, s14, 52
112 ; CHECK-NEXT:    v_writelane_b32 v22, s15, 53
113 ; CHECK-NEXT:    ;;#ASMSTART
114 ; CHECK-NEXT:    ; def s[34:35]
115 ; CHECK-NEXT:    ;;#ASMEND
116 ; CHECK-NEXT:    ;;#ASMSTART
117 ; CHECK-NEXT:    ; def s[0:3]
118 ; CHECK-NEXT:    ;;#ASMEND
119 ; CHECK-NEXT:    v_writelane_b32 v22, s0, 54
120 ; CHECK-NEXT:    v_writelane_b32 v22, s1, 55
121 ; CHECK-NEXT:    v_writelane_b32 v22, s2, 56
122 ; CHECK-NEXT:    v_writelane_b32 v22, s3, 57
123 ; CHECK-NEXT:    ;;#ASMSTART
124 ; CHECK-NEXT:    ; def s[0:7]
125 ; CHECK-NEXT:    ;;#ASMEND
126 ; CHECK-NEXT:    v_writelane_b32 v22, s0, 58
127 ; CHECK-NEXT:    v_writelane_b32 v22, s1, 59
128 ; CHECK-NEXT:    v_writelane_b32 v22, s2, 60
129 ; CHECK-NEXT:    ; implicit-def: $vgpr23 : SGPR spill to VGPR lane
130 ; CHECK-NEXT:    v_writelane_b32 v22, s3, 61
131 ; CHECK-NEXT:    v_writelane_b32 v22, s4, 62
132 ; CHECK-NEXT:    v_writelane_b32 v23, s6, 0
133 ; CHECK-NEXT:    v_writelane_b32 v22, s5, 63
134 ; CHECK-NEXT:    v_writelane_b32 v23, s7, 1
135 ; CHECK-NEXT:    ;;#ASMSTART
136 ; CHECK-NEXT:    ; def s[0:15]
137 ; CHECK-NEXT:    ;;#ASMEND
138 ; CHECK-NEXT:    v_writelane_b32 v23, s0, 2
139 ; CHECK-NEXT:    v_writelane_b32 v23, s1, 3
140 ; CHECK-NEXT:    v_writelane_b32 v23, s2, 4
141 ; CHECK-NEXT:    v_writelane_b32 v23, s3, 5
142 ; CHECK-NEXT:    v_writelane_b32 v23, s4, 6
143 ; CHECK-NEXT:    v_writelane_b32 v23, s5, 7
144 ; CHECK-NEXT:    v_writelane_b32 v23, s6, 8
145 ; CHECK-NEXT:    v_writelane_b32 v23, s7, 9
146 ; CHECK-NEXT:    v_writelane_b32 v23, s8, 10
147 ; CHECK-NEXT:    v_writelane_b32 v23, s9, 11
148 ; CHECK-NEXT:    v_writelane_b32 v23, s10, 12
149 ; CHECK-NEXT:    v_writelane_b32 v23, s11, 13
150 ; CHECK-NEXT:    v_writelane_b32 v23, s12, 14
151 ; CHECK-NEXT:    v_writelane_b32 v23, s13, 15
152 ; CHECK-NEXT:    v_writelane_b32 v23, s14, 16
153 ; CHECK-NEXT:    v_writelane_b32 v23, s15, 17
154 ; CHECK-NEXT:    ;;#ASMSTART
155 ; CHECK-NEXT:    ; def s[0:1]
156 ; CHECK-NEXT:    ;;#ASMEND
157 ; CHECK-NEXT:    v_writelane_b32 v23, s0, 18
158 ; CHECK-NEXT:    v_writelane_b32 v23, s1, 19
159 ; CHECK-NEXT:    ;;#ASMSTART
160 ; CHECK-NEXT:    ; def s[0:3]
161 ; CHECK-NEXT:    ;;#ASMEND
162 ; CHECK-NEXT:    v_writelane_b32 v23, s0, 20
163 ; CHECK-NEXT:    v_writelane_b32 v23, s1, 21
164 ; CHECK-NEXT:    v_writelane_b32 v23, s2, 22
165 ; CHECK-NEXT:    v_writelane_b32 v23, s3, 23
166 ; CHECK-NEXT:    ;;#ASMSTART
167 ; CHECK-NEXT:    ; def s[0:7]
168 ; CHECK-NEXT:    ;;#ASMEND
169 ; CHECK-NEXT:    v_writelane_b32 v23, s0, 24
170 ; CHECK-NEXT:    v_writelane_b32 v23, s1, 25
171 ; CHECK-NEXT:    v_writelane_b32 v23, s2, 26
172 ; CHECK-NEXT:    v_writelane_b32 v23, s3, 27
173 ; CHECK-NEXT:    v_writelane_b32 v23, s4, 28
174 ; CHECK-NEXT:    v_writelane_b32 v23, s5, 29
175 ; CHECK-NEXT:    v_writelane_b32 v23, s6, 30
176 ; CHECK-NEXT:    v_writelane_b32 v23, s7, 31
177 ; CHECK-NEXT:    ;;#ASMSTART
178 ; CHECK-NEXT:    ; def s[0:15]
179 ; CHECK-NEXT:    ;;#ASMEND
180 ; CHECK-NEXT:    v_writelane_b32 v23, s0, 32
181 ; CHECK-NEXT:    v_writelane_b32 v23, s1, 33
182 ; CHECK-NEXT:    v_writelane_b32 v23, s2, 34
183 ; CHECK-NEXT:    v_writelane_b32 v23, s3, 35
184 ; CHECK-NEXT:    v_writelane_b32 v23, s4, 36
185 ; CHECK-NEXT:    v_writelane_b32 v23, s5, 37
186 ; CHECK-NEXT:    v_writelane_b32 v23, s6, 38
187 ; CHECK-NEXT:    v_writelane_b32 v23, s7, 39
188 ; CHECK-NEXT:    v_writelane_b32 v23, s8, 40
189 ; CHECK-NEXT:    v_writelane_b32 v23, s9, 41
190 ; CHECK-NEXT:    v_writelane_b32 v23, s10, 42
191 ; CHECK-NEXT:    v_writelane_b32 v23, s11, 43
192 ; CHECK-NEXT:    v_writelane_b32 v23, s12, 44
193 ; CHECK-NEXT:    v_writelane_b32 v23, s13, 45
194 ; CHECK-NEXT:    v_writelane_b32 v23, s14, 46
195 ; CHECK-NEXT:    v_writelane_b32 v23, s15, 47
196 ; CHECK-NEXT:    s_cbranch_scc0 .LBB0_2
197 ; CHECK-NEXT:  ; %bb.1: ; %ret
198 ; CHECK-NEXT:    s_endpgm
199 ; CHECK-NEXT:  .LBB0_2: ; %bb0
200 ; CHECK-NEXT:    v_readlane_b32 s0, v22, 0
201 ; CHECK-NEXT:    v_readlane_b32 s1, v22, 1
202 ; CHECK-NEXT:    ;;#ASMSTART
203 ; CHECK-NEXT:    ; use s[0:1]
204 ; CHECK-NEXT:    ;;#ASMEND
205 ; CHECK-NEXT:    v_readlane_b32 s0, v22, 2
206 ; CHECK-NEXT:    v_readlane_b32 s1, v22, 3
207 ; CHECK-NEXT:    v_readlane_b32 s2, v22, 4
208 ; CHECK-NEXT:    v_readlane_b32 s3, v22, 5
209 ; CHECK-NEXT:    ;;#ASMSTART
210 ; CHECK-NEXT:    ; use s[0:3]
211 ; CHECK-NEXT:    ;;#ASMEND
212 ; CHECK-NEXT:    v_readlane_b32 s0, v22, 6
213 ; CHECK-NEXT:    v_readlane_b32 s1, v22, 7
214 ; CHECK-NEXT:    v_readlane_b32 s2, v22, 8
215 ; CHECK-NEXT:    v_readlane_b32 s3, v22, 9
216 ; CHECK-NEXT:    v_readlane_b32 s4, v22, 10
217 ; CHECK-NEXT:    v_readlane_b32 s5, v22, 11
218 ; CHECK-NEXT:    v_readlane_b32 s6, v22, 12
219 ; CHECK-NEXT:    v_readlane_b32 s7, v22, 13
220 ; CHECK-NEXT:    ;;#ASMSTART
221 ; CHECK-NEXT:    ; use s[0:7]
222 ; CHECK-NEXT:    ;;#ASMEND
223 ; CHECK-NEXT:    v_readlane_b32 s0, v22, 14
224 ; CHECK-NEXT:    v_readlane_b32 s1, v22, 15
225 ; CHECK-NEXT:    v_readlane_b32 s2, v22, 16
226 ; CHECK-NEXT:    v_readlane_b32 s3, v22, 17
227 ; CHECK-NEXT:    v_readlane_b32 s4, v22, 18
228 ; CHECK-NEXT:    v_readlane_b32 s5, v22, 19
229 ; CHECK-NEXT:    v_readlane_b32 s6, v22, 20
230 ; CHECK-NEXT:    v_readlane_b32 s7, v22, 21
231 ; CHECK-NEXT:    v_readlane_b32 s8, v22, 22
232 ; CHECK-NEXT:    v_readlane_b32 s9, v22, 23
233 ; CHECK-NEXT:    v_readlane_b32 s10, v22, 24
234 ; CHECK-NEXT:    v_readlane_b32 s11, v22, 25
235 ; CHECK-NEXT:    v_readlane_b32 s12, v22, 26
236 ; CHECK-NEXT:    v_readlane_b32 s13, v22, 27
237 ; CHECK-NEXT:    v_readlane_b32 s14, v22, 28
238 ; CHECK-NEXT:    v_readlane_b32 s15, v22, 29
239 ; CHECK-NEXT:    ;;#ASMSTART
240 ; CHECK-NEXT:    ; use s[0:15]
241 ; CHECK-NEXT:    ;;#ASMEND
242 ; CHECK-NEXT:    v_readlane_b32 s0, v22, 30
243 ; CHECK-NEXT:    v_readlane_b32 s1, v22, 31
244 ; CHECK-NEXT:    v_readlane_b32 s2, v22, 32
245 ; CHECK-NEXT:    v_readlane_b32 s3, v22, 33
246 ; CHECK-NEXT:    v_readlane_b32 s4, v22, 34
247 ; CHECK-NEXT:    v_readlane_b32 s5, v22, 35
248 ; CHECK-NEXT:    v_readlane_b32 s6, v22, 36
249 ; CHECK-NEXT:    v_readlane_b32 s7, v22, 37
250 ; CHECK-NEXT:    ;;#ASMSTART
251 ; CHECK-NEXT:    ; use s[42:43]
252 ; CHECK-NEXT:    ;;#ASMEND
253 ; CHECK-NEXT:    ;;#ASMSTART
254 ; CHECK-NEXT:    ; use s[52:55]
255 ; CHECK-NEXT:    ;;#ASMEND
256 ; CHECK-NEXT:    ;;#ASMSTART
257 ; CHECK-NEXT:    ; use s[0:7]
258 ; CHECK-NEXT:    ;;#ASMEND
259 ; CHECK-NEXT:    v_readlane_b32 s0, v22, 38
260 ; CHECK-NEXT:    v_readlane_b32 s1, v22, 39
261 ; CHECK-NEXT:    v_readlane_b32 s2, v22, 40
262 ; CHECK-NEXT:    v_readlane_b32 s3, v22, 41
263 ; CHECK-NEXT:    ;;#ASMSTART
264 ; CHECK-NEXT:    ; use s[16:31]
265 ; CHECK-NEXT:    ;;#ASMEND
266 ; CHECK-NEXT:    ;;#ASMSTART
267 ; CHECK-NEXT:    ; use s[40:41]
268 ; CHECK-NEXT:    ;;#ASMEND
269 ; CHECK-NEXT:    ;;#ASMSTART
270 ; CHECK-NEXT:    ; use s[36:39]
271 ; CHECK-NEXT:    ;;#ASMEND
272 ; CHECK-NEXT:    ;;#ASMSTART
273 ; CHECK-NEXT:    ; use s[44:51]
274 ; CHECK-NEXT:    ;;#ASMEND
275 ; CHECK-NEXT:    v_readlane_b32 s4, v22, 42
276 ; CHECK-NEXT:    v_readlane_b32 s5, v22, 43
277 ; CHECK-NEXT:    v_readlane_b32 s6, v22, 44
278 ; CHECK-NEXT:    v_readlane_b32 s7, v22, 45
279 ; CHECK-NEXT:    v_readlane_b32 s8, v22, 46
280 ; CHECK-NEXT:    v_readlane_b32 s9, v22, 47
281 ; CHECK-NEXT:    v_readlane_b32 s10, v22, 48
282 ; CHECK-NEXT:    v_readlane_b32 s11, v22, 49
283 ; CHECK-NEXT:    v_readlane_b32 s12, v22, 50
284 ; CHECK-NEXT:    v_readlane_b32 s13, v22, 51
285 ; CHECK-NEXT:    v_readlane_b32 s14, v22, 52
286 ; CHECK-NEXT:    v_readlane_b32 s15, v22, 53
287 ; CHECK-NEXT:    ;;#ASMSTART
288 ; CHECK-NEXT:    ; use s[0:15]
289 ; CHECK-NEXT:    ;;#ASMEND
290 ; CHECK-NEXT:    v_readlane_b32 s0, v22, 54
291 ; CHECK-NEXT:    v_readlane_b32 s1, v22, 55
292 ; CHECK-NEXT:    v_readlane_b32 s2, v22, 56
293 ; CHECK-NEXT:    v_readlane_b32 s3, v22, 57
294 ; CHECK-NEXT:    ;;#ASMSTART
295 ; CHECK-NEXT:    ; use s[34:35]
296 ; CHECK-NEXT:    ;;#ASMEND
297 ; CHECK-NEXT:    ;;#ASMSTART
298 ; CHECK-NEXT:    ; use s[0:3]
299 ; CHECK-NEXT:    ;;#ASMEND
300 ; CHECK-NEXT:    v_readlane_b32 s0, v22, 58
301 ; CHECK-NEXT:    v_readlane_b32 s1, v22, 59
302 ; CHECK-NEXT:    v_readlane_b32 s2, v22, 60
303 ; CHECK-NEXT:    v_readlane_b32 s3, v22, 61
304 ; CHECK-NEXT:    v_readlane_b32 s4, v22, 62
305 ; CHECK-NEXT:    v_readlane_b32 s5, v22, 63
306 ; CHECK-NEXT:    v_readlane_b32 s6, v23, 0
307 ; CHECK-NEXT:    v_readlane_b32 s7, v23, 1
308 ; CHECK-NEXT:    ;;#ASMSTART
309 ; CHECK-NEXT:    ; use s[0:7]
310 ; CHECK-NEXT:    ;;#ASMEND
311 ; CHECK-NEXT:    v_readlane_b32 s0, v23, 2
312 ; CHECK-NEXT:    v_readlane_b32 s1, v23, 3
313 ; CHECK-NEXT:    v_readlane_b32 s2, v23, 4
314 ; CHECK-NEXT:    v_readlane_b32 s3, v23, 5
315 ; CHECK-NEXT:    v_readlane_b32 s4, v23, 6
316 ; CHECK-NEXT:    v_readlane_b32 s5, v23, 7
317 ; CHECK-NEXT:    v_readlane_b32 s6, v23, 8
318 ; CHECK-NEXT:    v_readlane_b32 s7, v23, 9
319 ; CHECK-NEXT:    v_readlane_b32 s8, v23, 10
320 ; CHECK-NEXT:    v_readlane_b32 s9, v23, 11
321 ; CHECK-NEXT:    v_readlane_b32 s10, v23, 12
322 ; CHECK-NEXT:    v_readlane_b32 s11, v23, 13
323 ; CHECK-NEXT:    v_readlane_b32 s12, v23, 14
324 ; CHECK-NEXT:    v_readlane_b32 s13, v23, 15
325 ; CHECK-NEXT:    v_readlane_b32 s14, v23, 16
326 ; CHECK-NEXT:    v_readlane_b32 s15, v23, 17
327 ; CHECK-NEXT:    ;;#ASMSTART
328 ; CHECK-NEXT:    ; use s[0:15]
329 ; CHECK-NEXT:    ;;#ASMEND
330 ; CHECK-NEXT:    v_readlane_b32 s0, v23, 18
331 ; CHECK-NEXT:    v_readlane_b32 s1, v23, 19
332 ; CHECK-NEXT:    ;;#ASMSTART
333 ; CHECK-NEXT:    ; use s[0:1]
334 ; CHECK-NEXT:    ;;#ASMEND
335 ; CHECK-NEXT:    v_readlane_b32 s0, v23, 20
336 ; CHECK-NEXT:    v_readlane_b32 s1, v23, 21
337 ; CHECK-NEXT:    v_readlane_b32 s2, v23, 22
338 ; CHECK-NEXT:    v_readlane_b32 s3, v23, 23
339 ; CHECK-NEXT:    ;;#ASMSTART
340 ; CHECK-NEXT:    ; use s[0:3]
341 ; CHECK-NEXT:    ;;#ASMEND
342 ; CHECK-NEXT:    v_readlane_b32 s0, v23, 24
343 ; CHECK-NEXT:    v_readlane_b32 s1, v23, 25
344 ; CHECK-NEXT:    v_readlane_b32 s2, v23, 26
345 ; CHECK-NEXT:    v_readlane_b32 s3, v23, 27
346 ; CHECK-NEXT:    v_readlane_b32 s4, v23, 28
347 ; CHECK-NEXT:    v_readlane_b32 s5, v23, 29
348 ; CHECK-NEXT:    v_readlane_b32 s6, v23, 30
349 ; CHECK-NEXT:    v_readlane_b32 s7, v23, 31
350 ; CHECK-NEXT:    ;;#ASMSTART
351 ; CHECK-NEXT:    ; use s[0:7]
352 ; CHECK-NEXT:    ;;#ASMEND
353 ; CHECK-NEXT:    v_readlane_b32 s0, v23, 32
354 ; CHECK-NEXT:    v_readlane_b32 s1, v23, 33
355 ; CHECK-NEXT:    v_readlane_b32 s2, v23, 34
356 ; CHECK-NEXT:    v_readlane_b32 s3, v23, 35
357 ; CHECK-NEXT:    v_readlane_b32 s4, v23, 36
358 ; CHECK-NEXT:    v_readlane_b32 s5, v23, 37
359 ; CHECK-NEXT:    v_readlane_b32 s6, v23, 38
360 ; CHECK-NEXT:    v_readlane_b32 s7, v23, 39
361 ; CHECK-NEXT:    v_readlane_b32 s8, v23, 40
362 ; CHECK-NEXT:    v_readlane_b32 s9, v23, 41
363 ; CHECK-NEXT:    v_readlane_b32 s10, v23, 42
364 ; CHECK-NEXT:    v_readlane_b32 s11, v23, 43
365 ; CHECK-NEXT:    v_readlane_b32 s12, v23, 44
366 ; CHECK-NEXT:    v_readlane_b32 s13, v23, 45
367 ; CHECK-NEXT:    v_readlane_b32 s14, v23, 46
368 ; CHECK-NEXT:    v_readlane_b32 s15, v23, 47
369 ; CHECK-NEXT:    ;;#ASMSTART
370 ; CHECK-NEXT:    ; use s[0:15]
371 ; CHECK-NEXT:    ;;#ASMEND
372 ; CHECK-NEXT:    s_endpgm
373   call void asm sideeffect "", "~{v[0:7]}" () #0
374   call void asm sideeffect "", "~{v[8:15]}" () #0
375   call void asm sideeffect "", "~{v[16:19]}"() #0
376   call void asm sideeffect "", "~{v[20:21]}"() #0
378   %val0 = call <2 x i32> asm sideeffect "; def $0", "=s" () #0
379   %val1 = call <4 x i32> asm sideeffect "; def $0", "=s" () #0
380   %val2 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
381   %val3 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0
382   %val4 = call <2 x i32> asm sideeffect "; def $0", "=s" () #0
383   %val5 = call <4 x i32> asm sideeffect "; def $0", "=s" () #0
384   %val6 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
385   %val7 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0
386   %val8 = call <2 x i32> asm sideeffect "; def $0", "=s" () #0
387   %val9 = call <4 x i32> asm sideeffect "; def $0", "=s" () #0
388   %val10 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
389   %val11 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0
390   %val12 = call <2 x i32> asm sideeffect "; def $0", "=s" () #0
391   %val13 = call <4 x i32> asm sideeffect "; def $0", "=s" () #0
392   %val14 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
393   %val15 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0
394   %val16 = call <2 x i32> asm sideeffect "; def $0", "=s" () #0
395   %val17 = call <4 x i32> asm sideeffect "; def $0", "=s" () #0
396   %val18 = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
397   %val19 = call <16 x i32> asm sideeffect "; def $0", "=s" () #0
398   %cmp = icmp eq i32 %in, 0
399   br i1 %cmp, label %bb0, label %ret
401 bb0:
402   call void asm sideeffect "; use $0", "s"(<2 x i32> %val0) #0
403   call void asm sideeffect "; use $0", "s"(<4 x i32> %val1) #0
404   call void asm sideeffect "; use $0", "s"(<8 x i32> %val2) #0
405   call void asm sideeffect "; use $0", "s"(<16 x i32> %val3) #0
406   call void asm sideeffect "; use $0", "s"(<2 x i32> %val4) #0
407   call void asm sideeffect "; use $0", "s"(<4 x i32> %val5) #0
408   call void asm sideeffect "; use $0", "s"(<8 x i32> %val6) #0
409   call void asm sideeffect "; use $0", "s"(<16 x i32> %val7) #0
410   call void asm sideeffect "; use $0", "s"(<2 x i32> %val8) #0
411   call void asm sideeffect "; use $0", "s"(<4 x i32> %val9) #0
412   call void asm sideeffect "; use $0", "s"(<8 x i32> %val10) #0
413   call void asm sideeffect "; use $0", "s"(<16 x i32> %val11) #0
414   call void asm sideeffect "; use $0", "s"(<2 x i32> %val12) #0
415   call void asm sideeffect "; use $0", "s"(<4 x i32> %val13) #0
416   call void asm sideeffect "; use $0", "s"(<8 x i32> %val14) #0
417   call void asm sideeffect "; use $0", "s"(<16 x i32> %val15) #0
418   call void asm sideeffect "; use $0", "s"(<2 x i32> %val16) #0
419   call void asm sideeffect "; use $0", "s"(<4 x i32> %val17) #0
420   call void asm sideeffect "; use $0", "s"(<8 x i32> %val18) #0
421   call void asm sideeffect "; use $0", "s"(<16 x i32> %val19) #0
422   br label %ret
424 ret:
425   ret void
428 attributes #0 = { nounwind }
429 attributes #1 = { nounwind "amdgpu-waves-per-eu"="10,10" }