1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs --stress-regalloc=2 -start-before=greedy -stop-after=virtregrewriter -o - %s | FileCheck -check-prefix=GCN %s
5 name: test_remat_s_mov_b32
6 tracksRegLiveness: true
9 ; GCN-LABEL: name: test_remat_s_mov_b32
10 ; GCN: renamable $sgpr0 = S_MOV_B32 1
11 ; GCN-NEXT: renamable $sgpr1 = S_MOV_B32 2
12 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
13 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
14 ; GCN-NEXT: renamable $sgpr0 = S_MOV_B32 3
15 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
16 ; GCN-NEXT: S_ENDPGM 0
17 %0:sreg_32 = S_MOV_B32 1
18 %1:sreg_32 = S_MOV_B32 2
19 %2:sreg_32 = S_MOV_B32 3
26 name: test_no_remat_s_mov_b32_impuse_exec
27 tracksRegLiveness: true
29 stackPtrOffsetReg: $sgpr32
32 ; GCN-LABEL: name: test_no_remat_s_mov_b32_impuse_exec
33 ; GCN: $exec = IMPLICIT_DEF
34 ; GCN-NEXT: renamable $sgpr0 = S_MOV_B32 1, implicit $exec
35 ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.1, implicit $exec, implicit $sgpr32 :: (store (s32) into %stack.1, addrspace 5)
36 ; GCN-NEXT: renamable $sgpr1 = S_MOV_B32 2, implicit $exec
37 ; GCN-NEXT: renamable $sgpr0 = S_MOV_B32 3, implicit $exec
38 ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.0, implicit $exec, implicit $sgpr32 :: (store (s32) into %stack.0, addrspace 5)
39 ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sgpr32 :: (load (s32) from %stack.1, addrspace 5)
40 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
41 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
42 ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sgpr32 :: (load (s32) from %stack.0, addrspace 5)
43 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
44 ; GCN-NEXT: S_ENDPGM 0
46 %0:sreg_32 = S_MOV_B32 1, implicit $exec
47 %1:sreg_32 = S_MOV_B32 2, implicit $exec
48 %2:sreg_32 = S_MOV_B32 3, implicit $exec
54 # The liverange of %0 covers a point of rematerialization, source value is
57 name: test_remat_s_mov_b32_vreg_src_long_lr
58 tracksRegLiveness: true
60 stackPtrOffsetReg: $sgpr32
63 ; GCN-LABEL: name: test_remat_s_mov_b32_vreg_src_long_lr
64 ; GCN: renamable $sgpr0 = IMPLICIT_DEF
65 ; GCN-NEXT: renamable $sgpr1 = S_MOV_B32 renamable $sgpr0
66 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
67 ; GCN-NEXT: renamable $sgpr1 = S_MOV_B32 renamable $sgpr0
68 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
69 ; GCN-NEXT: renamable $sgpr1 = S_MOV_B32 renamable $sgpr0
70 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
71 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
72 ; GCN-NEXT: S_ENDPGM 0
73 %0:sreg_32 = IMPLICIT_DEF
74 %1:sreg_32 = S_MOV_B32 %0:sreg_32
75 %2:sreg_32 = S_MOV_B32 %0:sreg_32
76 %3:sreg_32 = S_MOV_B32 %0:sreg_32
83 # The liverange of %0 does not cover a point of rematerialization, source value is
84 # unavailable and we do not want to artificially extend the liverange.
86 name: test_no_remat_s_mov_b32_vreg_src_short_lr
87 tracksRegLiveness: true
89 stackPtrOffsetReg: $sgpr32
92 ; GCN-LABEL: name: test_no_remat_s_mov_b32_vreg_src_short_lr
93 ; GCN: renamable $sgpr0 = IMPLICIT_DEF
94 ; GCN-NEXT: renamable $sgpr1 = S_MOV_B32 renamable $sgpr0
95 ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr1, %stack.1, implicit $exec, implicit $sgpr32 :: (store (s32) into %stack.1, addrspace 5)
96 ; GCN-NEXT: renamable $sgpr1 = S_MOV_B32 renamable $sgpr0
97 ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr1, %stack.0, implicit $exec, implicit $sgpr32 :: (store (s32) into %stack.0, addrspace 5)
98 ; GCN-NEXT: renamable $sgpr0 = S_MOV_B32 killed renamable $sgpr0
99 ; GCN-NEXT: renamable $sgpr1 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sgpr32 :: (load (s32) from %stack.1, addrspace 5)
100 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
101 ; GCN-NEXT: renamable $sgpr1 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sgpr32 :: (load (s32) from %stack.0, addrspace 5)
102 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
103 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
104 ; GCN-NEXT: S_ENDPGM 0
105 %0:sreg_32 = IMPLICIT_DEF
106 %1:sreg_32 = S_MOV_B32 %0:sreg_32
107 %2:sreg_32 = S_MOV_B32 %0:sreg_32
108 %3:sreg_32 = S_MOV_B32 %0:sreg_32
115 name: test_remat_s_mov_b64
116 tracksRegLiveness: true
119 ; GCN-LABEL: name: test_remat_s_mov_b64
120 ; GCN: renamable $sgpr0_sgpr1 = S_MOV_B64 1
121 ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_MOV_B64 2
122 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
123 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr3
124 ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_MOV_B64 3
125 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
126 ; GCN-NEXT: S_ENDPGM 0
127 %0:sgpr_64 = S_MOV_B64 1
128 %1:sgpr_64 = S_MOV_B64 2
129 %2:sgpr_64 = S_MOV_B64 3
136 name: test_remat_s_brev_b32
137 tracksRegLiveness: true
140 ; GCN-LABEL: name: test_remat_s_brev_b32
141 ; GCN: renamable $sgpr0 = S_BREV_B32 1
142 ; GCN-NEXT: renamable $sgpr1 = S_BREV_B32 2
143 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
144 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
145 ; GCN-NEXT: renamable $sgpr0 = S_BREV_B32 3
146 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
147 ; GCN-NEXT: S_ENDPGM 0
148 %0:sreg_32 = S_BREV_B32 1
149 %1:sreg_32 = S_BREV_B32 2
150 %2:sreg_32 = S_BREV_B32 3
157 name: test_remat_s_brev_b64
158 tracksRegLiveness: true
161 ; GCN-LABEL: name: test_remat_s_brev_b64
162 ; GCN: renamable $sgpr0_sgpr1 = S_BREV_B64 1
163 ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_BREV_B64 2
164 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
165 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr3
166 ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_BREV_B64 3
167 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
168 ; GCN-NEXT: S_ENDPGM 0
169 %0:sgpr_64 = S_BREV_B64 1
170 %1:sgpr_64 = S_BREV_B64 2
171 %2:sgpr_64 = S_BREV_B64 3
178 name: test_remat_s_ff0_i32_b32
179 tracksRegLiveness: true
182 ; GCN-LABEL: name: test_remat_s_ff0_i32_b32
183 ; GCN: renamable $sgpr0 = S_FF0_I32_B32 1
184 ; GCN-NEXT: renamable $sgpr1 = S_FF0_I32_B32 2
185 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
186 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
187 ; GCN-NEXT: renamable $sgpr0 = S_FF0_I32_B32 3
188 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
189 ; GCN-NEXT: S_ENDPGM 0
190 %0:sreg_32 = S_FF0_I32_B32 1
191 %1:sreg_32 = S_FF0_I32_B32 2
192 %2:sreg_32 = S_FF0_I32_B32 3
199 name: test_remat_s_ff1_i32_b32
200 tracksRegLiveness: true
203 ; GCN-LABEL: name: test_remat_s_ff1_i32_b32
204 ; GCN: renamable $sgpr0 = S_FF1_I32_B32 1
205 ; GCN-NEXT: renamable $sgpr1 = S_FF1_I32_B32 2
206 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
207 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
208 ; GCN-NEXT: renamable $sgpr0 = S_FF1_I32_B32 3
209 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
210 ; GCN-NEXT: S_ENDPGM 0
211 %0:sreg_32 = S_FF1_I32_B32 1
212 %1:sreg_32 = S_FF1_I32_B32 2
213 %2:sreg_32 = S_FF1_I32_B32 3
220 name: test_remat_s_ff0_i32_b64
221 tracksRegLiveness: true
224 ; GCN-LABEL: name: test_remat_s_ff0_i32_b64
225 ; GCN: renamable $sgpr0 = S_FF0_I32_B64 1
226 ; GCN-NEXT: renamable $sgpr1 = S_FF0_I32_B64 2
227 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
228 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
229 ; GCN-NEXT: renamable $sgpr0 = S_FF0_I32_B64 3
230 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
231 ; GCN-NEXT: S_ENDPGM 0
232 %0:sreg_32 = S_FF0_I32_B64 1
233 %1:sreg_32 = S_FF0_I32_B64 2
234 %2:sreg_32 = S_FF0_I32_B64 3
241 name: test_remat_s_ff1_i32_b64
242 tracksRegLiveness: true
245 ; GCN-LABEL: name: test_remat_s_ff1_i32_b64
246 ; GCN: renamable $sgpr0 = S_FF1_I32_B64 1
247 ; GCN-NEXT: renamable $sgpr1 = S_FF1_I32_B64 2
248 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
249 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
250 ; GCN-NEXT: renamable $sgpr0 = S_FF1_I32_B64 3
251 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
252 ; GCN-NEXT: S_ENDPGM 0
253 %0:sreg_32 = S_FF1_I32_B64 1
254 %1:sreg_32 = S_FF1_I32_B64 2
255 %2:sreg_32 = S_FF1_I32_B64 3
262 name: test_remat_s_flbit_i32_b32
263 tracksRegLiveness: true
266 ; GCN-LABEL: name: test_remat_s_flbit_i32_b32
267 ; GCN: renamable $sgpr0 = S_FLBIT_I32_B32 1
268 ; GCN-NEXT: renamable $sgpr1 = S_FLBIT_I32_B32 2
269 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
270 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
271 ; GCN-NEXT: renamable $sgpr0 = S_FLBIT_I32_B32 3
272 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
273 ; GCN-NEXT: S_ENDPGM 0
274 %0:sreg_32 = S_FLBIT_I32_B32 1
275 %1:sreg_32 = S_FLBIT_I32_B32 2
276 %2:sreg_32 = S_FLBIT_I32_B32 3
283 name: test_remat_s_flbit_i32_b64
284 tracksRegLiveness: true
287 ; GCN-LABEL: name: test_remat_s_flbit_i32_b64
288 ; GCN: renamable $sgpr0 = S_FLBIT_I32_B64 1
289 ; GCN-NEXT: renamable $sgpr1 = S_FLBIT_I32_B64 2
290 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
291 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
292 ; GCN-NEXT: renamable $sgpr0 = S_FLBIT_I32_B64 3
293 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
294 ; GCN-NEXT: S_ENDPGM 0
295 %0:sreg_32 = S_FLBIT_I32_B64 1
296 %1:sreg_32 = S_FLBIT_I32_B64 2
297 %2:sreg_32 = S_FLBIT_I32_B64 3
304 name: test_remat_s_flbit_i32
305 tracksRegLiveness: true
308 ; GCN-LABEL: name: test_remat_s_flbit_i32
309 ; GCN: renamable $sgpr0 = S_FLBIT_I32 1
310 ; GCN-NEXT: renamable $sgpr1 = S_FLBIT_I32 2
311 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
312 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
313 ; GCN-NEXT: renamable $sgpr0 = S_FLBIT_I32 3
314 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
315 ; GCN-NEXT: S_ENDPGM 0
316 %0:sreg_32 = S_FLBIT_I32 1
317 %1:sreg_32 = S_FLBIT_I32 2
318 %2:sreg_32 = S_FLBIT_I32 3
325 name: test_remat_s_flbit_i32_i64
326 tracksRegLiveness: true
329 ; GCN-LABEL: name: test_remat_s_flbit_i32_i64
330 ; GCN: renamable $sgpr0 = S_FLBIT_I32_I64 1
331 ; GCN-NEXT: renamable $sgpr1 = S_FLBIT_I32_I64 2
332 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
333 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
334 ; GCN-NEXT: renamable $sgpr0 = S_FLBIT_I32_I64 3
335 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
336 ; GCN-NEXT: S_ENDPGM 0
337 %0:sreg_32 = S_FLBIT_I32_I64 1
338 %1:sreg_32 = S_FLBIT_I32_I64 2
339 %2:sreg_32 = S_FLBIT_I32_I64 3
346 name: test_remat_s_sext_i32_i8
347 tracksRegLiveness: true
350 ; GCN-LABEL: name: test_remat_s_sext_i32_i8
351 ; GCN: renamable $sgpr0 = S_SEXT_I32_I8 1
352 ; GCN-NEXT: renamable $sgpr1 = S_SEXT_I32_I8 2
353 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
354 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
355 ; GCN-NEXT: renamable $sgpr0 = S_SEXT_I32_I8 3
356 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
357 ; GCN-NEXT: S_ENDPGM 0
358 %0:sreg_32 = S_SEXT_I32_I8 1
359 %1:sreg_32 = S_SEXT_I32_I8 2
360 %2:sreg_32 = S_SEXT_I32_I8 3
367 name: test_remat_s_sext_i32_i16
368 tracksRegLiveness: true
371 ; GCN-LABEL: name: test_remat_s_sext_i32_i16
372 ; GCN: renamable $sgpr0 = S_SEXT_I32_I16 1
373 ; GCN-NEXT: renamable $sgpr1 = S_SEXT_I32_I16 2
374 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
375 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
376 ; GCN-NEXT: renamable $sgpr0 = S_SEXT_I32_I16 3
377 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
378 ; GCN-NEXT: S_ENDPGM 0
379 %0:sreg_32 = S_SEXT_I32_I16 1
380 %1:sreg_32 = S_SEXT_I32_I16 2
381 %2:sreg_32 = S_SEXT_I32_I16 3
388 name: test_remat_s_bitreplicate_b64_b32
389 tracksRegLiveness: true
392 ; GCN-LABEL: name: test_remat_s_bitreplicate_b64_b32
393 ; GCN: renamable $sgpr0_sgpr1 = S_BITREPLICATE_B64_B32 1
394 ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_BITREPLICATE_B64_B32 2
395 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
396 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr3
397 ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_BITREPLICATE_B64_B32 3
398 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
399 ; GCN-NEXT: S_ENDPGM 0
400 %0:sgpr_64 = S_BITREPLICATE_B64_B32 1
401 %1:sgpr_64 = S_BITREPLICATE_B64_B32 2
402 %2:sgpr_64 = S_BITREPLICATE_B64_B32 3
409 name: test_remat_s_bfm_b32
410 tracksRegLiveness: true
413 ; GCN-LABEL: name: test_remat_s_bfm_b32
414 ; GCN: renamable $sgpr0 = S_BFM_B32 1, 1
415 ; GCN-NEXT: renamable $sgpr1 = S_BFM_B32 2, 2
416 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
417 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
418 ; GCN-NEXT: renamable $sgpr0 = S_BFM_B32 3, 3
419 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
420 ; GCN-NEXT: S_ENDPGM 0
421 %0:sreg_32 = S_BFM_B32 1, 1
422 %1:sreg_32 = S_BFM_B32 2, 2
423 %2:sreg_32 = S_BFM_B32 3, 3
430 name: test_remat_s_bfm_b64
431 tracksRegLiveness: true
434 ; GCN-LABEL: name: test_remat_s_bfm_b64
435 ; GCN: renamable $sgpr0_sgpr1 = S_BFM_B64 1, 1
436 ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_BFM_B64 2, 2
437 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
438 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr3
439 ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_BFM_B64 3, 3
440 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
441 ; GCN-NEXT: S_ENDPGM 0
442 %0:sgpr_64 = S_BFM_B64 1, 1
443 %1:sgpr_64 = S_BFM_B64 2, 2
444 %2:sgpr_64 = S_BFM_B64 3, 3
451 name: test_remat_s_mul_i32
452 tracksRegLiveness: true
455 ; GCN-LABEL: name: test_remat_s_mul_i32
456 ; GCN: renamable $sgpr0 = S_MUL_I32 1, 1
457 ; GCN-NEXT: renamable $sgpr1 = S_MUL_I32 2, 2
458 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
459 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
460 ; GCN-NEXT: renamable $sgpr0 = S_MUL_I32 3, 3
461 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
462 ; GCN-NEXT: S_ENDPGM 0
463 %0:sreg_32 = S_MUL_I32 1, 1
464 %1:sreg_32 = S_MUL_I32 2, 2
465 %2:sreg_32 = S_MUL_I32 3, 3
472 name: test_remat_s_mul_hi_i32
473 tracksRegLiveness: true
476 ; GCN-LABEL: name: test_remat_s_mul_hi_i32
477 ; GCN: renamable $sgpr0 = S_MUL_HI_I32 1, 1
478 ; GCN-NEXT: renamable $sgpr1 = S_MUL_HI_I32 2, 2
479 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
480 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
481 ; GCN-NEXT: renamable $sgpr0 = S_MUL_HI_I32 3, 3
482 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
483 ; GCN-NEXT: S_ENDPGM 0
484 %0:sreg_32 = S_MUL_HI_I32 1, 1
485 %1:sreg_32 = S_MUL_HI_I32 2, 2
486 %2:sreg_32 = S_MUL_HI_I32 3, 3
493 name: test_remat_s_mul_hi_u32
494 tracksRegLiveness: true
497 ; GCN-LABEL: name: test_remat_s_mul_hi_u32
498 ; GCN: renamable $sgpr0 = S_MUL_HI_U32 1, 1
499 ; GCN-NEXT: renamable $sgpr1 = S_MUL_HI_U32 2, 2
500 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
501 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
502 ; GCN-NEXT: renamable $sgpr0 = S_MUL_HI_U32 3, 3
503 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
504 ; GCN-NEXT: S_ENDPGM 0
505 %0:sreg_32 = S_MUL_HI_U32 1, 1
506 %1:sreg_32 = S_MUL_HI_U32 2, 2
507 %2:sreg_32 = S_MUL_HI_U32 3, 3
514 name: test_remat_s_pack_ll_b32_b16
515 tracksRegLiveness: true
518 ; GCN-LABEL: name: test_remat_s_pack_ll_b32_b16
519 ; GCN: renamable $sgpr0 = S_PACK_LL_B32_B16 1, 1
520 ; GCN-NEXT: renamable $sgpr1 = S_PACK_LL_B32_B16 2, 2
521 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
522 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
523 ; GCN-NEXT: renamable $sgpr0 = S_PACK_LL_B32_B16 3, 3
524 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
525 ; GCN-NEXT: S_ENDPGM 0
526 %0:sreg_32 = S_PACK_LL_B32_B16 1, 1
527 %1:sreg_32 = S_PACK_LL_B32_B16 2, 2
528 %2:sreg_32 = S_PACK_LL_B32_B16 3, 3
535 name: test_remat_s_pack_lh_b32_b16
536 tracksRegLiveness: true
539 ; GCN-LABEL: name: test_remat_s_pack_lh_b32_b16
540 ; GCN: renamable $sgpr0 = S_PACK_LH_B32_B16 1, 1
541 ; GCN-NEXT: renamable $sgpr1 = S_PACK_LH_B32_B16 2, 2
542 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
543 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
544 ; GCN-NEXT: renamable $sgpr0 = S_PACK_LH_B32_B16 3, 3
545 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
546 ; GCN-NEXT: S_ENDPGM 0
547 %0:sreg_32 = S_PACK_LH_B32_B16 1, 1
548 %1:sreg_32 = S_PACK_LH_B32_B16 2, 2
549 %2:sreg_32 = S_PACK_LH_B32_B16 3, 3
556 name: test_remat_s_pack_hh_b32_b16
557 tracksRegLiveness: true
560 ; GCN-LABEL: name: test_remat_s_pack_hh_b32_b16
561 ; GCN: renamable $sgpr0 = S_PACK_HH_B32_B16 1, 1
562 ; GCN-NEXT: renamable $sgpr1 = S_PACK_HH_B32_B16 2, 2
563 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
564 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
565 ; GCN-NEXT: renamable $sgpr0 = S_PACK_HH_B32_B16 3, 3
566 ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
567 ; GCN-NEXT: S_ENDPGM 0
568 %0:sreg_32 = S_PACK_HH_B32_B16 1, 1
569 %1:sreg_32 = S_PACK_HH_B32_B16 2, 2
570 %2:sreg_32 = S_PACK_HH_B32_B16 3, 3