xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-constant.mir (revision b356aa3e2da7d1792412783e2c6247538ead75e8)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -amdgpu-global-isel-new-legality -mtriple=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 -mtriple=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 -mtriple=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 -mtriple=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 -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX11 %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    ;
27    ; GFX7-LABEL: name: load_constant_s32_from_4
28    ; GFX7: liveins: $sgpr0_sgpr1
29    ; GFX7-NEXT: {{  $}}
30    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
31    ; GFX7-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (s32), addrspace 4)
32    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
33    ;
34    ; GFX8-LABEL: name: load_constant_s32_from_4
35    ; GFX8: liveins: $sgpr0_sgpr1
36    ; GFX8-NEXT: {{  $}}
37    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
38    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (s32), addrspace 4)
39    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
40    ;
41    ; GFX10-LABEL: name: load_constant_s32_from_4
42    ; GFX10: liveins: $sgpr0_sgpr1
43    ; GFX10-NEXT: {{  $}}
44    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
45    ; GFX10-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (s32), addrspace 4)
46    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
47    ;
48    ; GFX11-LABEL: name: load_constant_s32_from_4
49    ; GFX11: liveins: $sgpr0_sgpr1
50    ; GFX11-NEXT: {{  $}}
51    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
52    ; GFX11-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (s32), addrspace 4)
53    ; GFX11-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
54    %0:sgpr(p4) = COPY $sgpr0_sgpr1
55    %1:sgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 4)
56    $sgpr0 = COPY %1
57
58...
59
60---
61
62name: load_constant_v2s16_from_4
63legalized:       true
64regBankSelected: true
65tracksRegLiveness: true
66
67
68body: |
69  bb.0:
70    liveins:  $sgpr0_sgpr1
71
72    ; GFX6-LABEL: name: load_constant_v2s16_from_4
73    ; GFX6: liveins: $sgpr0_sgpr1
74    ; GFX6-NEXT: {{  $}}
75    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
76    ; 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)
77    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
78    ;
79    ; GFX7-LABEL: name: load_constant_v2s16_from_4
80    ; GFX7: liveins: $sgpr0_sgpr1
81    ; GFX7-NEXT: {{  $}}
82    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
83    ; 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)
84    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
85    ;
86    ; GFX8-LABEL: name: load_constant_v2s16_from_4
87    ; GFX8: liveins: $sgpr0_sgpr1
88    ; GFX8-NEXT: {{  $}}
89    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
90    ; 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)
91    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
92    ;
93    ; GFX10-LABEL: name: load_constant_v2s16_from_4
94    ; GFX10: liveins: $sgpr0_sgpr1
95    ; GFX10-NEXT: {{  $}}
96    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
97    ; 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)
98    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
99    ;
100    ; GFX11-LABEL: name: load_constant_v2s16_from_4
101    ; GFX11: liveins: $sgpr0_sgpr1
102    ; GFX11-NEXT: {{  $}}
103    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
104    ; GFX11-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (<2 x s16>), addrspace 4)
105    ; GFX11-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
106    %0:sgpr(p4) = COPY $sgpr0_sgpr1
107    %1:sgpr(<2 x s16>) = G_LOAD %0 :: (load (<2 x s16>), align 4, addrspace 4)
108    $sgpr0 = COPY %1
109
110...
111
112
113---
114name: load_constant_v2s32
115legalized:       true
116regBankSelected: true
117tracksRegLiveness: true
118
119body: |
120  bb.0:
121    liveins:  $sgpr0_sgpr1
122
123    ; GFX6-LABEL: name: load_constant_v2s32
124    ; GFX6: liveins: $sgpr0_sgpr1
125    ; GFX6-NEXT: {{  $}}
126    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
127    ; GFX6-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<2 x s32>), addrspace 4)
128    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
129    ;
130    ; GFX7-LABEL: name: load_constant_v2s32
131    ; GFX7: liveins: $sgpr0_sgpr1
132    ; GFX7-NEXT: {{  $}}
133    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
134    ; GFX7-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<2 x s32>), addrspace 4)
135    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
136    ;
137    ; GFX8-LABEL: name: load_constant_v2s32
138    ; GFX8: liveins: $sgpr0_sgpr1
139    ; GFX8-NEXT: {{  $}}
140    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
141    ; GFX8-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<2 x s32>), addrspace 4)
142    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
143    ;
144    ; GFX10-LABEL: name: load_constant_v2s32
145    ; GFX10: liveins: $sgpr0_sgpr1
146    ; GFX10-NEXT: {{  $}}
147    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
148    ; GFX10-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<2 x s32>), addrspace 4)
149    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
150    ;
151    ; GFX11-LABEL: name: load_constant_v2s32
152    ; GFX11: liveins: $sgpr0_sgpr1
153    ; GFX11-NEXT: {{  $}}
154    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
155    ; GFX11-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<2 x s32>), addrspace 4)
156    ; GFX11-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
157    %0:sgpr(p4) = COPY $sgpr0_sgpr1
158    %1:sgpr(<2 x s32>) = G_LOAD %0 :: (load (<2 x s32>), align 8, addrspace 4)
159    $sgpr0_sgpr1 = COPY %1
160
161...
162
163---
164name: load_constant_v2s32_align4
165legalized:       true
166regBankSelected: true
167tracksRegLiveness: true
168
169body: |
170  bb.0:
171    liveins:  $sgpr0_sgpr1
172
173    ; GFX6-LABEL: name: load_constant_v2s32_align4
174    ; GFX6: liveins: $sgpr0_sgpr1
175    ; GFX6-NEXT: {{  $}}
176    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
177    ; 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)
178    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
179    ;
180    ; GFX7-LABEL: name: load_constant_v2s32_align4
181    ; GFX7: liveins: $sgpr0_sgpr1
182    ; GFX7-NEXT: {{  $}}
183    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
184    ; 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)
185    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
186    ;
187    ; GFX8-LABEL: name: load_constant_v2s32_align4
188    ; GFX8: liveins: $sgpr0_sgpr1
189    ; GFX8-NEXT: {{  $}}
190    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
191    ; 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)
192    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
193    ;
194    ; GFX10-LABEL: name: load_constant_v2s32_align4
195    ; GFX10: liveins: $sgpr0_sgpr1
196    ; GFX10-NEXT: {{  $}}
197    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
198    ; GFX10-NEXT: early-clobber %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM_ec [[COPY]], 0, 0 :: (load (<2 x s32>), align 4, addrspace 4)
199    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY %1
200    ;
201    ; GFX11-LABEL: name: load_constant_v2s32_align4
202    ; GFX11: liveins: $sgpr0_sgpr1
203    ; GFX11-NEXT: {{  $}}
204    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
205    ; GFX11-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)
206    ; GFX11-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
207    %0:sgpr(p4) = COPY $sgpr0_sgpr1
208    %1:sgpr(<2 x s32>) = G_LOAD %0 :: (load (<2 x s32>), align 4, addrspace 4)
209    $sgpr0_sgpr1 = COPY %1
210
211...
212
213---
214name: load_constant_v4s16_align4
215legalized:       true
216regBankSelected: true
217tracksRegLiveness: true
218
219body: |
220  bb.0:
221    liveins:  $sgpr0_sgpr1
222
223    ; GFX6-LABEL: name: load_constant_v4s16_align4
224    ; GFX6: liveins: $sgpr0_sgpr1
225    ; GFX6-NEXT: {{  $}}
226    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
227    ; 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)
228    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
229    ;
230    ; GFX7-LABEL: name: load_constant_v4s16_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_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<4 x s16>), align 4, addrspace 4)
235    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
236    ;
237    ; GFX8-LABEL: name: load_constant_v4s16_align4
238    ; GFX8: liveins: $sgpr0_sgpr1
239    ; GFX8-NEXT: {{  $}}
240    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
241    ; 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)
242    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
243    ;
244    ; GFX10-LABEL: name: load_constant_v4s16_align4
245    ; GFX10: liveins: $sgpr0_sgpr1
246    ; GFX10-NEXT: {{  $}}
247    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
248    ; GFX10-NEXT: early-clobber %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM_ec [[COPY]], 0, 0 :: (load (<4 x s16>), align 4, addrspace 4)
249    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY %1
250    ;
251    ; GFX11-LABEL: name: load_constant_v4s16_align4
252    ; GFX11: liveins: $sgpr0_sgpr1
253    ; GFX11-NEXT: {{  $}}
254    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
255    ; GFX11-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)
256    ; GFX11-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
257    %0:sgpr(p4) = COPY $sgpr0_sgpr1
258    %1:sgpr(<4 x s16>) = G_LOAD %0 :: (load (<4 x s16>), align 4, addrspace 4)
259    $sgpr0_sgpr1 = COPY %1
260
261...
262
263---
264
265name: load_constant_v4s32_align4
266legalized:       true
267regBankSelected: true
268tracksRegLiveness: true
269
270body: |
271  bb.0:
272    liveins:  $sgpr0_sgpr1
273
274    ; GFX6-LABEL: name: load_constant_v4s32_align4
275    ; GFX6: liveins: $sgpr0_sgpr1
276    ; GFX6-NEXT: {{  $}}
277    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
278    ; 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)
279    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
280    ;
281    ; GFX7-LABEL: name: load_constant_v4s32_align4
282    ; GFX7: liveins: $sgpr0_sgpr1
283    ; GFX7-NEXT: {{  $}}
284    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
285    ; 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)
286    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
287    ;
288    ; GFX8-LABEL: name: load_constant_v4s32_align4
289    ; GFX8: liveins: $sgpr0_sgpr1
290    ; GFX8-NEXT: {{  $}}
291    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
292    ; 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)
293    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
294    ;
295    ; GFX10-LABEL: name: load_constant_v4s32_align4
296    ; GFX10: liveins: $sgpr0_sgpr1
297    ; GFX10-NEXT: {{  $}}
298    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
299    ; GFX10-NEXT: early-clobber %1:sgpr_128 = S_LOAD_DWORDX4_IMM_ec [[COPY]], 0, 0 :: (load (<4 x s32>), align 4, addrspace 4)
300    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1
301    ;
302    ; GFX11-LABEL: name: load_constant_v4s32_align4
303    ; GFX11: liveins: $sgpr0_sgpr1
304    ; GFX11-NEXT: {{  $}}
305    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
306    ; GFX11-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (<4 x s32>), align 4, addrspace 4)
307    ; GFX11-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
308    %0:sgpr(p4) = COPY $sgpr0_sgpr1
309    %1:sgpr(<4 x  s32>) = G_LOAD %0 :: (load (<4 x s32>), align 4, addrspace 4)
310    $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1
311
312...
313
314---
315
316name: load_constant_s64
317legalized:       true
318regBankSelected: true
319tracksRegLiveness: true
320
321body: |
322  bb.0:
323    liveins:  $sgpr0_sgpr1
324
325    ; GFX6-LABEL: name: load_constant_s64
326    ; GFX6: liveins: $sgpr0_sgpr1
327    ; GFX6-NEXT: {{  $}}
328    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
329    ; GFX6-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), addrspace 4)
330    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
331    ;
332    ; GFX7-LABEL: name: load_constant_s64
333    ; GFX7: liveins: $sgpr0_sgpr1
334    ; GFX7-NEXT: {{  $}}
335    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
336    ; GFX7-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), addrspace 4)
337    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
338    ;
339    ; GFX8-LABEL: name: load_constant_s64
340    ; GFX8: liveins: $sgpr0_sgpr1
341    ; GFX8-NEXT: {{  $}}
342    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
343    ; GFX8-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), addrspace 4)
344    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
345    ;
346    ; GFX10-LABEL: name: load_constant_s64
347    ; GFX10: liveins: $sgpr0_sgpr1
348    ; GFX10-NEXT: {{  $}}
349    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
350    ; GFX10-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), addrspace 4)
351    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
352    ;
353    ; GFX11-LABEL: name: load_constant_s64
354    ; GFX11: liveins: $sgpr0_sgpr1
355    ; GFX11-NEXT: {{  $}}
356    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
357    ; GFX11-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), addrspace 4)
358    ; GFX11-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
359    %0:sgpr(p4) = COPY $sgpr0_sgpr1
360    %1:sgpr(s64) = G_LOAD %0 :: (load (s64), align 8, addrspace 4)
361    $sgpr0_sgpr1 = COPY %1
362
363...
364
365---
366
367name: load_constant_s64_align4
368legalized:       true
369regBankSelected: true
370tracksRegLiveness: true
371
372body: |
373  bb.0:
374    liveins:  $sgpr0_sgpr1
375
376    ; GFX6-LABEL: name: load_constant_s64_align4
377    ; GFX6: liveins: $sgpr0_sgpr1
378    ; GFX6-NEXT: {{  $}}
379    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
380    ; GFX6-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), align 4, addrspace 4)
381    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
382    ;
383    ; GFX7-LABEL: name: load_constant_s64_align4
384    ; GFX7: liveins: $sgpr0_sgpr1
385    ; GFX7-NEXT: {{  $}}
386    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
387    ; GFX7-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), align 4, addrspace 4)
388    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
389    ;
390    ; GFX8-LABEL: name: load_constant_s64_align4
391    ; GFX8: liveins: $sgpr0_sgpr1
392    ; GFX8-NEXT: {{  $}}
393    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
394    ; GFX8-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), align 4, addrspace 4)
395    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
396    ;
397    ; GFX10-LABEL: name: load_constant_s64_align4
398    ; GFX10: liveins: $sgpr0_sgpr1
399    ; GFX10-NEXT: {{  $}}
400    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
401    ; GFX10-NEXT: early-clobber %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM_ec [[COPY]], 0, 0 :: (load (s64), align 4, addrspace 4)
402    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY %1
403    ;
404    ; GFX11-LABEL: name: load_constant_s64_align4
405    ; GFX11: liveins: $sgpr0_sgpr1
406    ; GFX11-NEXT: {{  $}}
407    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
408    ; GFX11-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (s64), align 4, addrspace 4)
409    ; GFX11-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
410    %0:sgpr(p4) = COPY $sgpr0_sgpr1
411    %1:sgpr(s64) = G_LOAD %0 :: (load (s64), align 4, addrspace 4)
412    $sgpr0_sgpr1 = COPY %1
413
414...
415
416---
417
418name: load_constant_v2s64
419legalized:       true
420regBankSelected: true
421tracksRegLiveness: true
422
423body: |
424  bb.0:
425    liveins:  $sgpr0_sgpr1
426
427    ; GFX6-LABEL: name: load_constant_v2s64
428    ; GFX6: liveins: $sgpr0_sgpr1
429    ; GFX6-NEXT: {{  $}}
430    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
431    ; 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)
432    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
433    ;
434    ; GFX7-LABEL: name: load_constant_v2s64
435    ; GFX7: liveins: $sgpr0_sgpr1
436    ; GFX7-NEXT: {{  $}}
437    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
438    ; 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)
439    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
440    ;
441    ; GFX8-LABEL: name: load_constant_v2s64
442    ; GFX8: liveins: $sgpr0_sgpr1
443    ; GFX8-NEXT: {{  $}}
444    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
445    ; 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)
446    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
447    ;
448    ; GFX10-LABEL: name: load_constant_v2s64
449    ; GFX10: liveins: $sgpr0_sgpr1
450    ; GFX10-NEXT: {{  $}}
451    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
452    ; GFX10-NEXT: early-clobber %1:sgpr_128 = S_LOAD_DWORDX4_IMM_ec [[COPY]], 0, 0 :: (load (<2 x s64>), align 4, addrspace 4)
453    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1
454    ;
455    ; GFX11-LABEL: name: load_constant_v2s64
456    ; GFX11: liveins: $sgpr0_sgpr1
457    ; GFX11-NEXT: {{  $}}
458    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
459    ; GFX11-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (<2 x s64>), align 4, addrspace 4)
460    ; GFX11-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
461    %0:sgpr(p4) = COPY $sgpr0_sgpr1
462    %1:sgpr(<2 x s64>) = G_LOAD %0 :: (load (<2 x s64>), align 4, addrspace 4)
463    $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1
464
465...
466
467---
468
469name: load_constant_v2p1
470legalized:       true
471regBankSelected: true
472tracksRegLiveness: true
473
474body: |
475  bb.0:
476    liveins:  $sgpr0_sgpr1
477
478    ; GFX6-LABEL: name: load_constant_v2p1
479    ; GFX6: liveins: $sgpr0_sgpr1
480    ; GFX6-NEXT: {{  $}}
481    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
482    ; GFX6-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(<2 x p1>) = G_LOAD [[COPY]](p4) :: (load (<2 x p1>), align 4, addrspace 4)
483    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<2 x p1>)
484    ;
485    ; GFX7-LABEL: name: load_constant_v2p1
486    ; GFX7: liveins: $sgpr0_sgpr1
487    ; GFX7-NEXT: {{  $}}
488    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
489    ; GFX7-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(<2 x p1>) = G_LOAD [[COPY]](p4) :: (load (<2 x p1>), align 4, addrspace 4)
490    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<2 x p1>)
491    ;
492    ; GFX8-LABEL: name: load_constant_v2p1
493    ; GFX8: liveins: $sgpr0_sgpr1
494    ; GFX8-NEXT: {{  $}}
495    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
496    ; GFX8-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(<2 x p1>) = G_LOAD [[COPY]](p4) :: (load (<2 x p1>), align 4, addrspace 4)
497    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<2 x p1>)
498    ;
499    ; GFX10-LABEL: name: load_constant_v2p1
500    ; GFX10: liveins: $sgpr0_sgpr1
501    ; GFX10-NEXT: {{  $}}
502    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
503    ; GFX10-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(<2 x p1>) = G_LOAD [[COPY]](p4) :: (load (<2 x p1>), align 4, addrspace 4)
504    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<2 x p1>)
505    ;
506    ; GFX11-LABEL: name: load_constant_v2p1
507    ; GFX11: liveins: $sgpr0_sgpr1
508    ; GFX11-NEXT: {{  $}}
509    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
510    ; GFX11-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(<2 x p1>) = G_LOAD [[COPY]](p4) :: (load (<2 x p1>), align 4, addrspace 4)
511    ; GFX11-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](<2 x p1>)
512    %0:sgpr(p4) = COPY $sgpr0_sgpr1
513    %1:sgpr(<2 x p1>) = G_LOAD %0 :: (load (<2 x p1>), align 4, addrspace 4)
514    $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1
515
516...
517
518---
519
520name: load_constant_s128_align4
521legalized:       true
522regBankSelected: true
523tracksRegLiveness: true
524
525body: |
526  bb.0:
527    liveins:  $sgpr0_sgpr1
528
529    ; GFX6-LABEL: name: load_constant_s128_align4
530    ; GFX6: liveins: $sgpr0_sgpr1
531    ; GFX6-NEXT: {{  $}}
532    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
533    ; GFX6-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(s128) = G_LOAD [[COPY]](p4) :: (load (s128), align 4, addrspace 4)
534    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](s128)
535    ;
536    ; GFX7-LABEL: name: load_constant_s128_align4
537    ; GFX7: liveins: $sgpr0_sgpr1
538    ; GFX7-NEXT: {{  $}}
539    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
540    ; GFX7-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(s128) = G_LOAD [[COPY]](p4) :: (load (s128), align 4, addrspace 4)
541    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](s128)
542    ;
543    ; GFX8-LABEL: name: load_constant_s128_align4
544    ; GFX8: liveins: $sgpr0_sgpr1
545    ; GFX8-NEXT: {{  $}}
546    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
547    ; GFX8-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(s128) = G_LOAD [[COPY]](p4) :: (load (s128), align 4, addrspace 4)
548    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](s128)
549    ;
550    ; GFX10-LABEL: name: load_constant_s128_align4
551    ; GFX10: liveins: $sgpr0_sgpr1
552    ; GFX10-NEXT: {{  $}}
553    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
554    ; GFX10-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(s128) = G_LOAD [[COPY]](p4) :: (load (s128), align 4, addrspace 4)
555    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](s128)
556    ;
557    ; GFX11-LABEL: name: load_constant_s128_align4
558    ; GFX11: liveins: $sgpr0_sgpr1
559    ; GFX11-NEXT: {{  $}}
560    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
561    ; GFX11-NEXT: [[LOAD:%[0-9]+]]:sgpr_128(s128) = G_LOAD [[COPY]](p4) :: (load (s128), align 4, addrspace 4)
562    ; GFX11-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[LOAD]](s128)
563    %0:sgpr(p4) = COPY $sgpr0_sgpr1
564    %1:sgpr(s128) = G_LOAD %0 :: (load (s128), align 4, addrspace 4)
565    $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1
566
567...
568
569---
570
571name: load_constant_p3_from_4
572legalized:       true
573regBankSelected: true
574tracksRegLiveness: true
575
576body: |
577  bb.0:
578    liveins:  $sgpr0_sgpr1
579
580    ; GFX6-LABEL: name: load_constant_p3_from_4
581    ; GFX6: liveins: $sgpr0_sgpr1
582    ; GFX6-NEXT: {{  $}}
583    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
584    ; GFX6-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (p3), addrspace 4)
585    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
586    ;
587    ; GFX7-LABEL: name: load_constant_p3_from_4
588    ; GFX7: liveins: $sgpr0_sgpr1
589    ; GFX7-NEXT: {{  $}}
590    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
591    ; GFX7-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (p3), addrspace 4)
592    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
593    ;
594    ; GFX8-LABEL: name: load_constant_p3_from_4
595    ; GFX8: liveins: $sgpr0_sgpr1
596    ; GFX8-NEXT: {{  $}}
597    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
598    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (p3), addrspace 4)
599    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
600    ;
601    ; GFX10-LABEL: name: load_constant_p3_from_4
602    ; GFX10: liveins: $sgpr0_sgpr1
603    ; GFX10-NEXT: {{  $}}
604    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
605    ; GFX10-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (p3), addrspace 4)
606    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
607    ;
608    ; GFX11-LABEL: name: load_constant_p3_from_4
609    ; GFX11: liveins: $sgpr0_sgpr1
610    ; GFX11-NEXT: {{  $}}
611    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
612    ; GFX11-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (p3), addrspace 4)
613    ; GFX11-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
614    %0:sgpr(p4) = COPY $sgpr0_sgpr1
615    %1:sgpr(p3) = G_LOAD %0 :: (load (p3), align 4, addrspace 4)
616    $sgpr0 = COPY %1
617
618...
619
620---
621
622name: load_constant_p4_from_8
623legalized:       true
624regBankSelected: true
625tracksRegLiveness: true
626
627body: |
628  bb.0:
629    liveins:  $sgpr0_sgpr1
630
631    ; GFX6-LABEL: name: load_constant_p4_from_8
632    ; GFX6: liveins: $sgpr0_sgpr1
633    ; GFX6-NEXT: {{  $}}
634    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
635    ; GFX6-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (p4), addrspace 4)
636    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
637    ;
638    ; GFX7-LABEL: name: load_constant_p4_from_8
639    ; GFX7: liveins: $sgpr0_sgpr1
640    ; GFX7-NEXT: {{  $}}
641    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
642    ; GFX7-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (p4), addrspace 4)
643    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
644    ;
645    ; GFX8-LABEL: name: load_constant_p4_from_8
646    ; GFX8: liveins: $sgpr0_sgpr1
647    ; GFX8-NEXT: {{  $}}
648    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
649    ; GFX8-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (p4), addrspace 4)
650    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
651    ;
652    ; GFX10-LABEL: name: load_constant_p4_from_8
653    ; GFX10: liveins: $sgpr0_sgpr1
654    ; GFX10-NEXT: {{  $}}
655    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
656    ; GFX10-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (p4), addrspace 4)
657    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
658    ;
659    ; GFX11-LABEL: name: load_constant_p4_from_8
660    ; GFX11: liveins: $sgpr0_sgpr1
661    ; GFX11-NEXT: {{  $}}
662    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
663    ; GFX11-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (p4), addrspace 4)
664    ; GFX11-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
665    %0:sgpr(p4) = COPY $sgpr0_sgpr1
666    %1:sgpr(p4) = G_LOAD %0 :: (load (p4), align 8, addrspace 4)
667    $sgpr0_sgpr1 = COPY %1
668
669...
670
671---
672
673name: load_constant_p999_from_8
674legalized:       true
675regBankSelected: true
676tracksRegLiveness: true
677
678body: |
679  bb.0:
680    liveins:  $sgpr0_sgpr1
681
682    ; GFX6-LABEL: name: load_constant_p999_from_8
683    ; GFX6: liveins: $sgpr0_sgpr1
684    ; GFX6-NEXT: {{  $}}
685    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
686    ; GFX6-NEXT: [[LOAD:%[0-9]+]]:sreg_64(p999) = G_LOAD [[COPY]](p4) :: (load (p999), addrspace 4)
687    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](p999)
688    ;
689    ; GFX7-LABEL: name: load_constant_p999_from_8
690    ; GFX7: liveins: $sgpr0_sgpr1
691    ; GFX7-NEXT: {{  $}}
692    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
693    ; GFX7-NEXT: [[LOAD:%[0-9]+]]:sreg_64(p999) = G_LOAD [[COPY]](p4) :: (load (p999), addrspace 4)
694    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](p999)
695    ;
696    ; GFX8-LABEL: name: load_constant_p999_from_8
697    ; GFX8: liveins: $sgpr0_sgpr1
698    ; GFX8-NEXT: {{  $}}
699    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
700    ; GFX8-NEXT: [[LOAD:%[0-9]+]]:sreg_64(p999) = G_LOAD [[COPY]](p4) :: (load (p999), addrspace 4)
701    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](p999)
702    ;
703    ; GFX10-LABEL: name: load_constant_p999_from_8
704    ; GFX10: liveins: $sgpr0_sgpr1
705    ; GFX10-NEXT: {{  $}}
706    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
707    ; GFX10-NEXT: [[LOAD:%[0-9]+]]:sreg_64(p999) = G_LOAD [[COPY]](p4) :: (load (p999), addrspace 4)
708    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](p999)
709    ;
710    ; GFX11-LABEL: name: load_constant_p999_from_8
711    ; GFX11: liveins: $sgpr0_sgpr1
712    ; GFX11-NEXT: {{  $}}
713    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
714    ; GFX11-NEXT: [[LOAD:%[0-9]+]]:sreg_64(p999) = G_LOAD [[COPY]](p4) :: (load (p999), addrspace 4)
715    ; GFX11-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](p999)
716    %0:sgpr(p4) = COPY $sgpr0_sgpr1
717    %1:sgpr(p999) = G_LOAD %0 :: (load (p999), align 8, addrspace 4)
718    $sgpr0_sgpr1 = COPY %1
719
720...
721
722---
723
724name: load_constant_v2p3
725legalized:       true
726regBankSelected: true
727tracksRegLiveness: true
728
729body: |
730  bb.0:
731    liveins:  $sgpr0_sgpr1
732
733    ; GFX6-LABEL: name: load_constant_v2p3
734    ; GFX6: liveins: $sgpr0_sgpr1
735    ; GFX6-NEXT: {{  $}}
736    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
737    ; GFX6-NEXT: [[LOAD:%[0-9]+]]:sreg_64(<2 x p3>) = G_LOAD [[COPY]](p4) :: (load (<2 x p3>), addrspace 4)
738    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](<2 x p3>)
739    ;
740    ; GFX7-LABEL: name: load_constant_v2p3
741    ; GFX7: liveins: $sgpr0_sgpr1
742    ; GFX7-NEXT: {{  $}}
743    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
744    ; GFX7-NEXT: [[LOAD:%[0-9]+]]:sreg_64(<2 x p3>) = G_LOAD [[COPY]](p4) :: (load (<2 x p3>), addrspace 4)
745    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](<2 x p3>)
746    ;
747    ; GFX8-LABEL: name: load_constant_v2p3
748    ; GFX8: liveins: $sgpr0_sgpr1
749    ; GFX8-NEXT: {{  $}}
750    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
751    ; GFX8-NEXT: [[LOAD:%[0-9]+]]:sreg_64(<2 x p3>) = G_LOAD [[COPY]](p4) :: (load (<2 x p3>), addrspace 4)
752    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](<2 x p3>)
753    ;
754    ; GFX10-LABEL: name: load_constant_v2p3
755    ; GFX10: liveins: $sgpr0_sgpr1
756    ; GFX10-NEXT: {{  $}}
757    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
758    ; GFX10-NEXT: [[LOAD:%[0-9]+]]:sreg_64(<2 x p3>) = G_LOAD [[COPY]](p4) :: (load (<2 x p3>), addrspace 4)
759    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](<2 x p3>)
760    ;
761    ; GFX11-LABEL: name: load_constant_v2p3
762    ; GFX11: liveins: $sgpr0_sgpr1
763    ; GFX11-NEXT: {{  $}}
764    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sgpr(p4) = COPY $sgpr0_sgpr1
765    ; GFX11-NEXT: [[LOAD:%[0-9]+]]:sreg_64(<2 x p3>) = G_LOAD [[COPY]](p4) :: (load (<2 x p3>), addrspace 4)
766    ; GFX11-NEXT: $sgpr0_sgpr1 = COPY [[LOAD]](<2 x p3>)
767    %0:sgpr(p4) = COPY $sgpr0_sgpr1
768    %1:sgpr(<2 x p3>) = G_LOAD %0 :: (load (<2 x p3>), align 8, addrspace 4)
769    $sgpr0_sgpr1 = COPY %1
770
771...
772
773---
774
775name: load_constant_v2s16
776legalized:       true
777regBankSelected: true
778tracksRegLiveness: true
779
780body: |
781  bb.0:
782    liveins:  $sgpr0_sgpr1
783
784    ; GFX6-LABEL: name: load_constant_v2s16
785    ; GFX6: liveins: $sgpr0_sgpr1
786    ; GFX6-NEXT: {{  $}}
787    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
788    ; 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)
789    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
790    ;
791    ; GFX7-LABEL: name: load_constant_v2s16
792    ; GFX7: liveins: $sgpr0_sgpr1
793    ; GFX7-NEXT: {{  $}}
794    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
795    ; 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)
796    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
797    ;
798    ; GFX8-LABEL: name: load_constant_v2s16
799    ; GFX8: liveins: $sgpr0_sgpr1
800    ; GFX8-NEXT: {{  $}}
801    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
802    ; 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)
803    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
804    ;
805    ; GFX10-LABEL: name: load_constant_v2s16
806    ; GFX10: liveins: $sgpr0_sgpr1
807    ; GFX10-NEXT: {{  $}}
808    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
809    ; 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)
810    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
811    ;
812    ; GFX11-LABEL: name: load_constant_v2s16
813    ; GFX11: liveins: $sgpr0_sgpr1
814    ; GFX11-NEXT: {{  $}}
815    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
816    ; GFX11-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 0, 0 :: (load (<2 x s16>), addrspace 4)
817    ; GFX11-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
818    %0:sgpr(p4) = COPY $sgpr0_sgpr1
819    %1:sgpr(<2 x s16>) = G_LOAD %0 :: (load (<2 x s16>), align 4, addrspace 4)
820    $sgpr0 = COPY %1
821
822...
823
824---
825
826name: load_constant_v4s16
827legalized:       true
828regBankSelected: true
829tracksRegLiveness: true
830
831body: |
832  bb.0:
833    liveins:  $sgpr0_sgpr1
834
835    ; GFX6-LABEL: name: load_constant_v4s16
836    ; GFX6: liveins: $sgpr0_sgpr1
837    ; GFX6-NEXT: {{  $}}
838    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
839    ; GFX6-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<4 x s16>), addrspace 4)
840    ; GFX6-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
841    ;
842    ; GFX7-LABEL: name: load_constant_v4s16
843    ; GFX7: liveins: $sgpr0_sgpr1
844    ; GFX7-NEXT: {{  $}}
845    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
846    ; GFX7-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<4 x s16>), addrspace 4)
847    ; GFX7-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
848    ;
849    ; GFX8-LABEL: name: load_constant_v4s16
850    ; GFX8: liveins: $sgpr0_sgpr1
851    ; GFX8-NEXT: {{  $}}
852    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
853    ; GFX8-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<4 x s16>), addrspace 4)
854    ; GFX8-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
855    ;
856    ; GFX10-LABEL: name: load_constant_v4s16
857    ; GFX10: liveins: $sgpr0_sgpr1
858    ; GFX10-NEXT: {{  $}}
859    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
860    ; GFX10-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<4 x s16>), addrspace 4)
861    ; GFX10-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
862    ;
863    ; GFX11-LABEL: name: load_constant_v4s16
864    ; GFX11: liveins: $sgpr0_sgpr1
865    ; GFX11-NEXT: {{  $}}
866    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
867    ; GFX11-NEXT: [[S_LOAD_DWORDX2_IMM:%[0-9]+]]:sreg_64_xexec = S_LOAD_DWORDX2_IMM [[COPY]], 0, 0 :: (load (<4 x s16>), addrspace 4)
868    ; GFX11-NEXT: $sgpr0_sgpr1 = COPY [[S_LOAD_DWORDX2_IMM]]
869    %0:sgpr(p4) = COPY $sgpr0_sgpr1
870    %1:sgpr(<4 x s16>) = G_LOAD %0 :: (load (<4 x s16>), align 8, addrspace 4)
871    $sgpr0_sgpr1 = COPY %1
872
873...
874
875---
876
877name: load_constant_v8s16
878legalized:       true
879regBankSelected: true
880tracksRegLiveness: true
881
882body: |
883  bb.0:
884    liveins:  $sgpr0_sgpr1
885
886    ; GFX6-LABEL: name: load_constant_v8s16
887    ; GFX6: liveins: $sgpr0_sgpr1
888    ; GFX6-NEXT: {{  $}}
889    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
890    ; 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)
891    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
892    ;
893    ; GFX7-LABEL: name: load_constant_v8s16
894    ; GFX7: liveins: $sgpr0_sgpr1
895    ; GFX7-NEXT: {{  $}}
896    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
897    ; 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)
898    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
899    ;
900    ; GFX8-LABEL: name: load_constant_v8s16
901    ; GFX8: liveins: $sgpr0_sgpr1
902    ; GFX8-NEXT: {{  $}}
903    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
904    ; 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)
905    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
906    ;
907    ; GFX10-LABEL: name: load_constant_v8s16
908    ; GFX10: liveins: $sgpr0_sgpr1
909    ; GFX10-NEXT: {{  $}}
910    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
911    ; GFX10-NEXT: early-clobber %1:sgpr_128 = S_LOAD_DWORDX4_IMM_ec [[COPY]], 0, 0 :: (load (<8 x s16>), align 4, addrspace 4)
912    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1
913    ;
914    ; GFX11-LABEL: name: load_constant_v8s16
915    ; GFX11: liveins: $sgpr0_sgpr1
916    ; GFX11-NEXT: {{  $}}
917    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
918    ; GFX11-NEXT: [[S_LOAD_DWORDX4_IMM:%[0-9]+]]:sgpr_128 = S_LOAD_DWORDX4_IMM [[COPY]], 0, 0 :: (load (<8 x s16>), align 4, addrspace 4)
919    ; GFX11-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3 = COPY [[S_LOAD_DWORDX4_IMM]]
920    %0:sgpr(p4) = COPY $sgpr0_sgpr1
921    %1:sgpr(<8 x s16>) = G_LOAD %0 :: (load (<8 x s16>), align 4, addrspace 4)
922    $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %1
923
924...
925
926---
927
928name: load_constant_v8s32
929legalized:       true
930regBankSelected: true
931tracksRegLiveness: true
932
933body: |
934  bb.0:
935    liveins:  $sgpr0_sgpr1
936
937    ; GFX6-LABEL: name: load_constant_v8s32
938    ; GFX6: liveins: $sgpr0_sgpr1
939    ; GFX6-NEXT: {{  $}}
940    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
941    ; 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)
942    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[S_LOAD_DWORDX8_IMM]]
943    ;
944    ; GFX7-LABEL: name: load_constant_v8s32
945    ; GFX7: liveins: $sgpr0_sgpr1
946    ; GFX7-NEXT: {{  $}}
947    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
948    ; 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)
949    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[S_LOAD_DWORDX8_IMM]]
950    ;
951    ; GFX8-LABEL: name: load_constant_v8s32
952    ; GFX8: liveins: $sgpr0_sgpr1
953    ; GFX8-NEXT: {{  $}}
954    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
955    ; 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)
956    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[S_LOAD_DWORDX8_IMM]]
957    ;
958    ; GFX10-LABEL: name: load_constant_v8s32
959    ; GFX10: liveins: $sgpr0_sgpr1
960    ; GFX10-NEXT: {{  $}}
961    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
962    ; GFX10-NEXT: early-clobber %1:sgpr_256 = S_LOAD_DWORDX8_IMM_ec [[COPY]], 0, 0 :: (load (<8 x s32>), align 4, addrspace 4)
963    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY %1
964    ;
965    ; GFX11-LABEL: name: load_constant_v8s32
966    ; GFX11: liveins: $sgpr0_sgpr1
967    ; GFX11-NEXT: {{  $}}
968    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
969    ; GFX11-NEXT: [[S_LOAD_DWORDX8_IMM:%[0-9]+]]:sgpr_256 = S_LOAD_DWORDX8_IMM [[COPY]], 0, 0 :: (load (<8 x s32>), align 4, addrspace 4)
970    ; GFX11-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY [[S_LOAD_DWORDX8_IMM]]
971    %0:sgpr(p4) = COPY $sgpr0_sgpr1
972    %1:sgpr(<8 x s32>) = G_LOAD %0 :: (load (<8 x s32>), align 4, addrspace 4)
973    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7 = COPY %1
974
975...
976
977---
978
979name: load_constant_v16s32
980legalized:       true
981regBankSelected: true
982tracksRegLiveness: true
983
984body: |
985  bb.0:
986    liveins:  $sgpr0_sgpr1
987
988    ; GFX6-LABEL: name: load_constant_v16s32
989    ; GFX6: liveins: $sgpr0_sgpr1
990    ; GFX6-NEXT: {{  $}}
991    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
992    ; 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)
993    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
994    ;
995    ; GFX7-LABEL: name: load_constant_v16s32
996    ; GFX7: liveins: $sgpr0_sgpr1
997    ; GFX7-NEXT: {{  $}}
998    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
999    ; 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)
1000    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
1001    ;
1002    ; GFX8-LABEL: name: load_constant_v16s32
1003    ; GFX8: liveins: $sgpr0_sgpr1
1004    ; GFX8-NEXT: {{  $}}
1005    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1006    ; 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)
1007    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
1008    ;
1009    ; GFX10-LABEL: name: load_constant_v16s32
1010    ; GFX10: liveins: $sgpr0_sgpr1
1011    ; GFX10-NEXT: {{  $}}
1012    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1013    ; GFX10-NEXT: early-clobber %1:sgpr_512 = S_LOAD_DWORDX16_IMM_ec [[COPY]], 0, 0 :: (load (<16 x s32>), align 4, addrspace 4)
1014    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY %1
1015    ;
1016    ; GFX11-LABEL: name: load_constant_v16s32
1017    ; GFX11: liveins: $sgpr0_sgpr1
1018    ; GFX11-NEXT: {{  $}}
1019    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1020    ; GFX11-NEXT: [[S_LOAD_DWORDX16_IMM:%[0-9]+]]:sgpr_512 = S_LOAD_DWORDX16_IMM [[COPY]], 0, 0 :: (load (<16 x s32>), align 4, addrspace 4)
1021    ; GFX11-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
1022    %0:sgpr(p4) = COPY $sgpr0_sgpr1
1023    %1:sgpr(<16 x s32>) = G_LOAD %0 :: (load (<16 x s32>), align 4, addrspace 4)
1024    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY %1
1025
1026...
1027
1028---
1029
1030name: load_constant_v8s64
1031legalized:       true
1032regBankSelected: true
1033tracksRegLiveness: true
1034
1035body: |
1036  bb.0:
1037    liveins:  $sgpr0_sgpr1
1038
1039    ; GFX6-LABEL: name: load_constant_v8s64
1040    ; GFX6: liveins: $sgpr0_sgpr1
1041    ; GFX6-NEXT: {{  $}}
1042    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1043    ; 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)
1044    ; GFX6-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
1045    ;
1046    ; GFX7-LABEL: name: load_constant_v8s64
1047    ; GFX7: liveins: $sgpr0_sgpr1
1048    ; GFX7-NEXT: {{  $}}
1049    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1050    ; 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)
1051    ; GFX7-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
1052    ;
1053    ; GFX8-LABEL: name: load_constant_v8s64
1054    ; GFX8: liveins: $sgpr0_sgpr1
1055    ; GFX8-NEXT: {{  $}}
1056    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1057    ; 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)
1058    ; GFX8-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
1059    ;
1060    ; GFX10-LABEL: name: load_constant_v8s64
1061    ; GFX10: liveins: $sgpr0_sgpr1
1062    ; GFX10-NEXT: {{  $}}
1063    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1064    ; GFX10-NEXT: early-clobber %1:sgpr_512 = S_LOAD_DWORDX16_IMM_ec [[COPY]], 0, 0 :: (load (<8 x s64>), align 4, addrspace 4)
1065    ; GFX10-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY %1
1066    ;
1067    ; GFX11-LABEL: name: load_constant_v8s64
1068    ; GFX11: liveins: $sgpr0_sgpr1
1069    ; GFX11-NEXT: {{  $}}
1070    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1071    ; GFX11-NEXT: [[S_LOAD_DWORDX16_IMM:%[0-9]+]]:sgpr_512 = S_LOAD_DWORDX16_IMM [[COPY]], 0, 0 :: (load (<8 x s64>), align 4, addrspace 4)
1072    ; GFX11-NEXT: $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY [[S_LOAD_DWORDX16_IMM]]
1073    %0:sgpr(p4) = COPY $sgpr0_sgpr1
1074    %1:sgpr(<8 x s64>) = G_LOAD %0 :: (load (<8 x s64>), align 4, addrspace 4)
1075    $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7_sgpr8_sgpr9_sgpr10_sgpr11_sgpr12_sgpr13_sgpr14_sgpr15 = COPY %1
1076
1077...
1078
1079################################################################################
1080### Stress addressing modes
1081################################################################################
1082
1083---
1084
1085name: load_constant_s32_from_4_gep_1020
1086legalized:       true
1087regBankSelected: true
1088tracksRegLiveness: true
1089
1090body: |
1091  bb.0:
1092    liveins:  $sgpr0_sgpr1
1093
1094    ; GFX6-LABEL: name: load_constant_s32_from_4_gep_1020
1095    ; GFX6: liveins: $sgpr0_sgpr1
1096    ; GFX6-NEXT: {{  $}}
1097    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1098    ; GFX6-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 255, 0 :: (load (s32), addrspace 4)
1099    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1100    ;
1101    ; GFX7-LABEL: name: load_constant_s32_from_4_gep_1020
1102    ; GFX7: liveins: $sgpr0_sgpr1
1103    ; GFX7-NEXT: {{  $}}
1104    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1105    ; GFX7-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 255, 0 :: (load (s32), addrspace 4)
1106    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1107    ;
1108    ; GFX8-LABEL: name: load_constant_s32_from_4_gep_1020
1109    ; GFX8: liveins: $sgpr0_sgpr1
1110    ; GFX8-NEXT: {{  $}}
1111    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1112    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1020, 0 :: (load (s32), addrspace 4)
1113    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1114    ;
1115    ; GFX10-LABEL: name: load_constant_s32_from_4_gep_1020
1116    ; GFX10: liveins: $sgpr0_sgpr1
1117    ; GFX10-NEXT: {{  $}}
1118    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1119    ; GFX10-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1020, 0 :: (load (s32), addrspace 4)
1120    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1121    ;
1122    ; GFX11-LABEL: name: load_constant_s32_from_4_gep_1020
1123    ; GFX11: liveins: $sgpr0_sgpr1
1124    ; GFX11-NEXT: {{  $}}
1125    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1126    ; GFX11-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1020, 0 :: (load (s32), addrspace 4)
1127    ; GFX11-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1128    %0:sgpr(p4) = COPY $sgpr0_sgpr1
1129    %1:sgpr(s64) = G_CONSTANT i64 1020
1130    %2:sgpr(p4) = G_PTR_ADD %0, %1
1131    %3:sgpr(s32) = G_LOAD %2 :: (load (s32), align 4, addrspace 4)
1132    $sgpr0 = COPY %3
1133
1134...
1135
1136---
1137
1138name: load_constant_s32_from_4_gep_1024
1139legalized:       true
1140regBankSelected: true
1141tracksRegLiveness: true
1142
1143body: |
1144  bb.0:
1145    liveins:  $sgpr0_sgpr1
1146
1147    ; GFX6-LABEL: name: load_constant_s32_from_4_gep_1024
1148    ; GFX6: liveins: $sgpr0_sgpr1
1149    ; GFX6-NEXT: {{  $}}
1150    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1151    ; GFX6-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1024
1152    ; 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)
1153    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
1154    ;
1155    ; GFX7-LABEL: name: load_constant_s32_from_4_gep_1024
1156    ; GFX7: liveins: $sgpr0_sgpr1
1157    ; GFX7-NEXT: {{  $}}
1158    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1159    ; 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)
1160    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM_ci]]
1161    ;
1162    ; GFX8-LABEL: name: load_constant_s32_from_4_gep_1024
1163    ; GFX8: liveins: $sgpr0_sgpr1
1164    ; GFX8-NEXT: {{  $}}
1165    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1166    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1024, 0 :: (load (s32), addrspace 4)
1167    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1168    ;
1169    ; GFX10-LABEL: name: load_constant_s32_from_4_gep_1024
1170    ; GFX10: liveins: $sgpr0_sgpr1
1171    ; GFX10-NEXT: {{  $}}
1172    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1173    ; GFX10-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1024, 0 :: (load (s32), addrspace 4)
1174    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1175    ;
1176    ; GFX11-LABEL: name: load_constant_s32_from_4_gep_1024
1177    ; GFX11: liveins: $sgpr0_sgpr1
1178    ; GFX11-NEXT: {{  $}}
1179    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1180    ; GFX11-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1024, 0 :: (load (s32), addrspace 4)
1181    ; GFX11-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1182    %0:sgpr(p4) = COPY $sgpr0_sgpr1
1183    %1:sgpr(s64) = G_CONSTANT i64 1024
1184    %2:sgpr(p4) = G_PTR_ADD %0, %1
1185    %3:sgpr(s32) = G_LOAD %2 :: (load (s32), align 4, addrspace 4)
1186    $sgpr0 = COPY %3
1187
1188...
1189
1190---
1191
1192name: load_constant_s32_from_4_gep_1048575
1193legalized:       true
1194regBankSelected: true
1195tracksRegLiveness: true
1196
1197body: |
1198  bb.0:
1199    liveins:  $sgpr0_sgpr1
1200
1201    ; GFX6-LABEL: name: load_constant_s32_from_4_gep_1048575
1202    ; GFX6: liveins: $sgpr0_sgpr1
1203    ; GFX6-NEXT: {{  $}}
1204    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1205    ; GFX6-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1048575
1206    ; 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)
1207    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
1208    ;
1209    ; GFX7-LABEL: name: load_constant_s32_from_4_gep_1048575
1210    ; GFX7: liveins: $sgpr0_sgpr1
1211    ; GFX7-NEXT: {{  $}}
1212    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1213    ; GFX7-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1048575
1214    ; 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)
1215    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
1216    ;
1217    ; GFX8-LABEL: name: load_constant_s32_from_4_gep_1048575
1218    ; GFX8: liveins: $sgpr0_sgpr1
1219    ; GFX8-NEXT: {{  $}}
1220    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1221    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[COPY]], 1048575, 0 :: (load (s32), addrspace 4)
1222    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1223    ;
1224    ; GFX10-LABEL: name: load_constant_s32_from_4_gep_1048575
1225    ; GFX10: liveins: $sgpr0_sgpr1
1226    ; GFX10-NEXT: {{  $}}
1227    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1228    ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1048575
1229    ; GFX10-NEXT: [[S_LOAD_DWORD_SGPR_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR_IMM [[COPY]], [[S_MOV_B32_]], 0, 0 :: (load (s32), addrspace 4)
1230    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR_IMM]]
1231    ;
1232    ; GFX11-LABEL: name: load_constant_s32_from_4_gep_1048575
1233    ; GFX11: liveins: $sgpr0_sgpr1
1234    ; GFX11-NEXT: {{  $}}
1235    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1236    ; GFX11-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1048575
1237    ; GFX11-NEXT: [[S_LOAD_DWORD_SGPR_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR_IMM [[COPY]], [[S_MOV_B32_]], 0, 0 :: (load (s32), addrspace 4)
1238    ; GFX11-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR_IMM]]
1239    %0:sgpr(p4) = COPY $sgpr0_sgpr1
1240    %1:sgpr(s64) = G_CONSTANT i64 1048575
1241    %2:sgpr(p4) = G_PTR_ADD %0, %1
1242    %3:sgpr(s32) = G_LOAD %2 :: (load (s32), align 4, addrspace 4)
1243    $sgpr0 = COPY %3
1244
1245...
1246
1247---
1248
1249name: load_constant_s32_from_4_gep_1048576
1250legalized:       true
1251regBankSelected: true
1252tracksRegLiveness: true
1253
1254body: |
1255  bb.0:
1256    liveins:  $sgpr0_sgpr1
1257
1258    ; GFX6-LABEL: name: load_constant_s32_from_4_gep_1048576
1259    ; GFX6: liveins: $sgpr0_sgpr1
1260    ; GFX6-NEXT: {{  $}}
1261    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1262    ; GFX6-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1048576
1263    ; 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)
1264    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
1265    ;
1266    ; GFX7-LABEL: name: load_constant_s32_from_4_gep_1048576
1267    ; GFX7: liveins: $sgpr0_sgpr1
1268    ; GFX7-NEXT: {{  $}}
1269    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1270    ; 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)
1271    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM_ci]]
1272    ;
1273    ; GFX8-LABEL: name: load_constant_s32_from_4_gep_1048576
1274    ; GFX8: liveins: $sgpr0_sgpr1
1275    ; GFX8-NEXT: {{  $}}
1276    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1277    ; GFX8-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1048576
1278    ; 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)
1279    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
1280    ;
1281    ; GFX10-LABEL: name: load_constant_s32_from_4_gep_1048576
1282    ; GFX10: liveins: $sgpr0_sgpr1
1283    ; GFX10-NEXT: {{  $}}
1284    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1285    ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1048576
1286    ; GFX10-NEXT: [[S_LOAD_DWORD_SGPR_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR_IMM [[COPY]], [[S_MOV_B32_]], 0, 0 :: (load (s32), addrspace 4)
1287    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR_IMM]]
1288    ;
1289    ; GFX11-LABEL: name: load_constant_s32_from_4_gep_1048576
1290    ; GFX11: liveins: $sgpr0_sgpr1
1291    ; GFX11-NEXT: {{  $}}
1292    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1293    ; GFX11-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1048576
1294    ; GFX11-NEXT: [[S_LOAD_DWORD_SGPR_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR_IMM [[COPY]], [[S_MOV_B32_]], 0, 0 :: (load (s32), addrspace 4)
1295    ; GFX11-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR_IMM]]
1296    %0:sgpr(p4) = COPY $sgpr0_sgpr1
1297    %1:sgpr(s64) = G_CONSTANT i64 1048576
1298    %2:sgpr(p4) = G_PTR_ADD %0, %1
1299    %3:sgpr(s32) = G_LOAD %2 :: (load (s32), align 4, addrspace 4)
1300    $sgpr0 = COPY %3
1301
1302...
1303
1304---
1305
1306name: load_constant_s32_from_4_gep_1073741823
1307legalized:       true
1308regBankSelected: true
1309tracksRegLiveness: true
1310
1311body: |
1312  bb.0:
1313    liveins:  $sgpr0_sgpr1
1314
1315    ; GFX6-LABEL: name: load_constant_s32_from_4_gep_1073741823
1316    ; GFX6: liveins: $sgpr0_sgpr1
1317    ; GFX6-NEXT: {{  $}}
1318    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1319    ; GFX6-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1073741823
1320    ; 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)
1321    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
1322    ;
1323    ; GFX7-LABEL: name: load_constant_s32_from_4_gep_1073741823
1324    ; GFX7: liveins: $sgpr0_sgpr1
1325    ; GFX7-NEXT: {{  $}}
1326    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1327    ; GFX7-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1073741823
1328    ; 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)
1329    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
1330    ;
1331    ; GFX8-LABEL: name: load_constant_s32_from_4_gep_1073741823
1332    ; GFX8: liveins: $sgpr0_sgpr1
1333    ; GFX8-NEXT: {{  $}}
1334    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1335    ; GFX8-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1073741823
1336    ; 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)
1337    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR]]
1338    ;
1339    ; GFX10-LABEL: name: load_constant_s32_from_4_gep_1073741823
1340    ; GFX10: liveins: $sgpr0_sgpr1
1341    ; GFX10-NEXT: {{  $}}
1342    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1343    ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1073741823
1344    ; GFX10-NEXT: [[S_LOAD_DWORD_SGPR_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR_IMM [[COPY]], [[S_MOV_B32_]], 0, 0 :: (load (s32), addrspace 4)
1345    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR_IMM]]
1346    ;
1347    ; GFX11-LABEL: name: load_constant_s32_from_4_gep_1073741823
1348    ; GFX11: liveins: $sgpr0_sgpr1
1349    ; GFX11-NEXT: {{  $}}
1350    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1351    ; GFX11-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1073741823
1352    ; GFX11-NEXT: [[S_LOAD_DWORD_SGPR_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_SGPR_IMM [[COPY]], [[S_MOV_B32_]], 0, 0 :: (load (s32), addrspace 4)
1353    ; GFX11-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_SGPR_IMM]]
1354    %0:sgpr(p4) = COPY $sgpr0_sgpr1
1355    %1:sgpr(s64) = G_CONSTANT i64 1073741823
1356    %2:sgpr(p4) = G_PTR_ADD %0, %1
1357    %3:sgpr(s32) = G_LOAD %2 :: (load (s32), align 4, addrspace 4)
1358    $sgpr0 = COPY %3
1359
1360...
1361
1362---
1363
1364name: load_constant_s32_from_4_gep_negative_1
1365legalized:       true
1366regBankSelected: true
1367tracksRegLiveness: true
1368
1369body: |
1370  bb.0:
1371    liveins:  $sgpr0_sgpr1
1372
1373    ; GFX6-LABEL: name: load_constant_s32_from_4_gep_negative_1
1374    ; GFX6: liveins: $sgpr0_sgpr1
1375    ; GFX6-NEXT: {{  $}}
1376    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1377    ; GFX6-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 -1
1378    ; GFX6-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1379    ; GFX6-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub0
1380    ; GFX6-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1381    ; GFX6-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub1
1382    ; GFX6-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1383    ; GFX6-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def dead $scc, implicit $scc
1384    ; GFX6-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1385    ; GFX6-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE]], 0, 0 :: (load (s32), addrspace 4)
1386    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1387    ;
1388    ; GFX7-LABEL: name: load_constant_s32_from_4_gep_negative_1
1389    ; GFX7: liveins: $sgpr0_sgpr1
1390    ; GFX7-NEXT: {{  $}}
1391    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1392    ; GFX7-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 -1
1393    ; GFX7-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1394    ; GFX7-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub0
1395    ; GFX7-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1396    ; GFX7-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub1
1397    ; GFX7-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1398    ; GFX7-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def dead $scc, implicit $scc
1399    ; GFX7-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1400    ; GFX7-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE]], 0, 0 :: (load (s32), addrspace 4)
1401    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1402    ;
1403    ; GFX8-LABEL: name: load_constant_s32_from_4_gep_negative_1
1404    ; GFX8: liveins: $sgpr0_sgpr1
1405    ; GFX8-NEXT: {{  $}}
1406    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1407    ; GFX8-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 -1
1408    ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1409    ; GFX8-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub0
1410    ; GFX8-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1411    ; GFX8-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub1
1412    ; GFX8-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1413    ; GFX8-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def dead $scc, implicit $scc
1414    ; GFX8-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1415    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE]], 0, 0 :: (load (s32), addrspace 4)
1416    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1417    ;
1418    ; GFX10-LABEL: name: load_constant_s32_from_4_gep_negative_1
1419    ; GFX10: liveins: $sgpr0_sgpr1
1420    ; GFX10-NEXT: {{  $}}
1421    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1422    ; GFX10-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 -1
1423    ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1424    ; GFX10-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub0
1425    ; GFX10-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1426    ; GFX10-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub1
1427    ; GFX10-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1428    ; GFX10-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def dead $scc, implicit $scc
1429    ; GFX10-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1430    ; GFX10-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE]], 0, 0 :: (load (s32), addrspace 4)
1431    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1432    ;
1433    ; GFX11-LABEL: name: load_constant_s32_from_4_gep_negative_1
1434    ; GFX11: liveins: $sgpr0_sgpr1
1435    ; GFX11-NEXT: {{  $}}
1436    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1437    ; GFX11-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 -1
1438    ; GFX11-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1439    ; GFX11-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub0
1440    ; GFX11-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1441    ; GFX11-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B64_]].sub1
1442    ; GFX11-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1443    ; GFX11-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def dead $scc, implicit $scc
1444    ; GFX11-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1445    ; GFX11-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE]], 0, 0 :: (load (s32), addrspace 4)
1446    ; GFX11-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1447    %0:sgpr(p4) = COPY $sgpr0_sgpr1
1448    %1:sgpr(s64) = G_CONSTANT i64 -1
1449    %2:sgpr(p4) = G_PTR_ADD %0, %1
1450    %3:sgpr(s32) = G_LOAD %2 :: (load (s32), align 4, addrspace 4)
1451    $sgpr0 = COPY %3
1452
1453...
1454
1455---
1456
1457name: load_constant_s32_from_4_gep_negative_524288
1458legalized:       true
1459regBankSelected: true
1460tracksRegLiveness: true
1461
1462body: |
1463  bb.0:
1464    liveins:  $sgpr0_sgpr1
1465
1466    ; GFX6-LABEL: name: load_constant_s32_from_4_gep_negative_524288
1467    ; GFX6: liveins: $sgpr0_sgpr1
1468    ; GFX6-NEXT: {{  $}}
1469    ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1470    ; GFX6-NEXT: [[S_MOV_B:%[0-9]+]]:sreg_64 = S_MOV_B64_IMM_PSEUDO -524288
1471    ; GFX6-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1472    ; GFX6-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B]].sub0
1473    ; GFX6-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1474    ; GFX6-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B]].sub1
1475    ; GFX6-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1476    ; GFX6-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def dead $scc, implicit $scc
1477    ; GFX6-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1478    ; GFX6-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE]], 0, 0 :: (load (s32), addrspace 4)
1479    ; GFX6-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1480    ;
1481    ; GFX7-LABEL: name: load_constant_s32_from_4_gep_negative_524288
1482    ; GFX7: liveins: $sgpr0_sgpr1
1483    ; GFX7-NEXT: {{  $}}
1484    ; GFX7-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1485    ; GFX7-NEXT: [[S_MOV_B:%[0-9]+]]:sreg_64 = S_MOV_B64_IMM_PSEUDO -524288
1486    ; GFX7-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1487    ; GFX7-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B]].sub0
1488    ; GFX7-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1489    ; GFX7-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B]].sub1
1490    ; GFX7-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1491    ; GFX7-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def dead $scc, implicit $scc
1492    ; GFX7-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1493    ; GFX7-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE]], 0, 0 :: (load (s32), addrspace 4)
1494    ; GFX7-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1495    ;
1496    ; GFX8-LABEL: name: load_constant_s32_from_4_gep_negative_524288
1497    ; GFX8: liveins: $sgpr0_sgpr1
1498    ; GFX8-NEXT: {{  $}}
1499    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1500    ; GFX8-NEXT: [[S_MOV_B:%[0-9]+]]:sreg_64 = S_MOV_B64_IMM_PSEUDO -524288
1501    ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1502    ; GFX8-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B]].sub0
1503    ; GFX8-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1504    ; GFX8-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B]].sub1
1505    ; GFX8-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1506    ; GFX8-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def dead $scc, implicit $scc
1507    ; GFX8-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1508    ; GFX8-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE]], 0, 0 :: (load (s32), addrspace 4)
1509    ; GFX8-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1510    ;
1511    ; GFX10-LABEL: name: load_constant_s32_from_4_gep_negative_524288
1512    ; GFX10: liveins: $sgpr0_sgpr1
1513    ; GFX10-NEXT: {{  $}}
1514    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1515    ; GFX10-NEXT: [[S_MOV_B:%[0-9]+]]:sreg_64 = S_MOV_B64_IMM_PSEUDO -524288
1516    ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1517    ; GFX10-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B]].sub0
1518    ; GFX10-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1519    ; GFX10-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B]].sub1
1520    ; GFX10-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1521    ; GFX10-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def dead $scc, implicit $scc
1522    ; GFX10-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1523    ; GFX10-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE]], 0, 0 :: (load (s32), addrspace 4)
1524    ; GFX10-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1525    ;
1526    ; GFX11-LABEL: name: load_constant_s32_from_4_gep_negative_524288
1527    ; GFX11: liveins: $sgpr0_sgpr1
1528    ; GFX11-NEXT: {{  $}}
1529    ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1530    ; GFX11-NEXT: [[S_MOV_B:%[0-9]+]]:sreg_64 = S_MOV_B64_IMM_PSEUDO -524288
1531    ; GFX11-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1532    ; GFX11-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B]].sub0
1533    ; GFX11-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1534    ; GFX11-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[S_MOV_B]].sub1
1535    ; GFX11-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY1]], [[COPY2]], implicit-def $scc
1536    ; GFX11-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY3]], [[COPY4]], implicit-def dead $scc, implicit $scc
1537    ; GFX11-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
1538    ; GFX11-NEXT: [[S_LOAD_DWORD_IMM:%[0-9]+]]:sreg_32_xm0_xexec = S_LOAD_DWORD_IMM [[REG_SEQUENCE]], 0, 0 :: (load (s32), addrspace 4)
1539    ; GFX11-NEXT: $sgpr0 = COPY [[S_LOAD_DWORD_IMM]]
1540    %0:sgpr(p4) = COPY $sgpr0_sgpr1
1541    %1:sgpr(s64) = G_CONSTANT i64 -524288
1542    %2:sgpr(p4) = G_PTR_ADD %0, %1
1543    %3:sgpr(s32) = G_LOAD %2 :: (load (s32), align 4, addrspace 4)
1544    $sgpr0 = COPY %3
1545
1546...
1547