[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / remat-sop.mir
blob649f0d7f7799637ec1c8dac9cce3a7e56c557dc0
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
4 ---
5 name:            test_remat_s_mov_b32
6 tracksRegLiveness: true
7 body:             |
8   bb.0:
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
20     S_NOP 0, implicit %0
21     S_NOP 0, implicit %1
22     S_NOP 0, implicit %2
23     S_ENDPGM 0
24 ...
25 ---
26 name:            test_no_remat_s_mov_b32_impuse_exec
27 tracksRegLiveness: true
28 machineFunctionInfo:
29   stackPtrOffsetReg:  $sgpr32
30 body:             |
31   bb.0:
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
45     $exec = IMPLICIT_DEF
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
49     S_NOP 0, implicit %0
50     S_NOP 0, implicit %1
51     S_NOP 0, implicit %2
52     S_ENDPGM 0
53 ...
54 # The liverange of %0 covers a point of rematerialization, source value is
55 # available.
56 ---
57 name:            test_remat_s_mov_b32_vreg_src_long_lr
58 tracksRegLiveness: true
59 machineFunctionInfo:
60   stackPtrOffsetReg:  $sgpr32
61 body:             |
62   bb.0:
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
77     S_NOP 0, implicit %1
78     S_NOP 0, implicit %2
79     S_NOP 0, implicit %3
80     S_NOP 0, implicit %0
81     S_ENDPGM 0
82 ...
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.
85 ---
86 name:            test_no_remat_s_mov_b32_vreg_src_short_lr
87 tracksRegLiveness: true
88 machineFunctionInfo:
89   stackPtrOffsetReg:  $sgpr32
90 body:             |
91   bb.0:
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
109     S_NOP 0, implicit %1
110     S_NOP 0, implicit %2
111     S_NOP 0, implicit %3
112     S_ENDPGM 0
115 name:            test_remat_s_mov_b64
116 tracksRegLiveness: true
117 body:             |
118   bb.0:
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
130     S_NOP 0, implicit %0
131     S_NOP 0, implicit %1
132     S_NOP 0, implicit %2
133     S_ENDPGM 0
136 name:            test_remat_s_brev_b32
137 tracksRegLiveness: true
138 body:             |
139   bb.0:
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
151     S_NOP 0, implicit %0
152     S_NOP 0, implicit %1
153     S_NOP 0, implicit %2
154     S_ENDPGM 0
157 name:            test_remat_s_brev_b64
158 tracksRegLiveness: true
159 body:             |
160   bb.0:
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
172     S_NOP 0, implicit %0
173     S_NOP 0, implicit %1
174     S_NOP 0, implicit %2
175     S_ENDPGM 0
178 name:            test_remat_s_ff0_i32_b32
179 tracksRegLiveness: true
180 body:             |
181   bb.0:
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
193     S_NOP 0, implicit %0
194     S_NOP 0, implicit %1
195     S_NOP 0, implicit %2
196     S_ENDPGM 0
199 name:            test_remat_s_ff1_i32_b32
200 tracksRegLiveness: true
201 body:             |
202   bb.0:
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
214     S_NOP 0, implicit %0
215     S_NOP 0, implicit %1
216     S_NOP 0, implicit %2
217     S_ENDPGM 0
220 name:            test_remat_s_ff0_i32_b64
221 tracksRegLiveness: true
222 body:             |
223   bb.0:
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
235     S_NOP 0, implicit %0
236     S_NOP 0, implicit %1
237     S_NOP 0, implicit %2
238     S_ENDPGM 0
241 name:            test_remat_s_ff1_i32_b64
242 tracksRegLiveness: true
243 body:             |
244   bb.0:
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
256     S_NOP 0, implicit %0
257     S_NOP 0, implicit %1
258     S_NOP 0, implicit %2
259     S_ENDPGM 0
262 name:            test_remat_s_flbit_i32_b32
263 tracksRegLiveness: true
264 body:             |
265   bb.0:
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
277     S_NOP 0, implicit %0
278     S_NOP 0, implicit %1
279     S_NOP 0, implicit %2
280     S_ENDPGM 0
283 name:            test_remat_s_flbit_i32_b64
284 tracksRegLiveness: true
285 body:             |
286   bb.0:
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
298     S_NOP 0, implicit %0
299     S_NOP 0, implicit %1
300     S_NOP 0, implicit %2
301     S_ENDPGM 0
304 name:            test_remat_s_flbit_i32
305 tracksRegLiveness: true
306 body:             |
307   bb.0:
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
319     S_NOP 0, implicit %0
320     S_NOP 0, implicit %1
321     S_NOP 0, implicit %2
322     S_ENDPGM 0
325 name:            test_remat_s_flbit_i32_i64
326 tracksRegLiveness: true
327 body:             |
328   bb.0:
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
340     S_NOP 0, implicit %0
341     S_NOP 0, implicit %1
342     S_NOP 0, implicit %2
343     S_ENDPGM 0
346 name:            test_remat_s_sext_i32_i8
347 tracksRegLiveness: true
348 body:             |
349   bb.0:
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
361     S_NOP 0, implicit %0
362     S_NOP 0, implicit %1
363     S_NOP 0, implicit %2
364     S_ENDPGM 0
367 name:            test_remat_s_sext_i32_i16
368 tracksRegLiveness: true
369 body:             |
370   bb.0:
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
382     S_NOP 0, implicit %0
383     S_NOP 0, implicit %1
384     S_NOP 0, implicit %2
385     S_ENDPGM 0
388 name:            test_remat_s_bitreplicate_b64_b32
389 tracksRegLiveness: true
390 body:             |
391   bb.0:
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
403     S_NOP 0, implicit %0
404     S_NOP 0, implicit %1
405     S_NOP 0, implicit %2
406     S_ENDPGM 0
409 name:            test_remat_s_bfm_b32
410 tracksRegLiveness: true
411 body:             |
412   bb.0:
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
424     S_NOP 0, implicit %0
425     S_NOP 0, implicit %1
426     S_NOP 0, implicit %2
427     S_ENDPGM 0
430 name:            test_remat_s_bfm_b64
431 tracksRegLiveness: true
432 body:             |
433   bb.0:
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
445     S_NOP 0, implicit %0
446     S_NOP 0, implicit %1
447     S_NOP 0, implicit %2
448     S_ENDPGM 0
451 name:            test_remat_s_mul_i32
452 tracksRegLiveness: true
453 body:             |
454   bb.0:
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
466     S_NOP 0, implicit %0
467     S_NOP 0, implicit %1
468     S_NOP 0, implicit %2
469     S_ENDPGM 0
472 name:            test_remat_s_mul_hi_i32
473 tracksRegLiveness: true
474 body:             |
475   bb.0:
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
487     S_NOP 0, implicit %0
488     S_NOP 0, implicit %1
489     S_NOP 0, implicit %2
490     S_ENDPGM 0
493 name:            test_remat_s_mul_hi_u32
494 tracksRegLiveness: true
495 body:             |
496   bb.0:
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
508     S_NOP 0, implicit %0
509     S_NOP 0, implicit %1
510     S_NOP 0, implicit %2
511     S_ENDPGM 0
514 name:            test_remat_s_pack_ll_b32_b16
515 tracksRegLiveness: true
516 body:             |
517   bb.0:
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
529     S_NOP 0, implicit %0
530     S_NOP 0, implicit %1
531     S_NOP 0, implicit %2
532     S_ENDPGM 0
535 name:            test_remat_s_pack_lh_b32_b16
536 tracksRegLiveness: true
537 body:             |
538   bb.0:
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
550     S_NOP 0, implicit %0
551     S_NOP 0, implicit %1
552     S_NOP 0, implicit %2
553     S_ENDPGM 0
556 name:            test_remat_s_pack_hh_b32_b16
557 tracksRegLiveness: true
558 body:             |
559   bb.0:
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
571     S_NOP 0, implicit %0
572     S_NOP 0, implicit %1
573     S_NOP 0, implicit %2
574     S_ENDPGM 0