[AMDGPU] Add True16 register classes.
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / remat-smrd.mir
blobfb443df1640eb2a9ad5dab478ad0c27c5d489697
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 # Case that should really rematerialize
5 ---
6 name:            test_remat_s_load_dword_imm
7 tracksRegLiveness: true
8 body:             |
9   bb.0:
10     liveins: $sgpr8_sgpr9
11     ; GCN-LABEL: name: test_remat_s_load_dword_imm
12     ; GCN: liveins: $sgpr8_sgpr9
13     ; GCN-NEXT: {{  $}}
14     ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr9
15     ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 0, 0 :: (dereferenceable invariant load (s32), addrspace 4)
16     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.0, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.0, addrspace 5)
17     ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 4, 0 :: (dereferenceable invariant load (s32), addrspace 4)
18     ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 8, 0 :: (dereferenceable invariant load (s32), addrspace 4)
19     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.1, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.1, addrspace 5)
20     ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.0, addrspace 5)
21     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
22     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
23     ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.1, addrspace 5)
24     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
25     ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr3
26     %0:sreg_64_xexec = COPY $sgpr8_sgpr9
27     %1:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 0, 0 :: (invariant dereferenceable load (s32), addrspace 4)
28     %2:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 4, 0 :: (invariant dereferenceable load (s32), addrspace 4)
29     %3:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 8, 0 :: (invariant dereferenceable load (s32), addrspace 4)
30     S_NOP 0, implicit %1
31     S_NOP 0, implicit %2
32     S_NOP 0, implicit %3
33     S_ENDPGM 0, implicit %0
34 ...
36 ---
37 name:            test_remat_s_load_dword_immx2
38 tracksRegLiveness: true
39 body:             |
40   bb.0:
41     liveins: $sgpr8_sgpr9
42     ; GCN-LABEL: name: test_remat_s_load_dword_immx2
43     ; GCN: liveins: $sgpr8_sgpr9
44     ; GCN-NEXT: {{  $}}
45     ; GCN-NEXT: renamable $sgpr0_sgpr1 = COPY $sgpr8_sgpr9
46     ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_LOAD_DWORDX2_IMM renamable $sgpr0_sgpr1, 0, 0 :: (dereferenceable invariant load (s64), addrspace 4)
47     ; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr2_sgpr3, %stack.1, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.1, align 4, addrspace 5)
48     ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_LOAD_DWORDX2_IMM renamable $sgpr0_sgpr1, 4, 0 :: (dereferenceable invariant load (s64), addrspace 4)
49     ; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr2_sgpr3, %stack.0, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.0, align 4, addrspace 5)
50     ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_LOAD_DWORDX2_IMM renamable $sgpr0_sgpr1, 8, 0 :: (dereferenceable invariant load (s64), addrspace 4)
51     ; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr2_sgpr3, %stack.2, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.2, align 4, addrspace 5)
52     ; GCN-NEXT: renamable $sgpr2_sgpr3 = SI_SPILL_S64_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.1, align 4, addrspace 5)
53     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr3
54     ; GCN-NEXT: renamable $sgpr2_sgpr3 = SI_SPILL_S64_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.0, align 4, addrspace 5)
55     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr3
56     ; GCN-NEXT: renamable $sgpr2_sgpr3 = SI_SPILL_S64_RESTORE %stack.2, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.2, align 4, addrspace 5)
57     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr3
58     ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr1
59     %0:sreg_64_xexec = COPY $sgpr8_sgpr9
60     %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 0, 0 :: (invariant dereferenceable load (s64), addrspace 4)
61     %2:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 4, 0 :: (invariant dereferenceable load (s64), addrspace 4)
62     %3:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 8, 0 :: (invariant dereferenceable load (s64), addrspace 4)
63     S_NOP 0, implicit %1
64     S_NOP 0, implicit %2
65     S_NOP 0, implicit %3
66     S_ENDPGM 0, implicit %0
67 ...
69 ---
70 name:            test_remat_s_load_dword_immx4
71 tracksRegLiveness: true
72 body:             |
73   bb.0:
74     liveins: $sgpr8_sgpr9
75     ; GCN-LABEL: name: test_remat_s_load_dword_immx4
76     ; GCN: liveins: $sgpr8_sgpr9
77     ; GCN-NEXT: {{  $}}
78     ; GCN-NEXT: renamable $sgpr0_sgpr1 = COPY $sgpr8_sgpr9
79     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7 = S_LOAD_DWORDX4_IMM renamable $sgpr0_sgpr1, 0, 0 :: (dereferenceable invariant load (s128), addrspace 4)
80     ; GCN-NEXT: SI_SPILL_S128_SAVE killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, %stack.1, implicit $exec, implicit $sp_reg :: (store (s128) into %stack.1, align 4, addrspace 5)
81     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7 = S_LOAD_DWORDX4_IMM renamable $sgpr0_sgpr1, 4, 0 :: (dereferenceable invariant load (s128), addrspace 4)
82     ; GCN-NEXT: SI_SPILL_S128_SAVE killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, %stack.0, implicit $exec, implicit $sp_reg :: (store (s128) into %stack.0, align 4, addrspace 5)
83     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7 = S_LOAD_DWORDX4_IMM renamable $sgpr0_sgpr1, 8, 0 :: (dereferenceable invariant load (s128), addrspace 4)
84     ; GCN-NEXT: SI_SPILL_S128_SAVE killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, %stack.2, implicit $exec, implicit $sp_reg :: (store (s128) into %stack.2, align 4, addrspace 5)
85     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7 = SI_SPILL_S128_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s128) from %stack.1, align 4, addrspace 5)
86     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7
87     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7 = SI_SPILL_S128_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s128) from %stack.0, align 4, addrspace 5)
88     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7
89     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7 = SI_SPILL_S128_RESTORE %stack.2, implicit $exec, implicit $sp_reg :: (load (s128) from %stack.2, align 4, addrspace 5)
90     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7
91     ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr1
92     %0:sreg_64_xexec = COPY $sgpr8_sgpr9
93     %1:sgpr_128 = S_LOAD_DWORDX4_IMM %0, 0, 0 :: (invariant dereferenceable load (s128), addrspace 4)
94     %2:sgpr_128 = S_LOAD_DWORDX4_IMM %0, 4, 0 :: (invariant dereferenceable load (s128), addrspace 4)
95     %3:sgpr_128 = S_LOAD_DWORDX4_IMM %0, 8, 0 :: (invariant dereferenceable load (s128), addrspace 4)
96     S_NOP 0, implicit %1
97     S_NOP 0, implicit %2
98     S_NOP 0, implicit %3
99     S_ENDPGM 0, implicit %0
103 name:            test_remat_s_load_dword_immx8
104 tracksRegLiveness: true
105 body:             |
106   bb.0:
107     liveins: $sgpr8_sgpr9
108     ; GCN-LABEL: name: test_remat_s_load_dword_immx8
109     ; GCN: liveins: $sgpr8_sgpr9
110     ; GCN-NEXT: {{  $}}
111     ; GCN-NEXT: renamable $sgpr0_sgpr1 = COPY $sgpr8_sgpr9
112     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11 = S_LOAD_DWORDX8_IMM renamable $sgpr0_sgpr1, 0, 0 :: (dereferenceable invariant load (s256), addrspace 4)
113     ; GCN-NEXT: SI_SPILL_S256_SAVE killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11, %stack.1, implicit $exec, implicit $sp_reg :: (store (s256) into %stack.1, align 4, addrspace 5)
114     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11 = S_LOAD_DWORDX8_IMM renamable $sgpr0_sgpr1, 4, 0 :: (dereferenceable invariant load (s256), addrspace 4)
115     ; GCN-NEXT: SI_SPILL_S256_SAVE killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11, %stack.0, implicit $exec, implicit $sp_reg :: (store (s256) into %stack.0, align 4, addrspace 5)
116     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11 = S_LOAD_DWORDX8_IMM renamable $sgpr0_sgpr1, 8, 0 :: (dereferenceable invariant load (s256), addrspace 4)
117     ; GCN-NEXT: SI_SPILL_S256_SAVE killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11, %stack.2, implicit $exec, implicit $sp_reg :: (store (s256) into %stack.2, align 4, addrspace 5)
118     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11 = SI_SPILL_S256_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s256) from %stack.1, align 4, addrspace 5)
119     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11
120     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11 = SI_SPILL_S256_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s256) from %stack.0, align 4, addrspace 5)
121     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11
122     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11 = SI_SPILL_S256_RESTORE %stack.2, implicit $exec, implicit $sp_reg :: (load (s256) from %stack.2, align 4, addrspace 5)
123     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11
124     ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr1
125     %0:sreg_64_xexec = COPY $sgpr8_sgpr9
126     %1:sgpr_256 = S_LOAD_DWORDX8_IMM %0, 0, 0 :: (invariant dereferenceable load (s256), addrspace 4)
127     %2:sgpr_256 = S_LOAD_DWORDX8_IMM %0, 4, 0 :: (invariant dereferenceable load (s256), addrspace 4)
128     %3:sgpr_256 = S_LOAD_DWORDX8_IMM %0, 8, 0 :: (invariant dereferenceable load (s256), addrspace 4)
129     S_NOP 0, implicit %1
130     S_NOP 0, implicit %2
131     S_NOP 0, implicit %3
132     S_ENDPGM 0, implicit %0
136 name:            test_remat_s_load_dword_immx16
137 tracksRegLiveness: true
138 body:             |
139   bb.0:
140     liveins: $sgpr8_sgpr9
141     ; GCN-LABEL: name: test_remat_s_load_dword_immx16
142     ; GCN: liveins: $sgpr8_sgpr9
143     ; GCN-NEXT: {{  $}}
144     ; GCN-NEXT: renamable $sgpr0_sgpr1 = COPY $sgpr8_sgpr9
145     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = S_LOAD_DWORDX16_IMM renamable $sgpr0_sgpr1, 0, 0 :: (dereferenceable invariant load (s512), addrspace 4)
146     ; GCN-NEXT: SI_SPILL_S512_SAVE killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19, %stack.1, implicit $exec, implicit $sp_reg :: (store (s512) into %stack.1, align 4, addrspace 5)
147     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = S_LOAD_DWORDX16_IMM renamable $sgpr0_sgpr1, 4, 0 :: (dereferenceable invariant load (s512), addrspace 4)
148     ; GCN-NEXT: SI_SPILL_S512_SAVE killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19, %stack.0, implicit $exec, implicit $sp_reg :: (store (s512) into %stack.0, align 4, addrspace 5)
149     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = S_LOAD_DWORDX16_IMM renamable $sgpr0_sgpr1, 8, 0 :: (dereferenceable invariant load (s512), addrspace 4)
150     ; GCN-NEXT: SI_SPILL_S512_SAVE killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19, %stack.2, implicit $exec, implicit $sp_reg :: (store (s512) into %stack.2, align 4, addrspace 5)
151     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = SI_SPILL_S512_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s512) from %stack.1, align 4, addrspace 5)
152     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19
153     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = SI_SPILL_S512_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s512) from %stack.0, align 4, addrspace 5)
154     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19
155     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = SI_SPILL_S512_RESTORE %stack.2, implicit $exec, implicit $sp_reg :: (load (s512) from %stack.2, align 4, addrspace 5)
156     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19
157     ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr1
158     %0:sreg_64_xexec = COPY $sgpr8_sgpr9
159     %1:sgpr_512 = S_LOAD_DWORDX16_IMM %0, 0, 0 :: (invariant dereferenceable load (s512), addrspace 4)
160     %2:sgpr_512 = S_LOAD_DWORDX16_IMM %0, 4, 0 :: (invariant dereferenceable load (s512), addrspace 4)
161     %3:sgpr_512 = S_LOAD_DWORDX16_IMM %0, 8, 0 :: (invariant dereferenceable load (s512), addrspace 4)
162     S_NOP 0, implicit %1
163     S_NOP 0, implicit %2
164     S_NOP 0, implicit %3
165     S_ENDPGM 0, implicit %0
169 name:            test_remat_s_get_waveid_in_workgroup
170 tracksRegLiveness: true
171 body:             |
172   bb.0:
173     liveins: $sgpr8_sgpr9
174     ; GCN-LABEL: name: test_remat_s_get_waveid_in_workgroup
175     ; GCN: liveins: $sgpr8_sgpr9
176     ; GCN-NEXT: {{  $}}
177     ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr9
178     ; GCN-NEXT: renamable $sgpr0 = S_GET_WAVEID_IN_WORKGROUP
179     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.1, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.1, addrspace 5)
180     ; GCN-NEXT: renamable $sgpr1 = S_GET_WAVEID_IN_WORKGROUP
181     ; GCN-NEXT: renamable $sgpr0 = S_GET_WAVEID_IN_WORKGROUP
182     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.0, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.0, addrspace 5)
183     ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.1, addrspace 5)
184     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
185     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
186     ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.0, addrspace 5)
187     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
188     ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr3
189     %0:sreg_64_xexec = COPY $sgpr8_sgpr9
190     %1:sreg_32_xm0_xexec = S_GET_WAVEID_IN_WORKGROUP
191     %2:sreg_32_xm0_xexec = S_GET_WAVEID_IN_WORKGROUP
192     %3:sreg_32_xm0_xexec = S_GET_WAVEID_IN_WORKGROUP
193     S_NOP 0, implicit %1
194     S_NOP 0, implicit %2
195     S_NOP 0, implicit %3
196     S_ENDPGM 0, implicit %0
201 name:            test_remat_s_load_dword_sgpr
202 tracksRegLiveness: true
203 body:             |
204   bb.0:
205     liveins: $sgpr8_sgpr9, $sgpr10
206     ; GCN-LABEL: name: test_remat_s_load_dword_sgpr
207     ; GCN: liveins: $sgpr10, $sgpr8_sgpr9
208     ; GCN-NEXT: {{  $}}
209     ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr9
210     ; GCN-NEXT: renamable $sgpr0 = COPY $sgpr10
211     ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_SGPR renamable $sgpr2_sgpr3, renamable $sgpr0, 0 :: (dereferenceable invariant load (s32), addrspace 4)
212     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr1, %stack.1, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.1, addrspace 5)
213     ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_SGPR renamable $sgpr2_sgpr3, renamable $sgpr0, 0 :: (dereferenceable invariant load (s32), addrspace 4)
214     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr1, %stack.0, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.0, addrspace 5)
215     ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_SGPR renamable $sgpr2_sgpr3, renamable $sgpr0, 0 :: (dereferenceable invariant load (s32), addrspace 4)
216     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr1, %stack.2, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.2, addrspace 5)
217     ; GCN-NEXT: renamable $sgpr1 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.1, addrspace 5)
218     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
219     ; GCN-NEXT: renamable $sgpr1 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.0, addrspace 5)
220     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
221     ; GCN-NEXT: renamable $sgpr1 = SI_SPILL_S32_RESTORE %stack.2, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.2, addrspace 5)
222     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
223     ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr3, implicit killed renamable $sgpr0
224     %0:sreg_64_xexec = COPY $sgpr8_sgpr9
225     %1:sgpr_32 = COPY $sgpr10
226     %2:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR %0, %1, 0 :: (invariant dereferenceable load (s32), addrspace 4)
227     %3:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR %0, %1, 0 :: (invariant dereferenceable load (s32), addrspace 4)
228     %4:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR %0, %1, 0 :: (invariant dereferenceable load (s32), addrspace 4)
229     S_NOP 0, implicit %2
230     S_NOP 0, implicit %3
231     S_NOP 0, implicit %4
232     S_ENDPGM 0, implicit %0, implicit %1
236 name:            test_remat_s_load_dword_sgpr_imm
237 tracksRegLiveness: true
238 body:             |
239   bb.0:
240     liveins: $sgpr8_sgpr9, $sgpr10
241     ; GCN-LABEL: name: test_remat_s_load_dword_sgpr_imm
242     ; GCN: liveins: $sgpr10, $sgpr8_sgpr9
243     ; GCN-NEXT: {{  $}}
244     ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr9
245     ; GCN-NEXT: renamable $sgpr0 = COPY $sgpr10
246     ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_SGPR_IMM renamable $sgpr2_sgpr3, renamable $sgpr0, 0, 0 :: (dereferenceable invariant load (s32), addrspace 4)
247     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr1, %stack.1, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.1, addrspace 5)
248     ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_SGPR_IMM renamable $sgpr2_sgpr3, renamable $sgpr0, 4, 0 :: (dereferenceable invariant load (s32), addrspace 4)
249     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr1, %stack.0, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.0, addrspace 5)
250     ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_SGPR_IMM renamable $sgpr2_sgpr3, renamable $sgpr0, 8, 0 :: (dereferenceable invariant load (s32), addrspace 4)
251     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr1, %stack.2, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.2, addrspace 5)
252     ; GCN-NEXT: renamable $sgpr1 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.1, addrspace 5)
253     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
254     ; GCN-NEXT: renamable $sgpr1 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.0, addrspace 5)
255     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
256     ; GCN-NEXT: renamable $sgpr1 = SI_SPILL_S32_RESTORE %stack.2, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.2, addrspace 5)
257     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
258     ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr3, implicit killed renamable $sgpr0
259     %0:sreg_64_xexec = COPY $sgpr8_sgpr9
260     %1:sgpr_32 = COPY $sgpr10
261     %2:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR_IMM %0, %1, 0, 0 :: (invariant dereferenceable load (s32), addrspace 4)
262     %3:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR_IMM %0, %1, 4, 0 :: (invariant dereferenceable load (s32), addrspace 4)
263     %4:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR_IMM %0, %1, 8, 0 :: (invariant dereferenceable load (s32), addrspace 4)
264     S_NOP 0, implicit %2
265     S_NOP 0, implicit %3
266     S_NOP 0, implicit %4
267     S_ENDPGM 0, implicit %0, implicit %1
271 name:            test_remat_s_load_dword_imm_ci
272 tracksRegLiveness: true
273 body:             |
274   bb.0:
275     liveins: $sgpr8_sgpr9
276     ; GCN-LABEL: name: test_remat_s_load_dword_imm_ci
277     ; GCN: liveins: $sgpr8_sgpr9
278     ; GCN-NEXT: {{  $}}
279     ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr9
280     ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM_ci renamable $sgpr2_sgpr3, 0, 0 :: (dereferenceable invariant load (s32), addrspace 4)
281     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.0, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.0, addrspace 5)
282     ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_IMM_ci renamable $sgpr2_sgpr3, 4, 0 :: (dereferenceable invariant load (s32), addrspace 4)
283     ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM_ci renamable $sgpr2_sgpr3, 8, 0 :: (dereferenceable invariant load (s32), addrspace 4)
284     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.1, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.1, addrspace 5)
285     ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.0, addrspace 5)
286     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
287     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
288     ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.1, addrspace 5)
289     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
290     ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr3
291     %0:sreg_64_xexec = COPY $sgpr8_sgpr9
292     %1:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM_ci %0, 0, 0 :: (invariant dereferenceable load (s32), addrspace 4)
293     %2:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM_ci %0, 4, 0 :: (invariant dereferenceable load (s32), addrspace 4)
294     %3:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM_ci %0, 8, 0 :: (invariant dereferenceable load (s32), addrspace 4)
295     S_NOP 0, implicit %1
296     S_NOP 0, implicit %2
297     S_NOP 0, implicit %3
298     S_ENDPGM 0, implicit %0
302 name:            test_remat_s_buffer_load_dword_imm
303 tracksRegLiveness: true
304 body:             |
305   bb.0:
306     liveins: $sgpr8_sgpr9_sgpr10_sgpr11
307     ; GCN-LABEL: name: test_remat_s_buffer_load_dword_imm
308     ; GCN: liveins: $sgpr8_sgpr9_sgpr10_sgpr11
309     ; GCN-NEXT: {{  $}}
310     ; GCN-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7 = COPY $sgpr8_sgpr9_sgpr10_sgpr11
311     ; GCN-NEXT: renamable $sgpr0 = S_BUFFER_LOAD_DWORD_IMM renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0 :: (dereferenceable invariant load (s32), addrspace 4)
312     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.0, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.0, addrspace 5)
313     ; GCN-NEXT: renamable $sgpr1 = S_BUFFER_LOAD_DWORD_IMM renamable $sgpr4_sgpr5_sgpr6_sgpr7, 4, 0 :: (dereferenceable invariant load (s32), addrspace 4)
314     ; GCN-NEXT: renamable $sgpr0 = S_BUFFER_LOAD_DWORD_IMM renamable $sgpr4_sgpr5_sgpr6_sgpr7, 8, 0 :: (dereferenceable invariant load (s32), addrspace 4)
315     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.1, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.1, addrspace 5)
316     ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.0, addrspace 5)
317     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
318     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
319     ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.1, addrspace 5)
320     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
321     ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr4_sgpr5_sgpr6_sgpr7
322     %0:sgpr_128 = COPY $sgpr8_sgpr9_sgpr10_sgpr11
323     %1:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0, 0, 0 :: (invariant dereferenceable load (s32), addrspace 4)
324     %2:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0, 4, 0 :: (invariant dereferenceable load (s32), addrspace 4)
325     %3:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0, 8, 0 :: (invariant dereferenceable load (s32), addrspace 4)
326     S_NOP 0, implicit %1
327     S_NOP 0, implicit %2
328     S_NOP 0, implicit %3
329     S_ENDPGM 0, implicit %0
333 name:            test_remat_s_scratch_load_dword_imm
334 tracksRegLiveness: true
335 body:             |
336   bb.0:
337     liveins: $sgpr8_sgpr9
338     ; GCN-LABEL: name: test_remat_s_scratch_load_dword_imm
339     ; GCN: liveins: $sgpr8_sgpr9
340     ; GCN-NEXT: {{  $}}
341     ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr9
342     ; GCN-NEXT: renamable $sgpr0 = S_SCRATCH_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 0, 0, implicit $flat_scr :: (dereferenceable invariant load (s32), addrspace 4)
343     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.0, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.0, addrspace 5)
344     ; GCN-NEXT: renamable $sgpr1 = S_SCRATCH_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 4, 0, implicit $flat_scr :: (dereferenceable invariant load (s32), addrspace 4)
345     ; GCN-NEXT: renamable $sgpr0 = S_SCRATCH_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 8, 0, implicit $flat_scr :: (dereferenceable invariant load (s32), addrspace 4)
346     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.1, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.1, addrspace 5)
347     ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.0, addrspace 5)
348     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
349     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
350     ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.1, addrspace 5)
351     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
352     ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr3
353     %0:sreg_64_xexec = COPY $sgpr8_sgpr9
354     %1:sreg_32_xm0_xexec = S_SCRATCH_LOAD_DWORD_IMM %0, 0, 0, implicit $flat_scr :: (invariant dereferenceable load (s32), addrspace 4)
355     %2:sreg_32_xm0_xexec = S_SCRATCH_LOAD_DWORD_IMM %0, 4, 0, implicit $flat_scr :: (invariant dereferenceable load (s32), addrspace 4)
356     %3:sreg_32_xm0_xexec = S_SCRATCH_LOAD_DWORD_IMM %0, 8, 0, implicit $flat_scr :: (invariant dereferenceable load (s32), addrspace 4)
357     S_NOP 0, implicit %1
358     S_NOP 0, implicit %2
359     S_NOP 0, implicit %3
360     S_ENDPGM 0, implicit %0
363 #---------------------------------------------------------------------
364 # Negative tests
365 #---------------------------------------------------------------------
368 name:            test_no_remat_s_load_dword_not_invariant
369 tracksRegLiveness: true
370 body:             |
371   bb.0:
372     liveins: $sgpr8_sgpr9
373     ; GCN-LABEL: name: test_no_remat_s_load_dword_not_invariant
374     ; GCN: liveins: $sgpr8_sgpr9
375     ; GCN-NEXT: {{  $}}
376     ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr9
377     ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 0, 0 :: (dereferenceable load (s32), addrspace 4)
378     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.0, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.0, addrspace 5)
379     ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 4, 0 :: (dereferenceable load (s32), addrspace 4)
380     ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 8, 0 :: (dereferenceable load (s32), addrspace 4)
381     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.1, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.1, addrspace 5)
382     ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.0, addrspace 5)
383     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
384     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
385     ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.1, addrspace 5)
386     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
387     ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr3
388     %0:sreg_64_xexec = COPY $sgpr8_sgpr9
389     %1:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 0, 0 :: (dereferenceable load (s32), addrspace 4)
390     %2:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 4, 0 :: (dereferenceable load (s32), addrspace 4)
391     %3:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 8, 0 :: (dereferenceable load (s32), addrspace 4)
392     S_NOP 0, implicit %1
393     S_NOP 0, implicit %2
394     S_NOP 0, implicit %3
395     S_ENDPGM 0, implicit %0
399 name:            test_no_remat_s_load_dword_not_dereferenceable
400 tracksRegLiveness: true
401 body:             |
402   bb.0:
403     liveins: $sgpr8_sgpr9
404     ; GCN-LABEL: name: test_no_remat_s_load_dword_not_dereferenceable
405     ; GCN: liveins: $sgpr8_sgpr9
406     ; GCN-NEXT: {{  $}}
407     ; GCN-NEXT: renamable $sgpr2_sgpr3 = COPY $sgpr8_sgpr9
408     ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 0, 0 :: (invariant load (s32), addrspace 4)
409     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.0, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.0, addrspace 5)
410     ; GCN-NEXT: renamable $sgpr1 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 4, 0 :: (invariant load (s32), addrspace 4)
411     ; GCN-NEXT: renamable $sgpr0 = S_LOAD_DWORD_IMM renamable $sgpr2_sgpr3, 8, 0 :: (invariant load (s32), addrspace 4)
412     ; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.1, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.1, addrspace 5)
413     ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.0, addrspace 5)
414     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
415     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr1
416     ; GCN-NEXT: renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s32) from %stack.1, addrspace 5)
417     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0
418     ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr2_sgpr3
419     %0:sreg_64_xexec = COPY $sgpr8_sgpr9
420     %1:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 0, 0 :: (invariant load (s32), addrspace 4)
421     %2:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 4, 0 :: (invariant load (s32), addrspace 4)
422     %3:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM %0, 8, 0 :: (invariant load (s32), addrspace 4)
423     S_NOP 0, implicit %1
424     S_NOP 0, implicit %2
425     S_NOP 0, implicit %3
426     S_ENDPGM 0, implicit %0
430 name:            test_no_remat_s_memtime
431 tracksRegLiveness: true
432 body:             |
433   bb.0:
434     liveins: $sgpr8_sgpr9
435     ; GCN-LABEL: name: test_no_remat_s_memtime
436     ; GCN: liveins: $sgpr8_sgpr9
437     ; GCN-NEXT: {{  $}}
438     ; GCN-NEXT: SI_SPILL_S64_SAVE $sgpr8_sgpr9, %stack.0, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.0, align 4, addrspace 5)
439     ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_MEMTIME
440     ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_MEMTIME
441     ; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr0_sgpr1, %stack.2, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.2, align 4, addrspace 5)
442     ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_MEMTIME
443     ; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr0_sgpr1, %stack.1, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.1, align 4, addrspace 5)
444     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr3
445     ; GCN-NEXT: renamable $sgpr0_sgpr1 = SI_SPILL_S64_RESTORE %stack.2, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.2, align 4, addrspace 5)
446     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
447     ; GCN-NEXT: renamable $sgpr0_sgpr1 = SI_SPILL_S64_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.1, align 4, addrspace 5)
448     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
449     ; GCN-NEXT: renamable $sgpr0_sgpr1 = SI_SPILL_S64_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.0, align 4, addrspace 5)
450     ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr1
451     %0:sreg_64_xexec = COPY $sgpr8_sgpr9
452     %1:sreg_64_xexec = S_MEMTIME
453     %2:sreg_64_xexec = S_MEMTIME
454     %3:sreg_64_xexec = S_MEMTIME
455     S_NOP 0, implicit %1
456     S_NOP 0, implicit %2
457     S_NOP 0, implicit %3
458     S_ENDPGM 0, implicit %0
462 name:            test_no_remat_s_memrealtime
463 tracksRegLiveness: true
464 body:             |
465   bb.0:
466     liveins: $sgpr8_sgpr9
467     ; GCN-LABEL: name: test_no_remat_s_memrealtime
468     ; GCN: liveins: $sgpr8_sgpr9
469     ; GCN-NEXT: {{  $}}
470     ; GCN-NEXT: SI_SPILL_S64_SAVE $sgpr8_sgpr9, %stack.0, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.0, align 4, addrspace 5)
471     ; GCN-NEXT: renamable $sgpr2_sgpr3 = S_MEMREALTIME
472     ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_MEMREALTIME
473     ; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr0_sgpr1, %stack.2, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.2, align 4, addrspace 5)
474     ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_MEMREALTIME
475     ; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr0_sgpr1, %stack.1, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.1, align 4, addrspace 5)
476     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr3
477     ; GCN-NEXT: renamable $sgpr0_sgpr1 = SI_SPILL_S64_RESTORE %stack.2, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.2, align 4, addrspace 5)
478     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
479     ; GCN-NEXT: renamable $sgpr0_sgpr1 = SI_SPILL_S64_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.1, align 4, addrspace 5)
480     ; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
481     ; GCN-NEXT: renamable $sgpr0_sgpr1 = SI_SPILL_S64_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.0, align 4, addrspace 5)
482     ; GCN-NEXT: S_ENDPGM 0, implicit killed renamable $sgpr0_sgpr1
483     %0:sreg_64_xexec = COPY $sgpr8_sgpr9
484     %1:sreg_64_xexec = S_MEMREALTIME
485     %2:sreg_64_xexec = S_MEMREALTIME
486     %3:sreg_64_xexec = S_MEMREALTIME
487     S_NOP 0, implicit %1
488     S_NOP 0, implicit %2
489     S_NOP 0, implicit %3
490     S_ENDPGM 0, implicit %0