[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / preserve-wwm-copy-dst-reg.ll
blob8f74132271ba68c7c715a98eae9d5ea075a6396c
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx906 -verify-machineinstrs < %s | FileCheck -check-prefix=GFX906 %s
3 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx908 -verify-machineinstrs < %s | FileCheck -check-prefix=GFX908 %s
5 ; Due to high register pressure, regalloc would split the liverange of wwm VGPR register used for SGPR spills
6 ; and introduce a copy. The copy should be of whole-wave with exec mask manipulation around it.
7 ; FIXME: The destination register involved in the whole-wave copy should be considered for preserving all the lanes
8 ; with a spill/restore at function prolog/epilog. The copy might otherwise clobber its inactive lanes unwantedly.
9 define void @preserve_wwm_copy_dstreg(ptr %parg0, ptr %parg1, ptr %parg2) #0 {
10 ; GFX906-LABEL: preserve_wwm_copy_dstreg:
11 ; GFX906:       ; %bb.0:
12 ; GFX906-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13 ; GFX906-NEXT:    s_mov_b32 s16, s33
14 ; GFX906-NEXT:    s_mov_b32 s33, s32
15 ; GFX906-NEXT:    s_xor_saveexec_b64 s[18:19], -1
16 ; GFX906-NEXT:    buffer_store_dword v33, off, s[0:3], s33 offset:144 ; 4-byte Folded Spill
17 ; GFX906-NEXT:    buffer_store_dword v2, off, s[0:3], s33 offset:152 ; 4-byte Folded Spill
18 ; GFX906-NEXT:    s_mov_b64 exec, -1
19 ; GFX906-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill
20 ; GFX906-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:148 ; 4-byte Folded Spill
21 ; GFX906-NEXT:    s_mov_b64 exec, s[18:19]
22 ; GFX906-NEXT:    s_mov_b32 s21, s15
23 ; GFX906-NEXT:    ; implicit-def: $vgpr2
24 ; GFX906-NEXT:    s_mov_b32 s22, s14
25 ; GFX906-NEXT:    v_writelane_b32 v2, s21, 0
26 ; GFX906-NEXT:    v_writelane_b32 v2, s22, 1
27 ; GFX906-NEXT:    s_mov_b32 s23, s13
28 ; GFX906-NEXT:    v_writelane_b32 v2, s23, 2
29 ; GFX906-NEXT:    s_mov_b32 s24, s12
30 ; GFX906-NEXT:    v_writelane_b32 v2, s24, 3
31 ; GFX906-NEXT:    s_mov_b64 s[26:27], s[10:11]
32 ; GFX906-NEXT:    v_writelane_b32 v2, s26, 4
33 ; GFX906-NEXT:    v_writelane_b32 v2, s27, 5
34 ; GFX906-NEXT:    v_writelane_b32 v2, s8, 6
35 ; GFX906-NEXT:    v_writelane_b32 v2, s9, 7
36 ; GFX906-NEXT:    v_writelane_b32 v2, s6, 8
37 ; GFX906-NEXT:    v_writelane_b32 v41, s16, 2
38 ; GFX906-NEXT:    v_writelane_b32 v2, s7, 9
39 ; GFX906-NEXT:    v_writelane_b32 v41, s30, 0
40 ; GFX906-NEXT:    v_writelane_b32 v2, s4, 10
41 ; GFX906-NEXT:    s_addk_i32 s32, 0x2800
42 ; GFX906-NEXT:    v_writelane_b32 v41, s31, 1
43 ; GFX906-NEXT:    v_mov_b32_e32 v32, v31
44 ; GFX906-NEXT:    v_writelane_b32 v2, s5, 11
45 ; GFX906-NEXT:    s_or_saveexec_b64 s[34:35], -1
46 ; GFX906-NEXT:    v_mov_b32_e32 v33, v2
47 ; GFX906-NEXT:    s_mov_b64 exec, s[34:35]
48 ; GFX906-NEXT:    buffer_store_dword v0, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
49 ; GFX906-NEXT:    s_waitcnt vmcnt(0)
50 ; GFX906-NEXT:    buffer_store_dword v1, off, s[0:3], s33 offset:12 ; 4-byte Folded Spill
51 ; GFX906-NEXT:    ;;#ASMSTART
52 ; GFX906-NEXT:    ; def v[0:31]
53 ; GFX906-NEXT:    ;;#ASMEND
54 ; GFX906-NEXT:    buffer_store_dword v0, off, s[0:3], s33 offset:16 ; 4-byte Folded Spill
55 ; GFX906-NEXT:    s_waitcnt vmcnt(0)
56 ; GFX906-NEXT:    buffer_store_dword v1, off, s[0:3], s33 offset:20 ; 4-byte Folded Spill
57 ; GFX906-NEXT:    buffer_store_dword v2, off, s[0:3], s33 offset:24 ; 4-byte Folded Spill
58 ; GFX906-NEXT:    buffer_store_dword v3, off, s[0:3], s33 offset:28 ; 4-byte Folded Spill
59 ; GFX906-NEXT:    buffer_store_dword v4, off, s[0:3], s33 offset:32 ; 4-byte Folded Spill
60 ; GFX906-NEXT:    buffer_store_dword v5, off, s[0:3], s33 offset:36 ; 4-byte Folded Spill
61 ; GFX906-NEXT:    buffer_store_dword v6, off, s[0:3], s33 offset:40 ; 4-byte Folded Spill
62 ; GFX906-NEXT:    buffer_store_dword v7, off, s[0:3], s33 offset:44 ; 4-byte Folded Spill
63 ; GFX906-NEXT:    buffer_store_dword v8, off, s[0:3], s33 offset:48 ; 4-byte Folded Spill
64 ; GFX906-NEXT:    buffer_store_dword v9, off, s[0:3], s33 offset:52 ; 4-byte Folded Spill
65 ; GFX906-NEXT:    buffer_store_dword v10, off, s[0:3], s33 offset:56 ; 4-byte Folded Spill
66 ; GFX906-NEXT:    buffer_store_dword v11, off, s[0:3], s33 offset:60 ; 4-byte Folded Spill
67 ; GFX906-NEXT:    buffer_store_dword v12, off, s[0:3], s33 offset:64 ; 4-byte Folded Spill
68 ; GFX906-NEXT:    buffer_store_dword v13, off, s[0:3], s33 offset:68 ; 4-byte Folded Spill
69 ; GFX906-NEXT:    buffer_store_dword v14, off, s[0:3], s33 offset:72 ; 4-byte Folded Spill
70 ; GFX906-NEXT:    buffer_store_dword v15, off, s[0:3], s33 offset:76 ; 4-byte Folded Spill
71 ; GFX906-NEXT:    buffer_store_dword v16, off, s[0:3], s33 offset:80 ; 4-byte Folded Spill
72 ; GFX906-NEXT:    buffer_store_dword v17, off, s[0:3], s33 offset:84 ; 4-byte Folded Spill
73 ; GFX906-NEXT:    buffer_store_dword v18, off, s[0:3], s33 offset:88 ; 4-byte Folded Spill
74 ; GFX906-NEXT:    buffer_store_dword v19, off, s[0:3], s33 offset:92 ; 4-byte Folded Spill
75 ; GFX906-NEXT:    buffer_store_dword v20, off, s[0:3], s33 offset:96 ; 4-byte Folded Spill
76 ; GFX906-NEXT:    buffer_store_dword v21, off, s[0:3], s33 offset:100 ; 4-byte Folded Spill
77 ; GFX906-NEXT:    buffer_store_dword v22, off, s[0:3], s33 offset:104 ; 4-byte Folded Spill
78 ; GFX906-NEXT:    buffer_store_dword v23, off, s[0:3], s33 offset:108 ; 4-byte Folded Spill
79 ; GFX906-NEXT:    buffer_store_dword v24, off, s[0:3], s33 offset:112 ; 4-byte Folded Spill
80 ; GFX906-NEXT:    buffer_store_dword v25, off, s[0:3], s33 offset:116 ; 4-byte Folded Spill
81 ; GFX906-NEXT:    buffer_store_dword v26, off, s[0:3], s33 offset:120 ; 4-byte Folded Spill
82 ; GFX906-NEXT:    buffer_store_dword v27, off, s[0:3], s33 offset:124 ; 4-byte Folded Spill
83 ; GFX906-NEXT:    buffer_store_dword v28, off, s[0:3], s33 offset:128 ; 4-byte Folded Spill
84 ; GFX906-NEXT:    buffer_store_dword v29, off, s[0:3], s33 offset:132 ; 4-byte Folded Spill
85 ; GFX906-NEXT:    buffer_store_dword v30, off, s[0:3], s33 offset:136 ; 4-byte Folded Spill
86 ; GFX906-NEXT:    buffer_store_dword v31, off, s[0:3], s33 offset:140 ; 4-byte Folded Spill
87 ; GFX906-NEXT:    ;;#ASMSTART
88 ; GFX906-NEXT:    ; def v40
89 ; GFX906-NEXT:    ;;#ASMEND
90 ; GFX906-NEXT:    ;;#ASMSTART
91 ; GFX906-NEXT:    ; def s11
92 ; GFX906-NEXT:    ;;#ASMEND
93 ; GFX906-NEXT:    s_or_saveexec_b64 s[34:35], -1
94 ; GFX906-NEXT:    v_mov_b32_e32 v40, v33
95 ; GFX906-NEXT:    s_mov_b64 exec, s[34:35]
96 ; GFX906-NEXT:    v_writelane_b32 v40, s11, 12
97 ; GFX906-NEXT:    ;;#ASMSTART
98 ; GFX906-NEXT:    ; def s12
99 ; GFX906-NEXT:    ;;#ASMEND
100 ; GFX906-NEXT:    v_writelane_b32 v40, s12, 13
101 ; GFX906-NEXT:    ;;#ASMSTART
102 ; GFX906-NEXT:    ; def s13
103 ; GFX906-NEXT:    ;;#ASMEND
104 ; GFX906-NEXT:    v_writelane_b32 v40, s13, 14
105 ; GFX906-NEXT:    ;;#ASMSTART
106 ; GFX906-NEXT:    ; def s14
107 ; GFX906-NEXT:    ;;#ASMEND
108 ; GFX906-NEXT:    v_writelane_b32 v40, s14, 15
109 ; GFX906-NEXT:    ;;#ASMSTART
110 ; GFX906-NEXT:    ; def s15
111 ; GFX906-NEXT:    ;;#ASMEND
112 ; GFX906-NEXT:    v_writelane_b32 v40, s15, 16
113 ; GFX906-NEXT:    s_getpc_b64 s[10:11]
114 ; GFX906-NEXT:    s_add_u32 s10, s10, foo@gotpcrel32@lo+4
115 ; GFX906-NEXT:    s_addc_u32 s11, s11, foo@gotpcrel32@hi+12
116 ; GFX906-NEXT:    ;;#ASMSTART
117 ; GFX906-NEXT:    ; def s16
118 ; GFX906-NEXT:    ;;#ASMEND
119 ; GFX906-NEXT:    v_writelane_b32 v40, s16, 17
120 ; GFX906-NEXT:    s_load_dwordx2 s[10:11], s[10:11], 0x0
121 ; GFX906-NEXT:    ;;#ASMSTART
122 ; GFX906-NEXT:    ; def s17
123 ; GFX906-NEXT:    ;;#ASMEND
124 ; GFX906-NEXT:    v_writelane_b32 v40, s17, 18
125 ; GFX906-NEXT:    ;;#ASMSTART
126 ; GFX906-NEXT:    ; def s18
127 ; GFX906-NEXT:    ;;#ASMEND
128 ; GFX906-NEXT:    v_writelane_b32 v40, s18, 19
129 ; GFX906-NEXT:    ;;#ASMSTART
130 ; GFX906-NEXT:    ; def s19
131 ; GFX906-NEXT:    ;;#ASMEND
132 ; GFX906-NEXT:    v_writelane_b32 v40, s19, 20
133 ; GFX906-NEXT:    ;;#ASMSTART
134 ; GFX906-NEXT:    ; def s20
135 ; GFX906-NEXT:    ;;#ASMEND
136 ; GFX906-NEXT:    v_writelane_b32 v40, s20, 21
137 ; GFX906-NEXT:    s_waitcnt lgkmcnt(0)
138 ; GFX906-NEXT:    v_writelane_b32 v40, s10, 22
139 ; GFX906-NEXT:    v_writelane_b32 v40, s11, 23
140 ; GFX906-NEXT:    s_or_saveexec_b64 s[34:35], -1
141 ; GFX906-NEXT:    s_mov_b64 exec, s[34:35]
142 ; GFX906-NEXT:    v_readlane_b32 s16, v40, 22
143 ; GFX906-NEXT:    s_mov_b32 s12, s24
144 ; GFX906-NEXT:    s_mov_b32 s13, s23
145 ; GFX906-NEXT:    s_mov_b32 s14, s22
146 ; GFX906-NEXT:    v_mov_b32_e32 v31, v32
147 ; GFX906-NEXT:    s_mov_b32 s15, s21
148 ; GFX906-NEXT:    s_mov_b64 s[10:11], s[26:27]
149 ; GFX906-NEXT:    v_readlane_b32 s17, v40, 23
150 ; GFX906-NEXT:    buffer_store_dword v32, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
151 ; GFX906-NEXT:    s_swappc_b64 s[30:31], s[16:17]
152 ; GFX906-NEXT:    s_or_saveexec_b64 s[34:35], -1
153 ; GFX906-NEXT:    s_mov_b64 exec, s[34:35]
154 ; GFX906-NEXT:    v_readlane_b32 s11, v40, 12
155 ; GFX906-NEXT:    ;;#ASMSTART
156 ; GFX906-NEXT:    ; use s11
157 ; GFX906-NEXT:    ;;#ASMEND
158 ; GFX906-NEXT:    v_readlane_b32 s12, v40, 13
159 ; GFX906-NEXT:    ;;#ASMSTART
160 ; GFX906-NEXT:    ; use s12
161 ; GFX906-NEXT:    ;;#ASMEND
162 ; GFX906-NEXT:    v_readlane_b32 s13, v40, 14
163 ; GFX906-NEXT:    ;;#ASMSTART
164 ; GFX906-NEXT:    ; use s13
165 ; GFX906-NEXT:    ;;#ASMEND
166 ; GFX906-NEXT:    v_readlane_b32 s14, v40, 15
167 ; GFX906-NEXT:    ;;#ASMSTART
168 ; GFX906-NEXT:    ; use s14
169 ; GFX906-NEXT:    ;;#ASMEND
170 ; GFX906-NEXT:    v_readlane_b32 s15, v40, 16
171 ; GFX906-NEXT:    ;;#ASMSTART
172 ; GFX906-NEXT:    ; use s15
173 ; GFX906-NEXT:    ;;#ASMEND
174 ; GFX906-NEXT:    v_readlane_b32 s16, v40, 17
175 ; GFX906-NEXT:    ;;#ASMSTART
176 ; GFX906-NEXT:    ; use s16
177 ; GFX906-NEXT:    ;;#ASMEND
178 ; GFX906-NEXT:    v_readlane_b32 s17, v40, 18
179 ; GFX906-NEXT:    ;;#ASMSTART
180 ; GFX906-NEXT:    ; use s17
181 ; GFX906-NEXT:    ;;#ASMEND
182 ; GFX906-NEXT:    v_readlane_b32 s18, v40, 19
183 ; GFX906-NEXT:    ;;#ASMSTART
184 ; GFX906-NEXT:    ; use s18
185 ; GFX906-NEXT:    ;;#ASMEND
186 ; GFX906-NEXT:    v_readlane_b32 s19, v40, 20
187 ; GFX906-NEXT:    ;;#ASMSTART
188 ; GFX906-NEXT:    ; use s19
189 ; GFX906-NEXT:    ;;#ASMEND
190 ; GFX906-NEXT:    v_readlane_b32 s20, v40, 21
191 ; GFX906-NEXT:    ;;#ASMSTART
192 ; GFX906-NEXT:    ; use s20
193 ; GFX906-NEXT:    ;;#ASMEND
194 ; GFX906-NEXT:    ;;#ASMSTART
195 ; GFX906-NEXT:    ; def s21
196 ; GFX906-NEXT:    ;;#ASMEND
197 ; GFX906-NEXT:    ;;#ASMSTART
198 ; GFX906-NEXT:    ; def s22
199 ; GFX906-NEXT:    ;;#ASMEND
200 ; GFX906-NEXT:    ;;#ASMSTART
201 ; GFX906-NEXT:    ; def s23
202 ; GFX906-NEXT:    ;;#ASMEND
203 ; GFX906-NEXT:    ;;#ASMSTART
204 ; GFX906-NEXT:    ; def s24
205 ; GFX906-NEXT:    ;;#ASMEND
206 ; GFX906-NEXT:    ;;#ASMSTART
207 ; GFX906-NEXT:    ; def s25
208 ; GFX906-NEXT:    ;;#ASMEND
209 ; GFX906-NEXT:    ;;#ASMSTART
210 ; GFX906-NEXT:    ; def s26
211 ; GFX906-NEXT:    ;;#ASMEND
212 ; GFX906-NEXT:    ;;#ASMSTART
213 ; GFX906-NEXT:    ; def s27
214 ; GFX906-NEXT:    ;;#ASMEND
215 ; GFX906-NEXT:    ;;#ASMSTART
216 ; GFX906-NEXT:    ; def s28
217 ; GFX906-NEXT:    ;;#ASMEND
218 ; GFX906-NEXT:    ;;#ASMSTART
219 ; GFX906-NEXT:    ; def s29
220 ; GFX906-NEXT:    ;;#ASMEND
221 ; GFX906-NEXT:    buffer_load_dword v31, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload
222 ; GFX906-NEXT:    v_writelane_b32 v40, s21, 24
223 ; GFX906-NEXT:    v_writelane_b32 v40, s22, 25
224 ; GFX906-NEXT:    v_writelane_b32 v40, s23, 26
225 ; GFX906-NEXT:    v_writelane_b32 v40, s24, 27
226 ; GFX906-NEXT:    v_writelane_b32 v40, s25, 28
227 ; GFX906-NEXT:    v_writelane_b32 v40, s26, 29
228 ; GFX906-NEXT:    v_writelane_b32 v40, s27, 30
229 ; GFX906-NEXT:    v_writelane_b32 v40, s28, 31
230 ; GFX906-NEXT:    v_writelane_b32 v40, s29, 32
231 ; GFX906-NEXT:    v_readlane_b32 s4, v40, 10
232 ; GFX906-NEXT:    v_readlane_b32 s6, v40, 8
233 ; GFX906-NEXT:    v_readlane_b32 s8, v40, 6
234 ; GFX906-NEXT:    v_readlane_b32 s10, v40, 4
235 ; GFX906-NEXT:    v_readlane_b32 s16, v40, 22
236 ; GFX906-NEXT:    v_readlane_b32 s12, v40, 3
237 ; GFX906-NEXT:    v_readlane_b32 s13, v40, 2
238 ; GFX906-NEXT:    v_readlane_b32 s14, v40, 1
239 ; GFX906-NEXT:    v_readlane_b32 s15, v40, 0
240 ; GFX906-NEXT:    v_readlane_b32 s5, v40, 11
241 ; GFX906-NEXT:    v_readlane_b32 s7, v40, 9
242 ; GFX906-NEXT:    v_readlane_b32 s9, v40, 7
243 ; GFX906-NEXT:    v_readlane_b32 s11, v40, 5
244 ; GFX906-NEXT:    v_readlane_b32 s17, v40, 23
245 ; GFX906-NEXT:    s_or_saveexec_b64 s[34:35], -1
246 ; GFX906-NEXT:    s_mov_b64 exec, s[34:35]
247 ; GFX906-NEXT:    s_swappc_b64 s[30:31], s[16:17]
248 ; GFX906-NEXT:    s_or_saveexec_b64 s[34:35], -1
249 ; GFX906-NEXT:    s_mov_b64 exec, s[34:35]
250 ; GFX906-NEXT:    v_readlane_b32 s21, v40, 24
251 ; GFX906-NEXT:    ;;#ASMSTART
252 ; GFX906-NEXT:    ; use s21
253 ; GFX906-NEXT:    ;;#ASMEND
254 ; GFX906-NEXT:    v_readlane_b32 s22, v40, 25
255 ; GFX906-NEXT:    ;;#ASMSTART
256 ; GFX906-NEXT:    ; use s22
257 ; GFX906-NEXT:    ;;#ASMEND
258 ; GFX906-NEXT:    v_readlane_b32 s23, v40, 26
259 ; GFX906-NEXT:    ;;#ASMSTART
260 ; GFX906-NEXT:    ; use s23
261 ; GFX906-NEXT:    ;;#ASMEND
262 ; GFX906-NEXT:    v_readlane_b32 s24, v40, 27
263 ; GFX906-NEXT:    ;;#ASMSTART
264 ; GFX906-NEXT:    ; use s24
265 ; GFX906-NEXT:    ;;#ASMEND
266 ; GFX906-NEXT:    v_readlane_b32 s25, v40, 28
267 ; GFX906-NEXT:    ;;#ASMSTART
268 ; GFX906-NEXT:    ; use s25
269 ; GFX906-NEXT:    ;;#ASMEND
270 ; GFX906-NEXT:    v_readlane_b32 s26, v40, 29
271 ; GFX906-NEXT:    ;;#ASMSTART
272 ; GFX906-NEXT:    ; use s26
273 ; GFX906-NEXT:    ;;#ASMEND
274 ; GFX906-NEXT:    v_readlane_b32 s27, v40, 30
275 ; GFX906-NEXT:    ;;#ASMSTART
276 ; GFX906-NEXT:    ; use s27
277 ; GFX906-NEXT:    ;;#ASMEND
278 ; GFX906-NEXT:    v_readlane_b32 s28, v40, 31
279 ; GFX906-NEXT:    ;;#ASMSTART
280 ; GFX906-NEXT:    ; use s28
281 ; GFX906-NEXT:    ;;#ASMEND
282 ; GFX906-NEXT:    v_readlane_b32 s29, v40, 32
283 ; GFX906-NEXT:    ;;#ASMSTART
284 ; GFX906-NEXT:    ; use s29
285 ; GFX906-NEXT:    ;;#ASMEND
286 ; GFX906-NEXT:    buffer_load_dword v31, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload
287 ; GFX906-NEXT:    v_readlane_b32 s4, v40, 10
288 ; GFX906-NEXT:    v_readlane_b32 s6, v40, 8
289 ; GFX906-NEXT:    v_readlane_b32 s8, v40, 6
290 ; GFX906-NEXT:    v_readlane_b32 s10, v40, 4
291 ; GFX906-NEXT:    v_readlane_b32 s16, v40, 22
292 ; GFX906-NEXT:    v_readlane_b32 s5, v40, 11
293 ; GFX906-NEXT:    v_readlane_b32 s7, v40, 9
294 ; GFX906-NEXT:    v_readlane_b32 s9, v40, 7
295 ; GFX906-NEXT:    v_readlane_b32 s11, v40, 5
296 ; GFX906-NEXT:    v_readlane_b32 s12, v40, 3
297 ; GFX906-NEXT:    v_readlane_b32 s13, v40, 2
298 ; GFX906-NEXT:    v_readlane_b32 s14, v40, 1
299 ; GFX906-NEXT:    v_readlane_b32 s15, v40, 0
300 ; GFX906-NEXT:    v_readlane_b32 s17, v40, 23
301 ; GFX906-NEXT:    s_or_saveexec_b64 s[34:35], -1
302 ; GFX906-NEXT:    s_mov_b64 exec, s[34:35]
303 ; GFX906-NEXT:    s_swappc_b64 s[30:31], s[16:17]
304 ; GFX906-NEXT:    buffer_load_dword v0, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
305 ; GFX906-NEXT:    buffer_load_dword v1, off, s[0:3], s33 offset:12 ; 4-byte Folded Reload
306 ; GFX906-NEXT:    buffer_load_dword v2, off, s[0:3], s33 offset:16 ; 4-byte Folded Reload
307 ; GFX906-NEXT:    buffer_load_dword v3, off, s[0:3], s33 offset:20 ; 4-byte Folded Reload
308 ; GFX906-NEXT:    buffer_load_dword v4, off, s[0:3], s33 offset:24 ; 4-byte Folded Reload
309 ; GFX906-NEXT:    buffer_load_dword v5, off, s[0:3], s33 offset:28 ; 4-byte Folded Reload
310 ; GFX906-NEXT:    buffer_load_dword v6, off, s[0:3], s33 offset:32 ; 4-byte Folded Reload
311 ; GFX906-NEXT:    buffer_load_dword v7, off, s[0:3], s33 offset:36 ; 4-byte Folded Reload
312 ; GFX906-NEXT:    buffer_load_dword v8, off, s[0:3], s33 offset:40 ; 4-byte Folded Reload
313 ; GFX906-NEXT:    buffer_load_dword v9, off, s[0:3], s33 offset:44 ; 4-byte Folded Reload
314 ; GFX906-NEXT:    buffer_load_dword v10, off, s[0:3], s33 offset:48 ; 4-byte Folded Reload
315 ; GFX906-NEXT:    buffer_load_dword v11, off, s[0:3], s33 offset:52 ; 4-byte Folded Reload
316 ; GFX906-NEXT:    buffer_load_dword v12, off, s[0:3], s33 offset:56 ; 4-byte Folded Reload
317 ; GFX906-NEXT:    buffer_load_dword v13, off, s[0:3], s33 offset:60 ; 4-byte Folded Reload
318 ; GFX906-NEXT:    buffer_load_dword v14, off, s[0:3], s33 offset:64 ; 4-byte Folded Reload
319 ; GFX906-NEXT:    buffer_load_dword v15, off, s[0:3], s33 offset:68 ; 4-byte Folded Reload
320 ; GFX906-NEXT:    buffer_load_dword v16, off, s[0:3], s33 offset:72 ; 4-byte Folded Reload
321 ; GFX906-NEXT:    buffer_load_dword v17, off, s[0:3], s33 offset:76 ; 4-byte Folded Reload
322 ; GFX906-NEXT:    buffer_load_dword v18, off, s[0:3], s33 offset:80 ; 4-byte Folded Reload
323 ; GFX906-NEXT:    buffer_load_dword v19, off, s[0:3], s33 offset:84 ; 4-byte Folded Reload
324 ; GFX906-NEXT:    buffer_load_dword v20, off, s[0:3], s33 offset:88 ; 4-byte Folded Reload
325 ; GFX906-NEXT:    buffer_load_dword v21, off, s[0:3], s33 offset:92 ; 4-byte Folded Reload
326 ; GFX906-NEXT:    buffer_load_dword v22, off, s[0:3], s33 offset:96 ; 4-byte Folded Reload
327 ; GFX906-NEXT:    buffer_load_dword v23, off, s[0:3], s33 offset:100 ; 4-byte Folded Reload
328 ; GFX906-NEXT:    buffer_load_dword v24, off, s[0:3], s33 offset:104 ; 4-byte Folded Reload
329 ; GFX906-NEXT:    buffer_load_dword v25, off, s[0:3], s33 offset:108 ; 4-byte Folded Reload
330 ; GFX906-NEXT:    buffer_load_dword v26, off, s[0:3], s33 offset:112 ; 4-byte Folded Reload
331 ; GFX906-NEXT:    buffer_load_dword v27, off, s[0:3], s33 offset:116 ; 4-byte Folded Reload
332 ; GFX906-NEXT:    buffer_load_dword v28, off, s[0:3], s33 offset:120 ; 4-byte Folded Reload
333 ; GFX906-NEXT:    buffer_load_dword v29, off, s[0:3], s33 offset:124 ; 4-byte Folded Reload
334 ; GFX906-NEXT:    buffer_load_dword v30, off, s[0:3], s33 offset:128 ; 4-byte Folded Reload
335 ; GFX906-NEXT:    buffer_load_dword v31, off, s[0:3], s33 offset:132 ; 4-byte Folded Reload
336 ; GFX906-NEXT:    buffer_load_dword v32, off, s[0:3], s33 offset:136 ; 4-byte Folded Reload
337 ; GFX906-NEXT:    buffer_load_dword v33, off, s[0:3], s33 offset:140 ; 4-byte Folded Reload
338 ; GFX906-NEXT:    v_readlane_b32 s31, v41, 1
339 ; GFX906-NEXT:    v_readlane_b32 s30, v41, 0
340 ; GFX906-NEXT:    ; kill: killed $vgpr40
341 ; GFX906-NEXT:    v_readlane_b32 s4, v41, 2
342 ; GFX906-NEXT:    s_waitcnt vmcnt(0)
343 ; GFX906-NEXT:    flat_store_dwordx4 v[0:1], v[30:33] offset:112
344 ; GFX906-NEXT:    s_waitcnt vmcnt(0)
345 ; GFX906-NEXT:    flat_store_dwordx4 v[0:1], v[26:29] offset:96
346 ; GFX906-NEXT:    s_waitcnt vmcnt(0)
347 ; GFX906-NEXT:    flat_store_dwordx4 v[0:1], v[22:25] offset:80
348 ; GFX906-NEXT:    s_waitcnt vmcnt(0)
349 ; GFX906-NEXT:    flat_store_dwordx4 v[0:1], v[18:21] offset:64
350 ; GFX906-NEXT:    s_waitcnt vmcnt(0)
351 ; GFX906-NEXT:    flat_store_dwordx4 v[0:1], v[14:17] offset:48
352 ; GFX906-NEXT:    s_waitcnt vmcnt(0)
353 ; GFX906-NEXT:    flat_store_dwordx4 v[0:1], v[10:13] offset:32
354 ; GFX906-NEXT:    s_waitcnt vmcnt(0)
355 ; GFX906-NEXT:    flat_store_dwordx4 v[0:1], v[6:9] offset:16
356 ; GFX906-NEXT:    s_waitcnt vmcnt(0)
357 ; GFX906-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
358 ; GFX906-NEXT:    s_waitcnt vmcnt(0)
359 ; GFX906-NEXT:    s_xor_saveexec_b64 s[6:7], -1
360 ; GFX906-NEXT:    buffer_load_dword v33, off, s[0:3], s33 offset:144 ; 4-byte Folded Reload
361 ; GFX906-NEXT:    buffer_load_dword v2, off, s[0:3], s33 offset:152 ; 4-byte Folded Reload
362 ; GFX906-NEXT:    s_mov_b64 exec, -1
363 ; GFX906-NEXT:    buffer_load_dword v41, off, s[0:3], s33 ; 4-byte Folded Reload
364 ; GFX906-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:148 ; 4-byte Folded Reload
365 ; GFX906-NEXT:    s_mov_b64 exec, s[6:7]
366 ; GFX906-NEXT:    s_addk_i32 s32, 0xd800
367 ; GFX906-NEXT:    s_mov_b32 s33, s4
368 ; GFX906-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
369 ; GFX906-NEXT:    s_setpc_b64 s[30:31]
371 ; GFX908-LABEL: preserve_wwm_copy_dstreg:
372 ; GFX908:       ; %bb.0:
373 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
374 ; GFX908-NEXT:    s_mov_b32 s16, s33
375 ; GFX908-NEXT:    s_mov_b32 s33, s32
376 ; GFX908-NEXT:    s_xor_saveexec_b64 s[18:19], -1
377 ; GFX908-NEXT:    buffer_store_dword v33, off, s[0:3], s33 offset:148 ; 4-byte Folded Spill
378 ; GFX908-NEXT:    buffer_store_dword v2, off, s[0:3], s33 offset:156 ; 4-byte Folded Spill
379 ; GFX908-NEXT:    s_mov_b64 exec, -1
380 ; GFX908-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:152 ; 4-byte Folded Spill
381 ; GFX908-NEXT:    s_mov_b64 exec, s[18:19]
382 ; GFX908-NEXT:    v_mov_b32_e32 v3, s16
383 ; GFX908-NEXT:    buffer_store_dword v3, off, s[0:3], s33 offset:160 ; 4-byte Folded Spill
384 ; GFX908-NEXT:    s_addk_i32 s32, 0x2c00
385 ; GFX908-NEXT:    s_mov_b64 s[16:17], exec
386 ; GFX908-NEXT:    s_mov_b64 exec, 1
387 ; GFX908-NEXT:    buffer_store_dword v2, off, s[0:3], s33 offset:164
388 ; GFX908-NEXT:    v_writelane_b32 v2, s30, 0
389 ; GFX908-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
390 ; GFX908-NEXT:    buffer_load_dword v2, off, s[0:3], s33 offset:164
391 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
392 ; GFX908-NEXT:    s_mov_b64 exec, s[16:17]
393 ; GFX908-NEXT:    s_mov_b64 s[16:17], exec
394 ; GFX908-NEXT:    s_mov_b64 exec, 1
395 ; GFX908-NEXT:    buffer_store_dword v2, off, s[0:3], s33 offset:164
396 ; GFX908-NEXT:    v_writelane_b32 v2, s31, 0
397 ; GFX908-NEXT:    buffer_store_dword v2, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill
398 ; GFX908-NEXT:    buffer_load_dword v2, off, s[0:3], s33 offset:164
399 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
400 ; GFX908-NEXT:    s_mov_b64 exec, s[16:17]
401 ; GFX908-NEXT:    s_mov_b32 s21, s15
402 ; GFX908-NEXT:    ; implicit-def: $vgpr2
403 ; GFX908-NEXT:    s_mov_b32 s22, s14
404 ; GFX908-NEXT:    v_writelane_b32 v2, s21, 0
405 ; GFX908-NEXT:    v_writelane_b32 v2, s22, 1
406 ; GFX908-NEXT:    s_mov_b32 s23, s13
407 ; GFX908-NEXT:    v_writelane_b32 v2, s23, 2
408 ; GFX908-NEXT:    s_mov_b32 s24, s12
409 ; GFX908-NEXT:    v_writelane_b32 v2, s24, 3
410 ; GFX908-NEXT:    s_mov_b64 s[26:27], s[10:11]
411 ; GFX908-NEXT:    v_writelane_b32 v2, s26, 4
412 ; GFX908-NEXT:    v_writelane_b32 v2, s27, 5
413 ; GFX908-NEXT:    v_writelane_b32 v2, s8, 6
414 ; GFX908-NEXT:    v_writelane_b32 v2, s9, 7
415 ; GFX908-NEXT:    v_writelane_b32 v2, s6, 8
416 ; GFX908-NEXT:    v_writelane_b32 v2, s7, 9
417 ; GFX908-NEXT:    v_writelane_b32 v2, s4, 10
418 ; GFX908-NEXT:    v_mov_b32_e32 v32, v31
419 ; GFX908-NEXT:    v_writelane_b32 v2, s5, 11
420 ; GFX908-NEXT:    s_or_saveexec_b64 s[34:35], -1
421 ; GFX908-NEXT:    v_mov_b32_e32 v33, v2
422 ; GFX908-NEXT:    s_mov_b64 exec, s[34:35]
423 ; GFX908-NEXT:    buffer_store_dword v0, off, s[0:3], s33 offset:12 ; 4-byte Folded Spill
424 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
425 ; GFX908-NEXT:    buffer_store_dword v1, off, s[0:3], s33 offset:16 ; 4-byte Folded Spill
426 ; GFX908-NEXT:    ;;#ASMSTART
427 ; GFX908-NEXT:    ; def v[0:31]
428 ; GFX908-NEXT:    ;;#ASMEND
429 ; GFX908-NEXT:    buffer_store_dword v0, off, s[0:3], s33 offset:20 ; 4-byte Folded Spill
430 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
431 ; GFX908-NEXT:    buffer_store_dword v1, off, s[0:3], s33 offset:24 ; 4-byte Folded Spill
432 ; GFX908-NEXT:    buffer_store_dword v2, off, s[0:3], s33 offset:28 ; 4-byte Folded Spill
433 ; GFX908-NEXT:    buffer_store_dword v3, off, s[0:3], s33 offset:32 ; 4-byte Folded Spill
434 ; GFX908-NEXT:    buffer_store_dword v4, off, s[0:3], s33 offset:36 ; 4-byte Folded Spill
435 ; GFX908-NEXT:    buffer_store_dword v5, off, s[0:3], s33 offset:40 ; 4-byte Folded Spill
436 ; GFX908-NEXT:    buffer_store_dword v6, off, s[0:3], s33 offset:44 ; 4-byte Folded Spill
437 ; GFX908-NEXT:    buffer_store_dword v7, off, s[0:3], s33 offset:48 ; 4-byte Folded Spill
438 ; GFX908-NEXT:    buffer_store_dword v8, off, s[0:3], s33 offset:52 ; 4-byte Folded Spill
439 ; GFX908-NEXT:    buffer_store_dword v9, off, s[0:3], s33 offset:56 ; 4-byte Folded Spill
440 ; GFX908-NEXT:    buffer_store_dword v10, off, s[0:3], s33 offset:60 ; 4-byte Folded Spill
441 ; GFX908-NEXT:    buffer_store_dword v11, off, s[0:3], s33 offset:64 ; 4-byte Folded Spill
442 ; GFX908-NEXT:    buffer_store_dword v12, off, s[0:3], s33 offset:68 ; 4-byte Folded Spill
443 ; GFX908-NEXT:    buffer_store_dword v13, off, s[0:3], s33 offset:72 ; 4-byte Folded Spill
444 ; GFX908-NEXT:    buffer_store_dword v14, off, s[0:3], s33 offset:76 ; 4-byte Folded Spill
445 ; GFX908-NEXT:    buffer_store_dword v15, off, s[0:3], s33 offset:80 ; 4-byte Folded Spill
446 ; GFX908-NEXT:    buffer_store_dword v16, off, s[0:3], s33 offset:84 ; 4-byte Folded Spill
447 ; GFX908-NEXT:    buffer_store_dword v17, off, s[0:3], s33 offset:88 ; 4-byte Folded Spill
448 ; GFX908-NEXT:    buffer_store_dword v18, off, s[0:3], s33 offset:92 ; 4-byte Folded Spill
449 ; GFX908-NEXT:    buffer_store_dword v19, off, s[0:3], s33 offset:96 ; 4-byte Folded Spill
450 ; GFX908-NEXT:    buffer_store_dword v20, off, s[0:3], s33 offset:100 ; 4-byte Folded Spill
451 ; GFX908-NEXT:    buffer_store_dword v21, off, s[0:3], s33 offset:104 ; 4-byte Folded Spill
452 ; GFX908-NEXT:    buffer_store_dword v22, off, s[0:3], s33 offset:108 ; 4-byte Folded Spill
453 ; GFX908-NEXT:    buffer_store_dword v23, off, s[0:3], s33 offset:112 ; 4-byte Folded Spill
454 ; GFX908-NEXT:    buffer_store_dword v24, off, s[0:3], s33 offset:116 ; 4-byte Folded Spill
455 ; GFX908-NEXT:    buffer_store_dword v25, off, s[0:3], s33 offset:120 ; 4-byte Folded Spill
456 ; GFX908-NEXT:    buffer_store_dword v26, off, s[0:3], s33 offset:124 ; 4-byte Folded Spill
457 ; GFX908-NEXT:    buffer_store_dword v27, off, s[0:3], s33 offset:128 ; 4-byte Folded Spill
458 ; GFX908-NEXT:    buffer_store_dword v28, off, s[0:3], s33 offset:132 ; 4-byte Folded Spill
459 ; GFX908-NEXT:    buffer_store_dword v29, off, s[0:3], s33 offset:136 ; 4-byte Folded Spill
460 ; GFX908-NEXT:    buffer_store_dword v30, off, s[0:3], s33 offset:140 ; 4-byte Folded Spill
461 ; GFX908-NEXT:    buffer_store_dword v31, off, s[0:3], s33 offset:144 ; 4-byte Folded Spill
462 ; GFX908-NEXT:    ;;#ASMSTART
463 ; GFX908-NEXT:    ; def v40
464 ; GFX908-NEXT:    ;;#ASMEND
465 ; GFX908-NEXT:    ;;#ASMSTART
466 ; GFX908-NEXT:    ; def s11
467 ; GFX908-NEXT:    ;;#ASMEND
468 ; GFX908-NEXT:    s_or_saveexec_b64 s[34:35], -1
469 ; GFX908-NEXT:    v_mov_b32_e32 v40, v33
470 ; GFX908-NEXT:    s_mov_b64 exec, s[34:35]
471 ; GFX908-NEXT:    v_writelane_b32 v40, s11, 12
472 ; GFX908-NEXT:    ;;#ASMSTART
473 ; GFX908-NEXT:    ; def s12
474 ; GFX908-NEXT:    ;;#ASMEND
475 ; GFX908-NEXT:    v_writelane_b32 v40, s12, 13
476 ; GFX908-NEXT:    ;;#ASMSTART
477 ; GFX908-NEXT:    ; def s13
478 ; GFX908-NEXT:    ;;#ASMEND
479 ; GFX908-NEXT:    v_writelane_b32 v40, s13, 14
480 ; GFX908-NEXT:    ;;#ASMSTART
481 ; GFX908-NEXT:    ; def s14
482 ; GFX908-NEXT:    ;;#ASMEND
483 ; GFX908-NEXT:    v_writelane_b32 v40, s14, 15
484 ; GFX908-NEXT:    ;;#ASMSTART
485 ; GFX908-NEXT:    ; def s15
486 ; GFX908-NEXT:    ;;#ASMEND
487 ; GFX908-NEXT:    v_writelane_b32 v40, s15, 16
488 ; GFX908-NEXT:    s_getpc_b64 s[10:11]
489 ; GFX908-NEXT:    s_add_u32 s10, s10, foo@gotpcrel32@lo+4
490 ; GFX908-NEXT:    s_addc_u32 s11, s11, foo@gotpcrel32@hi+12
491 ; GFX908-NEXT:    ;;#ASMSTART
492 ; GFX908-NEXT:    ; def s16
493 ; GFX908-NEXT:    ;;#ASMEND
494 ; GFX908-NEXT:    v_writelane_b32 v40, s16, 17
495 ; GFX908-NEXT:    s_load_dwordx2 s[10:11], s[10:11], 0x0
496 ; GFX908-NEXT:    ;;#ASMSTART
497 ; GFX908-NEXT:    ; def s17
498 ; GFX908-NEXT:    ;;#ASMEND
499 ; GFX908-NEXT:    v_writelane_b32 v40, s17, 18
500 ; GFX908-NEXT:    ;;#ASMSTART
501 ; GFX908-NEXT:    ; def s18
502 ; GFX908-NEXT:    ;;#ASMEND
503 ; GFX908-NEXT:    v_writelane_b32 v40, s18, 19
504 ; GFX908-NEXT:    ;;#ASMSTART
505 ; GFX908-NEXT:    ; def s19
506 ; GFX908-NEXT:    ;;#ASMEND
507 ; GFX908-NEXT:    v_writelane_b32 v40, s19, 20
508 ; GFX908-NEXT:    ;;#ASMSTART
509 ; GFX908-NEXT:    ; def s20
510 ; GFX908-NEXT:    ;;#ASMEND
511 ; GFX908-NEXT:    v_writelane_b32 v40, s20, 21
512 ; GFX908-NEXT:    s_waitcnt lgkmcnt(0)
513 ; GFX908-NEXT:    v_writelane_b32 v40, s10, 22
514 ; GFX908-NEXT:    v_writelane_b32 v40, s11, 23
515 ; GFX908-NEXT:    s_or_saveexec_b64 s[34:35], -1
516 ; GFX908-NEXT:    s_mov_b64 exec, s[34:35]
517 ; GFX908-NEXT:    v_readlane_b32 s16, v40, 22
518 ; GFX908-NEXT:    s_mov_b32 s12, s24
519 ; GFX908-NEXT:    s_mov_b32 s13, s23
520 ; GFX908-NEXT:    s_mov_b32 s14, s22
521 ; GFX908-NEXT:    v_mov_b32_e32 v31, v32
522 ; GFX908-NEXT:    s_mov_b32 s15, s21
523 ; GFX908-NEXT:    s_mov_b64 s[10:11], s[26:27]
524 ; GFX908-NEXT:    v_readlane_b32 s17, v40, 23
525 ; GFX908-NEXT:    buffer_store_dword v32, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill
526 ; GFX908-NEXT:    s_swappc_b64 s[30:31], s[16:17]
527 ; GFX908-NEXT:    s_or_saveexec_b64 s[34:35], -1
528 ; GFX908-NEXT:    s_mov_b64 exec, s[34:35]
529 ; GFX908-NEXT:    v_readlane_b32 s11, v40, 12
530 ; GFX908-NEXT:    ;;#ASMSTART
531 ; GFX908-NEXT:    ; use s11
532 ; GFX908-NEXT:    ;;#ASMEND
533 ; GFX908-NEXT:    v_readlane_b32 s12, v40, 13
534 ; GFX908-NEXT:    ;;#ASMSTART
535 ; GFX908-NEXT:    ; use s12
536 ; GFX908-NEXT:    ;;#ASMEND
537 ; GFX908-NEXT:    v_readlane_b32 s13, v40, 14
538 ; GFX908-NEXT:    ;;#ASMSTART
539 ; GFX908-NEXT:    ; use s13
540 ; GFX908-NEXT:    ;;#ASMEND
541 ; GFX908-NEXT:    v_readlane_b32 s14, v40, 15
542 ; GFX908-NEXT:    ;;#ASMSTART
543 ; GFX908-NEXT:    ; use s14
544 ; GFX908-NEXT:    ;;#ASMEND
545 ; GFX908-NEXT:    v_readlane_b32 s15, v40, 16
546 ; GFX908-NEXT:    ;;#ASMSTART
547 ; GFX908-NEXT:    ; use s15
548 ; GFX908-NEXT:    ;;#ASMEND
549 ; GFX908-NEXT:    v_readlane_b32 s16, v40, 17
550 ; GFX908-NEXT:    ;;#ASMSTART
551 ; GFX908-NEXT:    ; use s16
552 ; GFX908-NEXT:    ;;#ASMEND
553 ; GFX908-NEXT:    v_readlane_b32 s17, v40, 18
554 ; GFX908-NEXT:    ;;#ASMSTART
555 ; GFX908-NEXT:    ; use s17
556 ; GFX908-NEXT:    ;;#ASMEND
557 ; GFX908-NEXT:    v_readlane_b32 s18, v40, 19
558 ; GFX908-NEXT:    ;;#ASMSTART
559 ; GFX908-NEXT:    ; use s18
560 ; GFX908-NEXT:    ;;#ASMEND
561 ; GFX908-NEXT:    v_readlane_b32 s19, v40, 20
562 ; GFX908-NEXT:    ;;#ASMSTART
563 ; GFX908-NEXT:    ; use s19
564 ; GFX908-NEXT:    ;;#ASMEND
565 ; GFX908-NEXT:    v_readlane_b32 s20, v40, 21
566 ; GFX908-NEXT:    ;;#ASMSTART
567 ; GFX908-NEXT:    ; use s20
568 ; GFX908-NEXT:    ;;#ASMEND
569 ; GFX908-NEXT:    ;;#ASMSTART
570 ; GFX908-NEXT:    ; def s21
571 ; GFX908-NEXT:    ;;#ASMEND
572 ; GFX908-NEXT:    ;;#ASMSTART
573 ; GFX908-NEXT:    ; def s22
574 ; GFX908-NEXT:    ;;#ASMEND
575 ; GFX908-NEXT:    ;;#ASMSTART
576 ; GFX908-NEXT:    ; def s23
577 ; GFX908-NEXT:    ;;#ASMEND
578 ; GFX908-NEXT:    ;;#ASMSTART
579 ; GFX908-NEXT:    ; def s24
580 ; GFX908-NEXT:    ;;#ASMEND
581 ; GFX908-NEXT:    ;;#ASMSTART
582 ; GFX908-NEXT:    ; def s25
583 ; GFX908-NEXT:    ;;#ASMEND
584 ; GFX908-NEXT:    ;;#ASMSTART
585 ; GFX908-NEXT:    ; def s26
586 ; GFX908-NEXT:    ;;#ASMEND
587 ; GFX908-NEXT:    ;;#ASMSTART
588 ; GFX908-NEXT:    ; def s27
589 ; GFX908-NEXT:    ;;#ASMEND
590 ; GFX908-NEXT:    ;;#ASMSTART
591 ; GFX908-NEXT:    ; def s28
592 ; GFX908-NEXT:    ;;#ASMEND
593 ; GFX908-NEXT:    ;;#ASMSTART
594 ; GFX908-NEXT:    ; def s29
595 ; GFX908-NEXT:    ;;#ASMEND
596 ; GFX908-NEXT:    buffer_load_dword v31, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
597 ; GFX908-NEXT:    v_writelane_b32 v40, s21, 24
598 ; GFX908-NEXT:    v_writelane_b32 v40, s22, 25
599 ; GFX908-NEXT:    v_writelane_b32 v40, s23, 26
600 ; GFX908-NEXT:    v_writelane_b32 v40, s24, 27
601 ; GFX908-NEXT:    v_writelane_b32 v40, s25, 28
602 ; GFX908-NEXT:    v_writelane_b32 v40, s26, 29
603 ; GFX908-NEXT:    v_writelane_b32 v40, s27, 30
604 ; GFX908-NEXT:    v_writelane_b32 v40, s28, 31
605 ; GFX908-NEXT:    v_writelane_b32 v40, s29, 32
606 ; GFX908-NEXT:    v_readlane_b32 s4, v40, 10
607 ; GFX908-NEXT:    v_readlane_b32 s6, v40, 8
608 ; GFX908-NEXT:    v_readlane_b32 s8, v40, 6
609 ; GFX908-NEXT:    v_readlane_b32 s10, v40, 4
610 ; GFX908-NEXT:    v_readlane_b32 s16, v40, 22
611 ; GFX908-NEXT:    v_readlane_b32 s12, v40, 3
612 ; GFX908-NEXT:    v_readlane_b32 s13, v40, 2
613 ; GFX908-NEXT:    v_readlane_b32 s14, v40, 1
614 ; GFX908-NEXT:    v_readlane_b32 s15, v40, 0
615 ; GFX908-NEXT:    v_readlane_b32 s5, v40, 11
616 ; GFX908-NEXT:    v_readlane_b32 s7, v40, 9
617 ; GFX908-NEXT:    v_readlane_b32 s9, v40, 7
618 ; GFX908-NEXT:    v_readlane_b32 s11, v40, 5
619 ; GFX908-NEXT:    v_readlane_b32 s17, v40, 23
620 ; GFX908-NEXT:    s_or_saveexec_b64 s[34:35], -1
621 ; GFX908-NEXT:    s_mov_b64 exec, s[34:35]
622 ; GFX908-NEXT:    s_swappc_b64 s[30:31], s[16:17]
623 ; GFX908-NEXT:    s_or_saveexec_b64 s[34:35], -1
624 ; GFX908-NEXT:    s_mov_b64 exec, s[34:35]
625 ; GFX908-NEXT:    v_readlane_b32 s21, v40, 24
626 ; GFX908-NEXT:    ;;#ASMSTART
627 ; GFX908-NEXT:    ; use s21
628 ; GFX908-NEXT:    ;;#ASMEND
629 ; GFX908-NEXT:    v_readlane_b32 s22, v40, 25
630 ; GFX908-NEXT:    ;;#ASMSTART
631 ; GFX908-NEXT:    ; use s22
632 ; GFX908-NEXT:    ;;#ASMEND
633 ; GFX908-NEXT:    v_readlane_b32 s23, v40, 26
634 ; GFX908-NEXT:    ;;#ASMSTART
635 ; GFX908-NEXT:    ; use s23
636 ; GFX908-NEXT:    ;;#ASMEND
637 ; GFX908-NEXT:    v_readlane_b32 s24, v40, 27
638 ; GFX908-NEXT:    ;;#ASMSTART
639 ; GFX908-NEXT:    ; use s24
640 ; GFX908-NEXT:    ;;#ASMEND
641 ; GFX908-NEXT:    v_readlane_b32 s25, v40, 28
642 ; GFX908-NEXT:    ;;#ASMSTART
643 ; GFX908-NEXT:    ; use s25
644 ; GFX908-NEXT:    ;;#ASMEND
645 ; GFX908-NEXT:    v_readlane_b32 s26, v40, 29
646 ; GFX908-NEXT:    ;;#ASMSTART
647 ; GFX908-NEXT:    ; use s26
648 ; GFX908-NEXT:    ;;#ASMEND
649 ; GFX908-NEXT:    v_readlane_b32 s27, v40, 30
650 ; GFX908-NEXT:    ;;#ASMSTART
651 ; GFX908-NEXT:    ; use s27
652 ; GFX908-NEXT:    ;;#ASMEND
653 ; GFX908-NEXT:    v_readlane_b32 s28, v40, 31
654 ; GFX908-NEXT:    ;;#ASMSTART
655 ; GFX908-NEXT:    ; use s28
656 ; GFX908-NEXT:    ;;#ASMEND
657 ; GFX908-NEXT:    v_readlane_b32 s29, v40, 32
658 ; GFX908-NEXT:    ;;#ASMSTART
659 ; GFX908-NEXT:    ; use s29
660 ; GFX908-NEXT:    ;;#ASMEND
661 ; GFX908-NEXT:    buffer_load_dword v31, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload
662 ; GFX908-NEXT:    v_readlane_b32 s4, v40, 10
663 ; GFX908-NEXT:    v_readlane_b32 s6, v40, 8
664 ; GFX908-NEXT:    v_readlane_b32 s8, v40, 6
665 ; GFX908-NEXT:    v_readlane_b32 s10, v40, 4
666 ; GFX908-NEXT:    v_readlane_b32 s16, v40, 22
667 ; GFX908-NEXT:    v_readlane_b32 s5, v40, 11
668 ; GFX908-NEXT:    v_readlane_b32 s7, v40, 9
669 ; GFX908-NEXT:    v_readlane_b32 s9, v40, 7
670 ; GFX908-NEXT:    v_readlane_b32 s11, v40, 5
671 ; GFX908-NEXT:    v_readlane_b32 s12, v40, 3
672 ; GFX908-NEXT:    v_readlane_b32 s13, v40, 2
673 ; GFX908-NEXT:    v_readlane_b32 s14, v40, 1
674 ; GFX908-NEXT:    v_readlane_b32 s15, v40, 0
675 ; GFX908-NEXT:    v_readlane_b32 s17, v40, 23
676 ; GFX908-NEXT:    s_or_saveexec_b64 s[34:35], -1
677 ; GFX908-NEXT:    s_mov_b64 exec, s[34:35]
678 ; GFX908-NEXT:    s_swappc_b64 s[30:31], s[16:17]
679 ; GFX908-NEXT:    buffer_load_dword v0, off, s[0:3], s33 offset:12 ; 4-byte Folded Reload
680 ; GFX908-NEXT:    buffer_load_dword v1, off, s[0:3], s33 offset:16 ; 4-byte Folded Reload
681 ; GFX908-NEXT:    buffer_load_dword v2, off, s[0:3], s33 offset:20 ; 4-byte Folded Reload
682 ; GFX908-NEXT:    buffer_load_dword v3, off, s[0:3], s33 offset:24 ; 4-byte Folded Reload
683 ; GFX908-NEXT:    buffer_load_dword v4, off, s[0:3], s33 offset:28 ; 4-byte Folded Reload
684 ; GFX908-NEXT:    buffer_load_dword v5, off, s[0:3], s33 offset:32 ; 4-byte Folded Reload
685 ; GFX908-NEXT:    buffer_load_dword v6, off, s[0:3], s33 offset:36 ; 4-byte Folded Reload
686 ; GFX908-NEXT:    buffer_load_dword v7, off, s[0:3], s33 offset:40 ; 4-byte Folded Reload
687 ; GFX908-NEXT:    buffer_load_dword v8, off, s[0:3], s33 offset:44 ; 4-byte Folded Reload
688 ; GFX908-NEXT:    buffer_load_dword v9, off, s[0:3], s33 offset:48 ; 4-byte Folded Reload
689 ; GFX908-NEXT:    buffer_load_dword v10, off, s[0:3], s33 offset:52 ; 4-byte Folded Reload
690 ; GFX908-NEXT:    buffer_load_dword v11, off, s[0:3], s33 offset:56 ; 4-byte Folded Reload
691 ; GFX908-NEXT:    buffer_load_dword v12, off, s[0:3], s33 offset:60 ; 4-byte Folded Reload
692 ; GFX908-NEXT:    buffer_load_dword v13, off, s[0:3], s33 offset:64 ; 4-byte Folded Reload
693 ; GFX908-NEXT:    buffer_load_dword v14, off, s[0:3], s33 offset:68 ; 4-byte Folded Reload
694 ; GFX908-NEXT:    buffer_load_dword v15, off, s[0:3], s33 offset:72 ; 4-byte Folded Reload
695 ; GFX908-NEXT:    buffer_load_dword v16, off, s[0:3], s33 offset:76 ; 4-byte Folded Reload
696 ; GFX908-NEXT:    buffer_load_dword v17, off, s[0:3], s33 offset:80 ; 4-byte Folded Reload
697 ; GFX908-NEXT:    buffer_load_dword v18, off, s[0:3], s33 offset:84 ; 4-byte Folded Reload
698 ; GFX908-NEXT:    buffer_load_dword v19, off, s[0:3], s33 offset:88 ; 4-byte Folded Reload
699 ; GFX908-NEXT:    buffer_load_dword v20, off, s[0:3], s33 offset:92 ; 4-byte Folded Reload
700 ; GFX908-NEXT:    buffer_load_dword v21, off, s[0:3], s33 offset:96 ; 4-byte Folded Reload
701 ; GFX908-NEXT:    buffer_load_dword v22, off, s[0:3], s33 offset:100 ; 4-byte Folded Reload
702 ; GFX908-NEXT:    buffer_load_dword v23, off, s[0:3], s33 offset:104 ; 4-byte Folded Reload
703 ; GFX908-NEXT:    buffer_load_dword v24, off, s[0:3], s33 offset:108 ; 4-byte Folded Reload
704 ; GFX908-NEXT:    buffer_load_dword v25, off, s[0:3], s33 offset:112 ; 4-byte Folded Reload
705 ; GFX908-NEXT:    buffer_load_dword v26, off, s[0:3], s33 offset:116 ; 4-byte Folded Reload
706 ; GFX908-NEXT:    buffer_load_dword v27, off, s[0:3], s33 offset:120 ; 4-byte Folded Reload
707 ; GFX908-NEXT:    buffer_load_dword v28, off, s[0:3], s33 offset:124 ; 4-byte Folded Reload
708 ; GFX908-NEXT:    buffer_load_dword v29, off, s[0:3], s33 offset:128 ; 4-byte Folded Reload
709 ; GFX908-NEXT:    buffer_load_dword v30, off, s[0:3], s33 offset:132 ; 4-byte Folded Reload
710 ; GFX908-NEXT:    buffer_load_dword v31, off, s[0:3], s33 offset:136 ; 4-byte Folded Reload
711 ; GFX908-NEXT:    buffer_load_dword v32, off, s[0:3], s33 offset:140 ; 4-byte Folded Reload
712 ; GFX908-NEXT:    buffer_load_dword v33, off, s[0:3], s33 offset:144 ; 4-byte Folded Reload
713 ; GFX908-NEXT:    s_mov_b64 s[4:5], exec
714 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
715 ; GFX908-NEXT:    flat_store_dwordx4 v[0:1], v[30:33] offset:112
716 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
717 ; GFX908-NEXT:    flat_store_dwordx4 v[0:1], v[26:29] offset:96
718 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
719 ; GFX908-NEXT:    flat_store_dwordx4 v[0:1], v[22:25] offset:80
720 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
721 ; GFX908-NEXT:    flat_store_dwordx4 v[0:1], v[18:21] offset:64
722 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
723 ; GFX908-NEXT:    flat_store_dwordx4 v[0:1], v[14:17] offset:48
724 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
725 ; GFX908-NEXT:    flat_store_dwordx4 v[0:1], v[10:13] offset:32
726 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
727 ; GFX908-NEXT:    flat_store_dwordx4 v[0:1], v[6:9] offset:16
728 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
729 ; GFX908-NEXT:    flat_store_dwordx4 v[0:1], v[2:5]
730 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
731 ; GFX908-NEXT:    s_mov_b64 exec, 1
732 ; GFX908-NEXT:    buffer_store_dword v0, off, s[0:3], s33 offset:164
733 ; GFX908-NEXT:    buffer_load_dword v0, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload
734 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
735 ; GFX908-NEXT:    v_readlane_b32 s31, v0, 0
736 ; GFX908-NEXT:    buffer_load_dword v0, off, s[0:3], s33 offset:164
737 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
738 ; GFX908-NEXT:    s_mov_b64 exec, s[4:5]
739 ; GFX908-NEXT:    s_mov_b64 s[4:5], exec
740 ; GFX908-NEXT:    s_mov_b64 exec, 1
741 ; GFX908-NEXT:    buffer_store_dword v0, off, s[0:3], s33 offset:164
742 ; GFX908-NEXT:    buffer_load_dword v0, off, s[0:3], s33 ; 4-byte Folded Reload
743 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
744 ; GFX908-NEXT:    v_readlane_b32 s30, v0, 0
745 ; GFX908-NEXT:    buffer_load_dword v0, off, s[0:3], s33 offset:164
746 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
747 ; GFX908-NEXT:    s_mov_b64 exec, s[4:5]
748 ; GFX908-NEXT:    buffer_load_dword v0, off, s[0:3], s33 offset:160 ; 4-byte Folded Reload
749 ; GFX908-NEXT:    ; kill: killed $vgpr40
750 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
751 ; GFX908-NEXT:    v_readfirstlane_b32 s4, v0
752 ; GFX908-NEXT:    s_xor_saveexec_b64 s[6:7], -1
753 ; GFX908-NEXT:    buffer_load_dword v33, off, s[0:3], s33 offset:148 ; 4-byte Folded Reload
754 ; GFX908-NEXT:    buffer_load_dword v2, off, s[0:3], s33 offset:156 ; 4-byte Folded Reload
755 ; GFX908-NEXT:    s_mov_b64 exec, -1
756 ; GFX908-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:152 ; 4-byte Folded Reload
757 ; GFX908-NEXT:    s_mov_b64 exec, s[6:7]
758 ; GFX908-NEXT:    s_addk_i32 s32, 0xd400
759 ; GFX908-NEXT:    s_mov_b32 s33, s4
760 ; GFX908-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
761 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
762   %vreg0 = call <32 x float> asm sideeffect "; def $0", "=v"()
763   %v40 = call i32 asm sideeffect "; def $0","=${v40}"()
765   %s11 = call i32 asm sideeffect "; def $0","=${s11}"()
766   %s12 = call i32 asm sideeffect "; def $0","=${s12}"()
767   %s13 = call i32 asm sideeffect "; def $0","=${s13}"()
768   %s14 = call i32 asm sideeffect "; def $0","=${s14}"()
769   %s15 = call i32 asm sideeffect "; def $0","=${s15}"()
770   %s16 = call i32 asm sideeffect "; def $0","=${s16}"()
771   %s17 = call i32 asm sideeffect "; def $0","=${s17}"()
772   %s18 = call i32 asm sideeffect "; def $0","=${s18}"()
773   %s19 = call i32 asm sideeffect "; def $0","=${s19}"()
774   %s20 = call i32 asm sideeffect "; def $0","=${s20}"()
775   call void @foo()
776   call void asm sideeffect "; use $0","${s11}"(i32 %s11)
777   call void asm sideeffect "; use $0","${s12}"(i32 %s12)
778   call void asm sideeffect "; use $0","${s13}"(i32 %s13)
779   call void asm sideeffect "; use $0","${s14}"(i32 %s14)
780   call void asm sideeffect "; use $0","${s15}"(i32 %s15)
781   call void asm sideeffect "; use $0","${s16}"(i32 %s16)
782   call void asm sideeffect "; use $0","${s17}"(i32 %s17)
783   call void asm sideeffect "; use $0","${s18}"(i32 %s18)
784   call void asm sideeffect "; use $0","${s19}"(i32 %s19)
785   call void asm sideeffect "; use $0","${s20}"(i32 %s20)
787   %s21 = call i32 asm sideeffect "; def $0","=${s21}"()
788   %s22 = call i32 asm sideeffect "; def $0","=${s22}"()
789   %s23 = call i32 asm sideeffect "; def $0","=${s23}"()
790   %s24 = call i32 asm sideeffect "; def $0","=${s24}"()
791   %s25 = call i32 asm sideeffect "; def $0","=${s25}"()
792   %s26 = call i32 asm sideeffect "; def $0","=${s26}"()
793   %s27 = call i32 asm sideeffect "; def $0","=${s27}"()
794   %s28 = call i32 asm sideeffect "; def $0","=${s28}"()
795   %s29 = call i32 asm sideeffect "; def $0","=${s29}"()
796   call void @foo()
797   call void asm sideeffect "; use $0","${s21}"(i32 %s21)
798   call void asm sideeffect "; use $0","${s22}"(i32 %s22)
799   call void asm sideeffect "; use $0","${s23}"(i32 %s23)
800   call void asm sideeffect "; use $0","${s24}"(i32 %s24)
801   call void asm sideeffect "; use $0","${s25}"(i32 %s25)
802   call void asm sideeffect "; use $0","${s26}"(i32 %s26)
803   call void asm sideeffect "; use $0","${s27}"(i32 %s27)
804   call void asm sideeffect "; use $0","${s28}"(i32 %s28)
805   call void asm sideeffect "; use $0","${s29}"(i32 %s29)
807   call void @foo()
809   store volatile <32 x float> %vreg0, ptr %parg0
811   ret void
814 declare void @foo()
816 attributes #0 = { "amdgpu-num-vgpr"="42" "amdgpu-num-sgpr"="40"}