1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX6 %s
3# RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s
4# RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX8 %s
5# RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX10 %s
6# RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX10 %s
7
8---
9
10name: load_constant_s32_from_4
11legalized:       true
12regBankSelected: true
13tracksRegLiveness: true
14
15
16body: |
17  bb.0:
18    liveins:  $sgpr0_sgpr1
19
20    ; GFX6-LABEL: name: load_constant_s32_from_4
21    ; GFX6: liveins: $sgpr0_sgpr1
22    ; GFX6-NEXT: {{  $}}
23    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
24    ; GFX6-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (s32), addrspace 4)
25    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
26    ; GFX7-LABEL: name: load_constant_s32_from_4
27    ; GFX7: liveins: $sgpr0_sgpr1
28    ; GFX7-NEXT: {{  $}}
29    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
30    ; GFX7-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (s32), addrspace 4)
31    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
32    ; GFX8-LABEL: name: load_constant_s32_from_4
33    ; GFX8: liveins: $sgpr0_sgpr1
34    ; GFX8-NEXT: {{  $}}
35    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
36    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (s32), addrspace 4)
37    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
38    ; GFX10-LABEL: name: load_constant_s32_from_4
39    ; GFX10: liveins: $sgpr0_sgpr1
40    ; GFX10-NEXT: {{  $}}
41    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
42    ; GFX10-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (s32), addrspace 4)
43    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
44    %0:sgpr(p4) = COPY $sgpr0_sgpr1
45    %1:sgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 4)
46    $sgpr0 = COPY %1
47
48...
49
50---
51
52name: load_constant_v2s16_from_4
53legalized:       true
54regBankSelected: true
55tracksRegLiveness: true
56
57
58body: |
59  bb.0:
60    liveins:  $sgpr0_sgpr1
61
62    ; GFX6-LABEL: name: load_constant_v2s16_from_4
63    ; GFX6: liveins: $sgpr0_sgpr1
64    ; GFX6-NEXT: {{  $}}
65    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
66    ; GFX6-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (<2 x s16>), addrspace 4)
67    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
68    ; GFX7-LABEL: name: load_constant_v2s16_from_4
69    ; GFX7: liveins: $sgpr0_sgpr1
70    ; GFX7-NEXT: {{  $}}
71    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
72    ; GFX7-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (<2 x s16>), addrspace 4)
73    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
74    ; GFX8-LABEL: name: load_constant_v2s16_from_4
75    ; GFX8: liveins: $sgpr0_sgpr1
76    ; GFX8-NEXT: {{  $}}
77    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
78    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (<2 x s16>), addrspace 4)
79    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
80    ; GFX10-LABEL: name: load_constant_v2s16_from_4
81    ; GFX10: liveins: $sgpr0_sgpr1
82    ; GFX10-NEXT: {{  $}}
83    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
84    ; GFX10-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (<2 x s16>), addrspace 4)
85    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
86    %0:sgpr(p4) = COPY $sgpr0_sgpr1
87    %1:sgpr(<2 x s16>) = G_LOAD %0 :: (load (<2 x s16>), align 4, addrspace 4)
88    $sgpr0 = COPY %1
89
90...
91
92
93---
94name: load_constant_v2s32
95legalized:       true
96regBankSelected: true
97tracksRegLiveness: true
98
99body: |
100  bb.0:
101    liveins:  $sgpr0_sgpr1
102
103    ; GFX6-LABEL: name: load_constant_v2s32
104    ; GFX6: liveins: $sgpr0_sgpr1
105    ; GFX6-NEXT: {{  $}}
106    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
107    ; GFX6-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<2 x s32>), addrspace 4)
108    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
109    ; GFX7-LABEL: name: load_constant_v2s32
110    ; GFX7: liveins: $sgpr0_sgpr1
111    ; GFX7-NEXT: {{  $}}
112    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
113    ; GFX7-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<2 x s32>), addrspace 4)
114    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
115    ; GFX8-LABEL: name: load_constant_v2s32
116    ; GFX8: liveins: $sgpr0_sgpr1
117    ; GFX8-NEXT: {{  $}}
118    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
119    ; GFX8-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<2 x s32>), addrspace 4)
120    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
121    ; GFX10-LABEL: name: load_constant_v2s32
122    ; GFX10: liveins: $sgpr0_sgpr1
123    ; GFX10-NEXT: {{  $}}
124    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
125    ; GFX10-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<2 x s32>), addrspace 4)
126    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
127    %0:sgpr(p4) = COPY $sgpr0_sgpr1
128    %1:sgpr(<2 x s32>) = G_LOAD %0 :: (load (<2 x s32>), align 8, addrspace 4)
129    $sgpr0_sgpr1 = COPY %1
130
131...
132
133---
134name: load_constant_v2s32_align4
135legalized:       true
136regBankSelected: true
137tracksRegLiveness: true
138
139body: |
140  bb.0:
141    liveins:  $sgpr0_sgpr1
142
143    ; GFX6-LABEL: name: load_constant_v2s32_align4
144    ; GFX6: liveins: $sgpr0_sgpr1
145    ; GFX6-NEXT: {{  $}}
146    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
147    ; GFX6-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<2 x s32>), align 4, addrspace 4)
148    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
149    ; GFX7-LABEL: name: load_constant_v2s32_align4
150    ; GFX7: liveins: $sgpr0_sgpr1
151    ; GFX7-NEXT: {{  $}}
152    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
153    ; GFX7-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<2 x s32>), align 4, addrspace 4)
154    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
155    ; GFX8-LABEL: name: load_constant_v2s32_align4
156    ; GFX8: liveins: $sgpr0_sgpr1
157    ; GFX8-NEXT: {{  $}}
158    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
159    ; GFX8-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<2 x s32>), align 4, addrspace 4)
160    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
161    ; GFX10-LABEL: name: load_constant_v2s32_align4
162    ; GFX10: liveins: $sgpr0_sgpr1
163    ; GFX10-NEXT: {{  $}}
164    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
165    ; GFX10-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<2 x s32>), align 4, addrspace 4)
166    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
167    %0:sgpr(p4) = COPY $sgpr0_sgpr1
168    %1:sgpr(<2 x s32>) = G_LOAD %0 :: (load (<2 x s32>), align 4, addrspace 4)
169    $sgpr0_sgpr1 = COPY %1
170
171...
172
173---
174name: load_constant_v4s16_align4
175legalized:       true
176regBankSelected: true
177tracksRegLiveness: true
178
179body: |
180  bb.0:
181    liveins:  $sgpr0_sgpr1
182
183    ; GFX6-LABEL: name: load_constant_v4s16_align4
184    ; GFX6: liveins: $sgpr0_sgpr1
185    ; GFX6-NEXT: {{  $}}
186    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
187    ; GFX6-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<4 x s16>), align 4, addrspace 4)
188    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
189    ; GFX7-LABEL: name: load_constant_v4s16_align4
190    ; GFX7: liveins: $sgpr0_sgpr1
191    ; GFX7-NEXT: {{  $}}
192    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
193    ; GFX7-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<4 x s16>), align 4, addrspace 4)
194    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
195    ; GFX8-LABEL: name: load_constant_v4s16_align4
196    ; GFX8: liveins: $sgpr0_sgpr1
197    ; GFX8-NEXT: {{  $}}
198    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
199    ; GFX8-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<4 x s16>), align 4, addrspace 4)
200    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
201    ; GFX10-LABEL: name: load_constant_v4s16_align4
202    ; GFX10: liveins: $sgpr0_sgpr1
203    ; GFX10-NEXT: {{  $}}
204    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
205    ; GFX10-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<4 x s16>), align 4, addrspace 4)
206    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
207    %0:sgpr(p4) = COPY $sgpr0_sgpr1
208    %1:sgpr(<4 x s16>) = G_LOAD %0 :: (load (<4 x s16>), align 4, addrspace 4)
209    $sgpr0_sgpr1 = COPY %1
210
211...
212
213---
214
215name: load_constant_v4s32_align4
216legalized:       true
217regBankSelected: true
218tracksRegLiveness: true
219
220body: |
221  bb.0:
222    liveins:  $sgpr0_sgpr1
223
224    ; GFX6-LABEL: name: load_constant_v4s32_align4
225    ; GFX6: liveins: $sgpr0_sgpr1
226    ; GFX6-NEXT: {{  $}}
227    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
228    ; GFX6-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (<4 x s32>), align 4, addrspace 4)
229    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
230    ; GFX7-LABEL: name: load_constant_v4s32_align4
231    ; GFX7: liveins: $sgpr0_sgpr1
232    ; GFX7-NEXT: {{  $}}
233    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
234    ; GFX7-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (<4 x s32>), align 4, addrspace 4)
235    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
236    ; GFX8-LABEL: name: load_constant_v4s32_align4
237    ; GFX8: liveins: $sgpr0_sgpr1
238    ; GFX8-NEXT: {{  $}}
239    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
240    ; GFX8-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (<4 x s32>), align 4, addrspace 4)
241    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
242    ; GFX10-LABEL: name: load_constant_v4s32_align4
243    ; GFX10: liveins: $sgpr0_sgpr1
244    ; GFX10-NEXT: {{  $}}
245    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
246    ; GFX10-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (<4 x s32>), align 4, addrspace 4)
247    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
248    %0:sgpr(p4) = COPY $sgpr0_sgpr1
249    %1:sgpr(<4 x  s32>) = G_LOAD %0 :: (load (<4 x s32>), align 4, addrspace 4)
250    $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1
251
252...
253
254---
255
256name: load_constant_s64
257legalized:       true
258regBankSelected: true
259tracksRegLiveness: true
260
261body: |
262  bb.0:
263    liveins:  $sgpr0_sgpr1
264
265    ; GFX6-LABEL: name: load_constant_s64
266    ; GFX6: liveins: $sgpr0_sgpr1
267    ; GFX6-NEXT: {{  $}}
268    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
269    ; GFX6-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), addrspace 4)
270    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
271    ; GFX7-LABEL: name: load_constant_s64
272    ; GFX7: liveins: $sgpr0_sgpr1
273    ; GFX7-NEXT: {{  $}}
274    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
275    ; GFX7-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), addrspace 4)
276    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
277    ; GFX8-LABEL: name: load_constant_s64
278    ; GFX8: liveins: $sgpr0_sgpr1
279    ; GFX8-NEXT: {{  $}}
280    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
281    ; GFX8-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), addrspace 4)
282    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
283    ; GFX10-LABEL: name: load_constant_s64
284    ; GFX10: liveins: $sgpr0_sgpr1
285    ; GFX10-NEXT: {{  $}}
286    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
287    ; GFX10-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), addrspace 4)
288    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
289    %0:sgpr(p4) = COPY $sgpr0_sgpr1
290    %1:sgpr(s64) = G_LOAD %0 :: (load (s64), align 8, addrspace 4)
291    $sgpr0_sgpr1 = COPY %1
292
293...
294
295---
296
297name: load_constant_s64_align4
298legalized:       true
299regBankSelected: true
300tracksRegLiveness: true
301
302body: |
303  bb.0:
304    liveins:  $sgpr0_sgpr1
305
306    ; GFX6-LABEL: name: load_constant_s64_align4
307    ; GFX6: liveins: $sgpr0_sgpr1
308    ; GFX6-NEXT: {{  $}}
309    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
310    ; GFX6-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), align 4, addrspace 4)
311    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
312    ; GFX7-LABEL: name: load_constant_s64_align4
313    ; GFX7: liveins: $sgpr0_sgpr1
314    ; GFX7-NEXT: {{  $}}
315    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
316    ; GFX7-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), align 4, addrspace 4)
317    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
318    ; GFX8-LABEL: name: load_constant_s64_align4
319    ; GFX8: liveins: $sgpr0_sgpr1
320    ; GFX8-NEXT: {{  $}}
321    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
322    ; GFX8-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), align 4, addrspace 4)
323    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
324    ; GFX10-LABEL: name: load_constant_s64_align4
325    ; GFX10: liveins: $sgpr0_sgpr1
326    ; GFX10-NEXT: {{  $}}
327    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
328    ; GFX10-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), align 4, addrspace 4)
329    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
330    %0:sgpr(p4) = COPY $sgpr0_sgpr1
331    %1:sgpr(s64) = G_LOAD %0 :: (load (s64), align 4, addrspace 4)
332    $sgpr0_sgpr1 = COPY %1
333
334...
335
336---
337
338name: load_constant_v2s64
339legalized:       true
340regBankSelected: true
341tracksRegLiveness: true
342
343body: |
344  bb.0:
345    liveins:  $sgpr0_sgpr1
346
347    ; GFX6-LABEL: name: load_constant_v2s64
348    ; GFX6: liveins: $sgpr0_sgpr1
349    ; GFX6-NEXT: {{  $}}
350    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
351    ; GFX6-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (<2 x s64>), align 4, addrspace 4)
352    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
353    ; GFX7-LABEL: name: load_constant_v2s64
354    ; GFX7: liveins: $sgpr0_sgpr1
355    ; GFX7-NEXT: {{  $}}
356    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
357    ; GFX7-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (<2 x s64>), align 4, addrspace 4)
358    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
359    ; GFX8-LABEL: name: load_constant_v2s64
360    ; GFX8: liveins: $sgpr0_sgpr1
361    ; GFX8-NEXT: {{  $}}
362    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
363    ; GFX8-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (<2 x s64>), align 4, addrspace 4)
364    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
365    ; GFX10-LABEL: name: load_constant_v2s64
366    ; GFX10: liveins: $sgpr0_sgpr1
367    ; GFX10-NEXT: {{  $}}
368    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
369    ; GFX10-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (<2 x s64>), align 4, addrspace 4)
370    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
371    %0:sgpr(p4) = COPY $sgpr0_sgpr1
372    %1:sgpr(<2 x s64>) = G_LOAD %0 :: (load (<2 x s64>), align 4, addrspace 4)
373    $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1
374
375...
376
377---
378
379name: load_constant_v2p1
380legalized:       true
381regBankSelected: true
382tracksRegLiveness: true
383
384body: |
385  bb.0:
386    liveins:  $sgpr0_sgpr1
387
388    ; GFX6-LABEL: name: load_constant_v2p1
389    ; GFX6: liveins: $sgpr0_sgpr1
390    ; GFX6-NEXT: {{  $}}
391    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
392    ; GFX6-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(<2 x p1>) = G_LOAD [[COPY]](p4) :: (load (<2 x p1>), align 4, addrspace 4)
393    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<2 x p1>)
394    ; GFX7-LABEL: name: load_constant_v2p1
395    ; GFX7: liveins: $sgpr0_sgpr1
396    ; GFX7-NEXT: {{  $}}
397    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
398    ; GFX7-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(<2 x p1>) = G_LOAD [[COPY]](p4) :: (load (<2 x p1>), align 4, addrspace 4)
399    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<2 x p1>)
400    ; GFX8-LABEL: name: load_constant_v2p1
401    ; GFX8: liveins: $sgpr0_sgpr1
402    ; GFX8-NEXT: {{  $}}
403    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
404    ; GFX8-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(<2 x p1>) = G_LOAD [[COPY]](p4) :: (load (<2 x p1>), align 4, addrspace 4)
405    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<2 x p1>)
406    ; GFX10-LABEL: name: load_constant_v2p1
407    ; GFX10: liveins: $sgpr0_sgpr1
408    ; GFX10-NEXT: {{  $}}
409    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
410    ; GFX10-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(<2 x p1>) = G_LOAD [[COPY]](p4) :: (load (<2 x p1>), align 4, addrspace 4)
411    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<2 x p1>)
412    %0:sgpr(p4) = COPY $sgpr0_sgpr1
413    %1:sgpr(<2 x p1>) = G_LOAD %0 :: (load (<2 x p1>), align 4, addrspace 4)
414    $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1
415
416...
417
418---
419
420name: load_constant_s128_align4
421legalized:       true
422regBankSelected: true
423tracksRegLiveness: true
424
425body: |
426  bb.0:
427    liveins:  $sgpr0_sgpr1
428
429    ; GFX6-LABEL: name: load_constant_s128_align4
430    ; GFX6: liveins: $sgpr0_sgpr1
431    ; GFX6-NEXT: {{  $}}
432    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
433    ; GFX6-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(s128) = G_LOAD [[COPY]](p4) :: (load (s128), align 4, addrspace 4)
434    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](s128)
435    ; GFX7-LABEL: name: load_constant_s128_align4
436    ; GFX7: liveins: $sgpr0_sgpr1
437    ; GFX7-NEXT: {{  $}}
438    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
439    ; GFX7-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(s128) = G_LOAD [[COPY]](p4) :: (load (s128), align 4, addrspace 4)
440    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](s128)
441    ; GFX8-LABEL: name: load_constant_s128_align4
442    ; GFX8: liveins: $sgpr0_sgpr1
443    ; GFX8-NEXT: {{  $}}
444    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
445    ; GFX8-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(s128) = G_LOAD [[COPY]](p4) :: (load (s128), align 4, addrspace 4)
446    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](s128)
447    ; GFX10-LABEL: name: load_constant_s128_align4
448    ; GFX10: liveins: $sgpr0_sgpr1
449    ; GFX10-NEXT: {{  $}}
450    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
451    ; GFX10-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(s128) = G_LOAD [[COPY]](p4) :: (load (s128), align 4, addrspace 4)
452    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](s128)
453    %0:sgpr(p4) = COPY $sgpr0_sgpr1
454    %1:sgpr(s128) = G_LOAD %0 :: (load (s128), align 4, addrspace 4)
455    $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1
456
457...
458
459---
460
461name: load_constant_p3_from_4
462legalized:       true
463regBankSelected: true
464tracksRegLiveness: true
465
466body: |
467  bb.0:
468    liveins:  $sgpr0_sgpr1
469
470    ; GFX6-LABEL: name: load_constant_p3_from_4
471    ; GFX6: liveins: $sgpr0_sgpr1
472    ; GFX6-NEXT: {{  $}}
473    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
474    ; GFX6-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (p3), addrspace 4)
475    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
476    ; GFX7-LABEL: name: load_constant_p3_from_4
477    ; GFX7: liveins: $sgpr0_sgpr1
478    ; GFX7-NEXT: {{  $}}
479    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
480    ; GFX7-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (p3), addrspace 4)
481    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
482    ; GFX8-LABEL: name: load_constant_p3_from_4
483    ; GFX8: liveins: $sgpr0_sgpr1
484    ; GFX8-NEXT: {{  $}}
485    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
486    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (p3), addrspace 4)
487    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
488    ; GFX10-LABEL: name: load_constant_p3_from_4
489    ; GFX10: liveins: $sgpr0_sgpr1
490    ; GFX10-NEXT: {{  $}}
491    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
492    ; GFX10-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (p3), addrspace 4)
493    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
494    %0:sgpr(p4) = COPY $sgpr0_sgpr1
495    %1:sgpr(p3) = G_LOAD %0 :: (load (p3), align 4, addrspace 4)
496    $sgpr0 = COPY %1
497
498...
499
500---
501
502name: load_constant_p4_from_8
503legalized:       true
504regBankSelected: true
505tracksRegLiveness: true
506
507body: |
508  bb.0:
509    liveins:  $sgpr0_sgpr1
510
511    ; GFX6-LABEL: name: load_constant_p4_from_8
512    ; GFX6: liveins: $sgpr0_sgpr1
513    ; GFX6-NEXT: {{  $}}
514    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
515    ; GFX6-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (p4), addrspace 4)
516    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
517    ; GFX7-LABEL: name: load_constant_p4_from_8
518    ; GFX7: liveins: $sgpr0_sgpr1
519    ; GFX7-NEXT: {{  $}}
520    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
521    ; GFX7-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (p4), addrspace 4)
522    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
523    ; GFX8-LABEL: name: load_constant_p4_from_8
524    ; GFX8: liveins: $sgpr0_sgpr1
525    ; GFX8-NEXT: {{  $}}
526    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
527    ; GFX8-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (p4), addrspace 4)
528    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
529    ; GFX10-LABEL: name: load_constant_p4_from_8
530    ; GFX10: liveins: $sgpr0_sgpr1
531    ; GFX10-NEXT: {{  $}}
532    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
533    ; GFX10-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (p4), addrspace 4)
534    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
535    %0:sgpr(p4) = COPY $sgpr0_sgpr1
536    %1:sgpr(p4) = G_LOAD %0 :: (load (p4), align 8, addrspace 4)
537    $sgpr0_sgpr1 = COPY %1
538
539...
540
541---
542
543name: load_constant_p999_from_8
544legalized:       true
545regBankSelected: true
546tracksRegLiveness: true
547
548body: |
549  bb.0:
550    liveins:  $sgpr0_sgpr1
551
552    ; GFX6-LABEL: name: load_constant_p999_from_8
553    ; GFX6: liveins: $sgpr0_sgpr1
554    ; GFX6-NEXT: {{  $}}
555    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
556    ; GFX6-NEXT: [[LOAD:%[0-9]+]]:sreg_64(p999) = G_LOAD [[COPY]](p4) :: (load (p999), addrspace 4)
557    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](p999)
558    ; GFX7-LABEL: name: load_constant_p999_from_8
559    ; GFX7: liveins: $sgpr0_sgpr1
560    ; GFX7-NEXT: {{  $}}
561    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
562    ; GFX7-NEXT: [[LOAD:%[0-9]+]]:sreg_64(p999) = G_LOAD [[COPY]](p4) :: (load (p999), addrspace 4)
563    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](p999)
564    ; GFX8-LABEL: name: load_constant_p999_from_8
565    ; GFX8: liveins: $sgpr0_sgpr1
566    ; GFX8-NEXT: {{  $}}
567    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
568    ; GFX8-NEXT: [[LOAD:%[0-9]+]]:sreg_64(p999) = G_LOAD [[COPY]](p4) :: (load (p999), addrspace 4)
569    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](p999)
570    ; GFX10-LABEL: name: load_constant_p999_from_8
571    ; GFX10: liveins: $sgpr0_sgpr1
572    ; GFX10-NEXT: {{  $}}
573    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
574    ; GFX10-NEXT: [[LOAD:%[0-9]+]]:sreg_64(p999) = G_LOAD [[COPY]](p4) :: (load (p999), addrspace 4)
575    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](p999)
576    %0:sgpr(p4) = COPY $sgpr0_sgpr1
577    %1:sgpr(p999) = G_LOAD %0 :: (load (p999), align 8, addrspace 4)
578    $sgpr0_sgpr1 = COPY %1
579
580...
581
582---
583
584name: load_constant_v2p3
585legalized:       true
586regBankSelected: true
587tracksRegLiveness: true
588
589body: |
590  bb.0:
591    liveins:  $sgpr0_sgpr1
592
593    ; GFX6-LABEL: name: load_constant_v2p3
594    ; GFX6: liveins: $sgpr0_sgpr1
595    ; GFX6-NEXT: {{  $}}
596    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
597    ; GFX6-NEXT: [[LOAD:%[0-9]+]]:sreg_64(<2 x p3>) = G_LOAD [[COPY]](p4) :: (load (<2 x p3>), addrspace 4)
598    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](<2 x p3>)
599    ; GFX7-LABEL: name: load_constant_v2p3
600    ; GFX7: liveins: $sgpr0_sgpr1
601    ; GFX7-NEXT: {{  $}}
602    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
603    ; GFX7-NEXT: [[LOAD:%[0-9]+]]:sreg_64(<2 x p3>) = G_LOAD [[COPY]](p4) :: (load (<2 x p3>), addrspace 4)
604    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](<2 x p3>)
605    ; GFX8-LABEL: name: load_constant_v2p3
606    ; GFX8: liveins: $sgpr0_sgpr1
607    ; GFX8-NEXT: {{  $}}
608    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
609    ; GFX8-NEXT: [[LOAD:%[0-9]+]]:sreg_64(<2 x p3>) = G_LOAD [[COPY]](p4) :: (load (<2 x p3>), addrspace 4)
610    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](<2 x p3>)
611    ; GFX10-LABEL: name: load_constant_v2p3
612    ; GFX10: liveins: $sgpr0_sgpr1
613    ; GFX10-NEXT: {{  $}}
614    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
615    ; GFX10-NEXT: [[LOAD:%[0-9]+]]:sreg_64(<2 x p3>) = G_LOAD [[COPY]](p4) :: (load (<2 x p3>), addrspace 4)
616    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](<2 x p3>)
617    %0:sgpr(p4) = COPY $sgpr0_sgpr1
618    %1:sgpr(<2 x p3>) = G_LOAD %0 :: (load (<2 x p3>), align 8, addrspace 4)
619    $sgpr0_sgpr1 = COPY %1
620
621...
622
623---
624
625name: load_constant_v2s16
626legalized:       true
627regBankSelected: true
628tracksRegLiveness: true
629
630body: |
631  bb.0:
632    liveins:  $sgpr0_sgpr1
633
634    ; GFX6-LABEL: name: load_constant_v2s16
635    ; GFX6: liveins: $sgpr0_sgpr1
636    ; GFX6-NEXT: {{  $}}
637    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
638    ; GFX6-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (<2 x s16>), addrspace 4)
639    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
640    ; GFX7-LABEL: name: load_constant_v2s16
641    ; GFX7: liveins: $sgpr0_sgpr1
642    ; GFX7-NEXT: {{  $}}
643    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
644    ; GFX7-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (<2 x s16>), addrspace 4)
645    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
646    ; GFX8-LABEL: name: load_constant_v2s16
647    ; GFX8: liveins: $sgpr0_sgpr1
648    ; GFX8-NEXT: {{  $}}
649    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
650    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (<2 x s16>), addrspace 4)
651    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
652    ; GFX10-LABEL: name: load_constant_v2s16
653    ; GFX10: liveins: $sgpr0_sgpr1
654    ; GFX10-NEXT: {{  $}}
655    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
656    ; GFX10-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (<2 x s16>), addrspace 4)
657    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
658    %0:sgpr(p4) = COPY $sgpr0_sgpr1
659    %1:sgpr(<2 x s16>) = G_LOAD %0 :: (load (<2 x s16>), align 4, addrspace 4)
660    $sgpr0 = COPY %1
661
662...
663
664---
665
666name: load_constant_v4s16
667legalized:       true
668regBankSelected: true
669tracksRegLiveness: true
670
671body: |
672  bb.0:
673    liveins:  $sgpr0_sgpr1
674
675    ; GFX6-LABEL: name: load_constant_v4s16
676    ; GFX6: liveins: $sgpr0_sgpr1
677    ; GFX6-NEXT: {{  $}}
678    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
679    ; GFX6-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<4 x s16>), addrspace 4)
680    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
681    ; GFX7-LABEL: name: load_constant_v4s16
682    ; GFX7: liveins: $sgpr0_sgpr1
683    ; GFX7-NEXT: {{  $}}
684    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
685    ; GFX7-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<4 x s16>), addrspace 4)
686    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
687    ; GFX8-LABEL: name: load_constant_v4s16
688    ; GFX8: liveins: $sgpr0_sgpr1
689    ; GFX8-NEXT: {{  $}}
690    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
691    ; GFX8-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<4 x s16>), addrspace 4)
692    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
693    ; GFX10-LABEL: name: load_constant_v4s16
694    ; GFX10: liveins: $sgpr0_sgpr1
695    ; GFX10-NEXT: {{  $}}
696    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
697    ; GFX10-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<4 x s16>), addrspace 4)
698    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
699    %0:sgpr(p4) = COPY $sgpr0_sgpr1
700    %1:sgpr(<4 x s16>) = G_LOAD %0 :: (load (<4 x s16>), align 8, addrspace 4)
701    $sgpr0_sgpr1 = COPY %1
702
703...
704
705---
706
707name: load_constant_v8s16
708legalized:       true
709regBankSelected: true
710tracksRegLiveness: true
711
712body: |
713  bb.0:
714    liveins:  $sgpr0_sgpr1
715
716    ; GFX6-LABEL: name: load_constant_v8s16
717    ; GFX6: liveins: $sgpr0_sgpr1
718    ; GFX6-NEXT: {{  $}}
719    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
720    ; GFX6-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (<8 x s16>), align 4, addrspace 4)
721    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
722    ; GFX7-LABEL: name: load_constant_v8s16
723    ; GFX7: liveins: $sgpr0_sgpr1
724    ; GFX7-NEXT: {{  $}}
725    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
726    ; GFX7-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (<8 x s16>), align 4, addrspace 4)
727    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
728    ; GFX8-LABEL: name: load_constant_v8s16
729    ; GFX8: liveins: $sgpr0_sgpr1
730    ; GFX8-NEXT: {{  $}}
731    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
732    ; GFX8-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (<8 x s16>), align 4, addrspace 4)
733    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
734    ; GFX10-LABEL: name: load_constant_v8s16
735    ; GFX10: liveins: $sgpr0_sgpr1
736    ; GFX10-NEXT: {{  $}}
737    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
738    ; GFX10-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (<8 x s16>), align 4, addrspace 4)
739    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
740    %0:sgpr(p4) = COPY $sgpr0_sgpr1
741    %1:sgpr(<8 x s16>) = G_LOAD %0 :: (load (<8 x s16>), align 4, addrspace 4)
742    $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1
743
744...
745
746---
747
748name: load_constant_v8s32
749legalized:       true
750regBankSelected: true
751tracksRegLiveness: true
752
753body: |
754  bb.0:
755    liveins:  $sgpr0_sgpr1
756
757    ; GFX6-LABEL: name: load_constant_v8s32
758    ; GFX6: liveins: $sgpr0_sgpr1
759    ; GFX6-NEXT: {{  $}}
760    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
761    ; GFX6-NEXT: [[S_LOAD_DWORDX8_IMM:%[0-9]+]]:sgpr_256 = S_LOAD_DWORDX8_IMM [[COPY]], 0, 0 :: (load (<8 x s32>), align 4, addrspace 4)
762    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[S_LOAD_DWORDX8_IMM]]
763    ; GFX7-LABEL: name: load_constant_v8s32
764    ; GFX7: liveins: $sgpr0_sgpr1
765    ; GFX7-NEXT: {{  $}}
766    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
767    ; GFX7-NEXT: [[S_LOAD_DWORDX8_IMM:%[0-9]+]]:sgpr_256 = S_LOAD_DWORDX8_IMM [[COPY]], 0, 0 :: (load (<8 x s32>), align 4, addrspace 4)
768    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[S_LOAD_DWORDX8_IMM]]
769    ; GFX8-LABEL: name: load_constant_v8s32
770    ; GFX8: liveins: $sgpr0_sgpr1
771    ; GFX8-NEXT: {{  $}}
772    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
773    ; GFX8-NEXT: [[S_LOAD_DWORDX8_IMM:%[0-9]+]]:sgpr_256 = S_LOAD_DWORDX8_IMM [[COPY]], 0, 0 :: (load (<8 x s32>), align 4, addrspace 4)
774    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[S_LOAD_DWORDX8_IMM]]
775    ; GFX10-LABEL: name: load_constant_v8s32
776    ; GFX10: liveins: $sgpr0_sgpr1
777    ; GFX10-NEXT: {{  $}}
778    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
779    ; GFX10-NEXT: [[S_LOAD_DWORDX8_IMM:%[0-9]+]]:sgpr_256 = S_LOAD_DWORDX8_IMM [[COPY]], 0, 0 :: (load (<8 x s32>), align 4, addrspace 4)
780    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[S_LOAD_DWORDX8_IMM]]
781    %0:sgpr(p4) = COPY $sgpr0_sgpr1
782    %1:sgpr(<8 x s32>) = G_LOAD %0 :: (load (<8 x s32>), align 4, addrspace 4)
783    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY %1
784
785...
786
787---
788
789name: load_constant_v16s32
790legalized:       true
791regBankSelected: true
792tracksRegLiveness: true
793
794body: |
795  bb.0:
796    liveins:  $sgpr0_sgpr1
797
798    ; GFX6-LABEL: name: load_constant_v16s32
799    ; GFX6: liveins: $sgpr0_sgpr1
800    ; GFX6-NEXT: {{  $}}
801    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
802    ; GFX6-NEXT: [[S_LOAD_DWORDX16_IMM:%[0-9]+]]:sgpr_512 = S_LOAD_DWORDX16_IMM [[COPY]], 0, 0 :: (load (<16 x s32>), align 4, addrspace 4)
803    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
804    ; GFX7-LABEL: name: load_constant_v16s32
805    ; GFX7: liveins: $sgpr0_sgpr1
806    ; GFX7-NEXT: {{  $}}
807    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
808    ; GFX7-NEXT: [[S_LOAD_DWORDX16_IMM:%[0-9]+]]:sgpr_512 = S_LOAD_DWORDX16_IMM [[COPY]], 0, 0 :: (load (<16 x s32>), align 4, addrspace 4)
809    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
810    ; GFX8-LABEL: name: load_constant_v16s32
811    ; GFX8: liveins: $sgpr0_sgpr1
812    ; GFX8-NEXT: {{  $}}
813    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
814    ; GFX8-NEXT: [[S_LOAD_DWORDX16_IMM:%[0-9]+]]:sgpr_512 = S_LOAD_DWORDX16_IMM [[COPY]], 0, 0 :: (load (<16 x s32>), align 4, addrspace 4)
815    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
816    ; GFX10-LABEL: name: load_constant_v16s32
817    ; GFX10: liveins: $sgpr0_sgpr1
818    ; GFX10-NEXT: {{  $}}
819    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
820    ; GFX10-NEXT: [[S_LOAD_DWORDX16_IMM:%[0-9]+]]:sgpr_512 = S_LOAD_DWORDX16_IMM [[COPY]], 0, 0 :: (load (<16 x s32>), align 4, addrspace 4)
821    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
822    %0:sgpr(p4) = COPY $sgpr0_sgpr1
823    %1:sgpr(<16 x s32>) = G_LOAD %0 :: (load (<16 x s32>), align 4, addrspace 4)
824    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY %1
825
826...
827
828---
829
830name: load_constant_v8s64
831legalized:       true
832regBankSelected: true
833tracksRegLiveness: true
834
835body: |
836  bb.0:
837    liveins:  $sgpr0_sgpr1
838
839    ; GFX6-LABEL: name: load_constant_v8s64
840    ; GFX6: liveins: $sgpr0_sgpr1
841    ; GFX6-NEXT: {{  $}}
842    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
843    ; GFX6-NEXT: [[S_LOAD_DWORDX16_IMM:%[0-9]+]]:sgpr_512 = S_LOAD_DWORDX16_IMM [[COPY]], 0, 0 :: (load (<8 x s64>), align 4, addrspace 4)
844    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
845    ; GFX7-LABEL: name: load_constant_v8s64
846    ; GFX7: liveins: $sgpr0_sgpr1
847    ; GFX7-NEXT: {{  $}}
848    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
849    ; GFX7-NEXT: [[S_LOAD_DWORDX16_IMM:%[0-9]+]]:sgpr_512 = S_LOAD_DWORDX16_IMM [[COPY]], 0, 0 :: (load (<8 x s64>), align 4, addrspace 4)
850    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
851    ; GFX8-LABEL: name: load_constant_v8s64
852    ; GFX8: liveins: $sgpr0_sgpr1
853    ; GFX8-NEXT: {{  $}}
854    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
855    ; GFX8-NEXT: [[S_LOAD_DWORDX16_IMM:%[0-9]+]]:sgpr_512 = S_LOAD_DWORDX16_IMM [[COPY]], 0, 0 :: (load (<8 x s64>), align 4, addrspace 4)
856    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
857    ; GFX10-LABEL: name: load_constant_v8s64
858    ; GFX10: liveins: $sgpr0_sgpr1
859    ; GFX10-NEXT: {{  $}}
860    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
861    ; GFX10-NEXT: [[S_LOAD_DWORDX16_IMM:%[0-9]+]]:sgpr_512 = S_LOAD_DWORDX16_IMM [[COPY]], 0, 0 :: (load (<8 x s64>), align 4, addrspace 4)
862    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
863    %0:sgpr(p4) = COPY $sgpr0_sgpr1
864    %1:sgpr(<8 x s64>) = G_LOAD %0 :: (load (<8 x s64>), align 4, addrspace 4)
865    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY %1
866
867...
868
869################################################################################
870### Stress addressing modes
871################################################################################
872
873---
874
875name: load_constant_s32_from_4_gep_1020
876legalized:       true
877regBankSelected: true
878tracksRegLiveness: true
879
880body: |
881  bb.0:
882    liveins:  $sgpr0_sgpr1
883
884    ; GFX6-LABEL: name: load_constant_s32_from_4_gep_1020
885    ; GFX6: liveins: $sgpr0_sgpr1
886    ; GFX6-NEXT: {{  $}}
887    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
888    ; GFX6-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 255, 0 :: (load (s32), addrspace 4)
889    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
890    ; GFX7-LABEL: name: load_constant_s32_from_4_gep_1020
891    ; GFX7: liveins: $sgpr0_sgpr1
892    ; GFX7-NEXT: {{  $}}
893    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
894    ; GFX7-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 255, 0 :: (load (s32), addrspace 4)
895    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
896    ; GFX8-LABEL: name: load_constant_s32_from_4_gep_1020
897    ; GFX8: liveins: $sgpr0_sgpr1
898    ; GFX8-NEXT: {{  $}}
899    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
900    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1020, 0 :: (load (s32), addrspace 4)
901    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
902    ; GFX10-LABEL: name: load_constant_s32_from_4_gep_1020
903    ; GFX10: liveins: $sgpr0_sgpr1
904    ; GFX10-NEXT: {{  $}}
905    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
906    ; GFX10-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1020, 0 :: (load (s32), addrspace 4)
907    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
908    %0:sgpr(p4) = COPY $sgpr0_sgpr1
909    %1:sgpr(s64) = G_CONSTANT i64 1020
910    %2:sgpr(p4) = G_PTR_ADD %0, %1
911    %3:sgpr(s32) = G_LOAD %2 :: (load (s32), align 4, addrspace 4)
912    $sgpr0 = COPY %3
913
914...
915
916---
917
918name: load_constant_s32_from_4_gep_1024
919legalized:       true
920regBankSelected: true
921tracksRegLiveness: true
922
923body: |
924  bb.0:
925    liveins:  $sgpr0_sgpr1
926
927    ; GFX6-LABEL: name: load_constant_s32_from_4_gep_1024
928    ; GFX6: liveins: $sgpr0_sgpr1
929    ; GFX6-NEXT: {{  $}}
930    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
931    ; GFX6-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1024
932    ; GFX6-NEXT: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0 :: (load (s32), addrspace 4)
933    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
934    ; GFX7-LABEL: name: load_constant_s32_from_4_gep_1024
935    ; GFX7: liveins: $sgpr0_sgpr1
936    ; GFX7-NEXT: {{  $}}
937    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
938    ; GFX7-NEXT: [[S_LOAD_DWORD_IMM_ci:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM_ci [[COPY]], 256, 0 :: (load (s32), addrspace 4)
939    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM_ci]]
940    ; GFX8-LABEL: name: load_constant_s32_from_4_gep_1024
941    ; GFX8: liveins: $sgpr0_sgpr1
942    ; GFX8-NEXT: {{  $}}
943    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
944    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1024, 0 :: (load (s32), addrspace 4)
945    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
946    ; GFX10-LABEL: name: load_constant_s32_from_4_gep_1024
947    ; GFX10: liveins: $sgpr0_sgpr1
948    ; GFX10-NEXT: {{  $}}
949    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
950    ; GFX10-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1024, 0 :: (load (s32), addrspace 4)
951    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
952    %0:sgpr(p4) = COPY $sgpr0_sgpr1
953    %1:sgpr(s64) = G_CONSTANT i64 1024
954    %2:sgpr(p4) = G_PTR_ADD %0, %1
955    %3:sgpr(s32) = G_LOAD %2 :: (load (s32), align 4, addrspace 4)
956    $sgpr0 = COPY %3
957
958...
959
960---
961
962name: load_constant_s32_from_4_gep_1048575
963legalized:       true
964regBankSelected: true
965tracksRegLiveness: true
966
967body: |
968  bb.0:
969    liveins:  $sgpr0_sgpr1
970
971    ; GFX6-LABEL: name: load_constant_s32_from_4_gep_1048575
972    ; GFX6: liveins: $sgpr0_sgpr1
973    ; GFX6-NEXT: {{  $}}
974    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
975    ; GFX6-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1048575
976    ; GFX6-NEXT: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0 :: (load (s32), addrspace 4)
977    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
978    ; GFX7-LABEL: name: load_constant_s32_from_4_gep_1048575
979    ; GFX7: liveins: $sgpr0_sgpr1
980    ; GFX7-NEXT: {{  $}}
981    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
982    ; GFX7-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1048575
983    ; GFX7-NEXT: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0 :: (load (s32), addrspace 4)
984    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
985    ; GFX8-LABEL: name: load_constant_s32_from_4_gep_1048575
986    ; GFX8: liveins: $sgpr0_sgpr1
987    ; GFX8-NEXT: {{  $}}
988    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
989    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1048575, 0 :: (load (s32), addrspace 4)
990    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
991    ; GFX10-LABEL: name: load_constant_s32_from_4_gep_1048575
992    ; GFX10: liveins: $sgpr0_sgpr1
993    ; GFX10-NEXT: {{  $}}
994    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
995    ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1048575
996    ; GFX10-NEXT: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0 :: (load (s32), addrspace 4)
997    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
998    %0:sgpr(p4) = COPY $sgpr0_sgpr1
999    %1:sgpr(s64) = G_CONSTANT i64 1048575
1000    %2:sgpr(p4) = G_PTR_ADD %0, %1
1001    %3:sgpr(s32) = G_LOAD %2 :: (load (s32), align 4, addrspace 4)
1002    $sgpr0 = COPY %3
1003
1004...
1005
1006---
1007
1008name: load_constant_s32_from_4_gep_1048576
1009legalized:       true
1010regBankSelected: true
1011tracksRegLiveness: true
1012
1013body: |
1014  bb.0:
1015    liveins:  $sgpr0_sgpr1
1016
1017    ; GFX6-LABEL: name: load_constant_s32_from_4_gep_1048576
1018    ; GFX6: liveins: $sgpr0_sgpr1
1019    ; GFX6-NEXT: {{  $}}
1020    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1021    ; GFX6-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1048576
1022    ; GFX6-NEXT: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0 :: (load (s32), addrspace 4)
1023    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
1024    ; GFX7-LABEL: name: load_constant_s32_from_4_gep_1048576
1025    ; GFX7: liveins: $sgpr0_sgpr1
1026    ; GFX7-NEXT: {{  $}}
1027    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1028    ; GFX7-NEXT: [[S_LOAD_DWORD_IMM_ci:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM_ci [[COPY]], 262144, 0 :: (load (s32), addrspace 4)
1029    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM_ci]]
1030    ; GFX8-LABEL: name: load_constant_s32_from_4_gep_1048576
1031    ; GFX8: liveins: $sgpr0_sgpr1
1032    ; GFX8-NEXT: {{  $}}
1033    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1034    ; GFX8-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1048576
1035    ; GFX8-NEXT: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0 :: (load (s32), addrspace 4)
1036    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
1037    ; GFX10-LABEL: name: load_constant_s32_from_4_gep_1048576
1038    ; GFX10: liveins: $sgpr0_sgpr1
1039    ; GFX10-NEXT: {{  $}}
1040    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1041    ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1048576
1042    ; GFX10-NEXT: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0 :: (load (s32), addrspace 4)
1043    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
1044    %0:sgpr(p4) = COPY $sgpr0_sgpr1
1045    %1:sgpr(s64) = G_CONSTANT i64 1048576
1046    %2:sgpr(p4) = G_PTR_ADD %0, %1
1047    %3:sgpr(s32) = G_LOAD %2 :: (load (s32), align 4, addrspace 4)
1048    $sgpr0 = COPY %3
1049
1050...
1051
1052---
1053
1054name: load_constant_s32_from_4_gep_1073741823
1055legalized:       true
1056regBankSelected: true
1057tracksRegLiveness: true
1058
1059body: |
1060  bb.0:
1061    liveins:  $sgpr0_sgpr1
1062
1063    ; GFX6-LABEL: name: load_constant_s32_from_4_gep_1073741823
1064    ; GFX6: liveins: $sgpr0_sgpr1
1065    ; GFX6-NEXT: {{  $}}
1066    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1067    ; GFX6-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1073741823
1068    ; GFX6-NEXT: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0 :: (load (s32), addrspace 4)
1069    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
1070    ; GFX7-LABEL: name: load_constant_s32_from_4_gep_1073741823
1071    ; GFX7: liveins: $sgpr0_sgpr1
1072    ; GFX7-NEXT: {{  $}}
1073    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1074    ; GFX7-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1073741823
1075    ; GFX7-NEXT: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0 :: (load (s32), addrspace 4)
1076    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
1077    ; GFX8-LABEL: name: load_constant_s32_from_4_gep_1073741823
1078    ; GFX8: liveins: $sgpr0_sgpr1
1079    ; GFX8-NEXT: {{  $}}
1080    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1081    ; GFX8-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1073741823
1082    ; GFX8-NEXT: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0 :: (load (s32), addrspace 4)
1083    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
1084    ; GFX10-LABEL: name: load_constant_s32_from_4_gep_1073741823
1085    ; GFX10: liveins: $sgpr0_sgpr1
1086    ; GFX10-NEXT: {{  $}}
1087    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1088    ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1073741823
1089    ; GFX10-NEXT: [[S_LOAD_DWORD_SGPR:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR [[COPY]], [[S_MOV_B32_]], 0 :: (load (s32), addrspace 4)
1090    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
1091    %0:sgpr(p4) = COPY $sgpr0_sgpr1
1092    %1:sgpr(s64) = G_CONSTANT i64 1073741823
1093    %2:sgpr(p4) = G_PTR_ADD %0, %1
1094    %3:sgpr(s32) = G_LOAD %2 :: (load (s32), align 4, addrspace 4)
1095    $sgpr0 = COPY %3
1096
1097...
1098
1099---
1100
1101name: load_constant_s32_from_4_gep_negative_1
1102legalized:       true
1103regBankSelected: true
1104tracksRegLiveness: true
1105
1106body: |
1107  bb.0:
1108    liveins:  $sgpr0_sgpr1
1109
1110    ; GFX6-LABEL: name: load_constant_s32_from_4_gep_negative_1
1111    ; GFX6: liveins: $sgpr0_sgpr1
1112    ; GFX6-NEXT: {{  $}}
1113    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1114    ; GFX6-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 -1
1115    ; GFX6-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1116    ; GFX6-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub0
1117    ; GFX6-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1118    ; GFX6-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub1
1119    ; GFX6-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1120    ; GFX6-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def $scc, implicit $scc
1121    ; GFX6-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1122    ; GFX6-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE]], 0, 0 :: (load (s32), addrspace 4)
1123    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1124    ; GFX7-LABEL: name: load_constant_s32_from_4_gep_negative_1
1125    ; GFX7: liveins: $sgpr0_sgpr1
1126    ; GFX7-NEXT: {{  $}}
1127    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1128    ; GFX7-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 -1
1129    ; GFX7-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1130    ; GFX7-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub0
1131    ; GFX7-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1132    ; GFX7-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub1
1133    ; GFX7-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1134    ; GFX7-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def $scc, implicit $scc
1135    ; GFX7-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1136    ; GFX7-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE]], 0, 0 :: (load (s32), addrspace 4)
1137    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1138    ; GFX8-LABEL: name: load_constant_s32_from_4_gep_negative_1
1139    ; GFX8: liveins: $sgpr0_sgpr1
1140    ; GFX8-NEXT: {{  $}}
1141    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1142    ; GFX8-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 -1
1143    ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1144    ; GFX8-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub0
1145    ; GFX8-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1146    ; GFX8-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub1
1147    ; GFX8-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1148    ; GFX8-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def $scc, implicit $scc
1149    ; GFX8-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1150    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE]], 0, 0 :: (load (s32), addrspace 4)
1151    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1152    ; GFX10-LABEL: name: load_constant_s32_from_4_gep_negative_1
1153    ; GFX10: liveins: $sgpr0_sgpr1
1154    ; GFX10-NEXT: {{  $}}
1155    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1156    ; GFX10-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], -1, 0 :: (load (s32), addrspace 4)
1157    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1158    %0:sgpr(p4) = COPY $sgpr0_sgpr1
1159    %1:sgpr(s64) = G_CONSTANT i64 -1
1160    %2:sgpr(p4) = G_PTR_ADD %0, %1
1161    %3:sgpr(s32) = G_LOAD %2 :: (load (s32), align 4, addrspace 4)
1162    $sgpr0 = COPY %3
1163
1164...
1165
1166---
1167
1168name: load_constant_s32_from_4_gep_negative_524288
1169legalized:       true
1170regBankSelected: true
1171tracksRegLiveness: true
1172
1173body: |
1174  bb.0:
1175    liveins:  $sgpr0_sgpr1
1176
1177    ; GFX6-LABEL: name: load_constant_s32_from_4_gep_negative_524288
1178    ; GFX6: liveins: $sgpr0_sgpr1
1179    ; GFX6-NEXT: {{  $}}
1180    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1181    ; GFX6-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4294443008
1182    ; GFX6-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 -1
1183    ; GFX6-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
1184    ; GFX6-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1185    ; GFX6-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
1186    ; GFX6-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1187    ; GFX6-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
1188    ; GFX6-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1189    ; GFX6-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def $scc, implicit $scc
1190    ; GFX6-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1191    ; GFX6-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE1]], 0, 0 :: (load (s32), addrspace 4)
1192    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1193    ; GFX7-LABEL: name: load_constant_s32_from_4_gep_negative_524288
1194    ; GFX7: liveins: $sgpr0_sgpr1
1195    ; GFX7-NEXT: {{  $}}
1196    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1197    ; GFX7-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4294443008
1198    ; GFX7-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 -1
1199    ; GFX7-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
1200    ; GFX7-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1201    ; GFX7-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
1202    ; GFX7-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1203    ; GFX7-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
1204    ; GFX7-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1205    ; GFX7-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def $scc, implicit $scc
1206    ; GFX7-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1207    ; GFX7-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE1]], 0, 0 :: (load (s32), addrspace 4)
1208    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1209    ; GFX8-LABEL: name: load_constant_s32_from_4_gep_negative_524288
1210    ; GFX8: liveins: $sgpr0_sgpr1
1211    ; GFX8-NEXT: {{  $}}
1212    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1213    ; GFX8-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4294443008
1214    ; GFX8-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 -1
1215    ; GFX8-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
1216    ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1217    ; GFX8-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub0
1218    ; GFX8-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1219    ; GFX8-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[REG_SEQUENCE]].sub1
1220    ; GFX8-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1221    ; GFX8-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def $scc, implicit $scc
1222    ; GFX8-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1223    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE1]], 0, 0 :: (load (s32), addrspace 4)
1224    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1225    ; GFX10-LABEL: name: load_constant_s32_from_4_gep_negative_524288
1226    ; GFX10: liveins: $sgpr0_sgpr1
1227    ; GFX10-NEXT: {{  $}}
1228    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1229    ; GFX10-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], -524288, 0 :: (load (s32), addrspace 4)
1230    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1231    %0:sgpr(p4) = COPY $sgpr0_sgpr1
1232    %1:sgpr(s64) = G_CONSTANT i64 -524288
1233    %2:sgpr(p4) = G_PTR_ADD %0, %1
1234    %3:sgpr(s32) = G_LOAD %2 :: (load (s32), align 4, addrspace 4)
1235    $sgpr0 = COPY %3
1236
1237...
1238