1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -march=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX6 %s
3# RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s
4
5---
6
7name: load_private_s32_from_4
8legalized:       true
9regBankSelected: true
10tracksRegLiveness: true
11machineFunctionInfo:
12  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
13  stackPtrOffsetReg: $sgpr32
14
15body: |
16  bb.0:
17    liveins:  $vgpr0
18
19    ; GFX6-LABEL: name: load_private_s32_from_4
20    ; GFX6: liveins: $vgpr0
21    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
22    ; GFX6: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
23    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
24    ; GFX9-LABEL: name: load_private_s32_from_4
25    ; GFX9: liveins: $vgpr0
26    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
27    ; GFX9: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
28    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
29    %0:vgpr(p5) = COPY $vgpr0
30    %1:vgpr(s32) = G_LOAD %0 :: (load 4, align 4, addrspace 5)
31    $vgpr0 = COPY %1
32
33...
34
35---
36
37name: load_private_s32_from_2
38legalized:       true
39regBankSelected: true
40tracksRegLiveness: true
41machineFunctionInfo:
42  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
43  stackPtrOffsetReg: $sgpr32
44
45body: |
46  bb.0:
47    liveins:  $vgpr0
48
49    ; GFX6-LABEL: name: load_private_s32_from_2
50    ; GFX6: liveins: $vgpr0
51    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
52    ; GFX6: [[BUFFER_LOAD_USHORT_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_USHORT_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 2, addrspace 5)
53    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_USHORT_OFFEN]]
54    ; GFX9-LABEL: name: load_private_s32_from_2
55    ; GFX9: liveins: $vgpr0
56    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
57    ; GFX9: [[BUFFER_LOAD_USHORT_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_USHORT_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 2, addrspace 5)
58    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_USHORT_OFFEN]]
59    %0:vgpr(p5) = COPY $vgpr0
60    %1:vgpr(s32) = G_LOAD %0 :: (load 2, align 2, addrspace 5)
61    $vgpr0 = COPY %1
62
63...
64
65---
66
67name: load_private_s32_from_1
68legalized:       true
69regBankSelected: true
70tracksRegLiveness: true
71machineFunctionInfo:
72  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
73  stackPtrOffsetReg: $sgpr32
74
75body: |
76  bb.0:
77    liveins:  $vgpr0
78
79    ; GFX6-LABEL: name: load_private_s32_from_1
80    ; GFX6: liveins: $vgpr0
81    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
82    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
83    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
84    ; GFX9-LABEL: name: load_private_s32_from_1
85    ; GFX9: liveins: $vgpr0
86    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
87    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
88    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
89    %0:vgpr(p5) = COPY $vgpr0
90    %1:vgpr(s32) = G_LOAD %0 :: (load 1, align 1, addrspace 5)
91    $vgpr0 = COPY %1
92
93...
94
95---
96
97name: load_private_p3_from_4
98legalized:       true
99regBankSelected: true
100tracksRegLiveness: true
101machineFunctionInfo:
102  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
103  stackPtrOffsetReg: $sgpr32
104
105body: |
106  bb.0:
107    liveins:  $vgpr0
108
109    ; GFX6-LABEL: name: load_private_p3_from_4
110    ; GFX6: liveins: $vgpr0
111    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
112    ; GFX6: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
113    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
114    ; GFX9-LABEL: name: load_private_p3_from_4
115    ; GFX9: liveins: $vgpr0
116    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
117    ; GFX9: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
118    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
119    %0:vgpr(p5) = COPY $vgpr0
120    %1:vgpr(p3) = G_LOAD %0 :: (load 4, align 4, addrspace 5)
121    $vgpr0 = COPY %1
122
123...
124
125---
126
127name: load_private_p5_from_4
128legalized:       true
129regBankSelected: true
130tracksRegLiveness: true
131machineFunctionInfo:
132  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
133  stackPtrOffsetReg: $sgpr32
134
135body: |
136  bb.0:
137    liveins:  $vgpr0
138
139    ; GFX6-LABEL: name: load_private_p5_from_4
140    ; GFX6: liveins: $vgpr0
141    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
142    ; GFX6: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
143    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
144    ; GFX9-LABEL: name: load_private_p5_from_4
145    ; GFX9: liveins: $vgpr0
146    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
147    ; GFX9: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
148    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
149    %0:vgpr(p5) = COPY $vgpr0
150    %1:vgpr(p5) = G_LOAD %0 :: (load 4, align 4, addrspace 5)
151    $vgpr0 = COPY %1
152
153...
154
155---
156
157name: load_private_v2s16
158legalized:       true
159regBankSelected: true
160tracksRegLiveness: true
161machineFunctionInfo:
162  isEntryFunction: false
163  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
164  stackPtrOffsetReg: $sgpr32
165
166body: |
167  bb.0:
168    liveins:  $vgpr0
169
170    ; GFX6-LABEL: name: load_private_v2s16
171    ; GFX6: liveins: $vgpr0
172    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
173    ; GFX6: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
174    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
175    ; GFX9-LABEL: name: load_private_v2s16
176    ; GFX9: liveins: $vgpr0
177    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
178    ; GFX9: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
179    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
180    %0:vgpr(p5) = COPY $vgpr0
181    %1:vgpr(<2 x s16>) = G_LOAD %0 :: (load 4, align 4, addrspace 5)
182    $vgpr0 = COPY %1
183
184...
185
186################################################################################
187### Stress addressing modes
188################################################################################
189
190---
191
192name: load_private_s32_from_1_gep_2047
193legalized:       true
194regBankSelected: true
195tracksRegLiveness: true
196machineFunctionInfo:
197  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
198  stackPtrOffsetReg: $sgpr32
199
200body: |
201  bb.0:
202    liveins:  $vgpr0
203
204    ; GFX6-LABEL: name: load_private_s32_from_1_gep_2047
205    ; GFX6: liveins: $vgpr0
206    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
207    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec
208    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
209    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
210    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
211    ; GFX9-LABEL: name: load_private_s32_from_1_gep_2047
212    ; GFX9: liveins: $vgpr0
213    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
214    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 2047, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
215    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
216    %0:vgpr(p5) = COPY $vgpr0
217    %1:vgpr(s32) = G_CONSTANT i32 2047
218    %2:vgpr(p5) = G_PTR_ADD %0, %1
219    %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5)
220    $vgpr0 = COPY %3
221
222...
223
224---
225
226name: load_private_s32_from_1_gep_2047_known_bits
227legalized:       true
228regBankSelected: true
229tracksRegLiveness: true
230machineFunctionInfo:
231  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
232  stackPtrOffsetReg: $sgpr32
233
234body: |
235  bb.0:
236    liveins:  $vgpr0
237
238    ; GFX6-LABEL: name: load_private_s32_from_1_gep_2047_known_bits
239    ; GFX6: liveins: $vgpr0
240    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
241    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
242    ; GFX6: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
243    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_AND_B32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 2047, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
244    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
245    ; GFX9-LABEL: name: load_private_s32_from_1_gep_2047_known_bits
246    ; GFX9: liveins: $vgpr0
247    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
248    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
249    ; GFX9: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
250    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_AND_B32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 2047, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
251    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
252    %0:vgpr(s32) = COPY $vgpr0
253    %1:vgpr(s32) = G_CONSTANT i32 2147483647
254    %2:vgpr(s32) = G_AND %0, %1
255    %3:vgpr(p5) = G_INTTOPTR %2
256    %4:vgpr(s32) = G_CONSTANT i32 2047
257    %5:vgpr(p5) = G_PTR_ADD %3, %4
258    %6:vgpr(s32) = G_LOAD %5 :: (load 1, align 1, addrspace 5)
259    $vgpr0 = COPY %6
260
261...
262
263---
264
265name: load_private_s32_from_1_gep_2048
266legalized:       true
267regBankSelected: true
268tracksRegLiveness: true
269machineFunctionInfo:
270  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
271  stackPtrOffsetReg: $sgpr32
272
273body: |
274  bb.0:
275    liveins:  $vgpr0
276
277    ; GFX6-LABEL: name: load_private_s32_from_1_gep_2048
278    ; GFX6: liveins: $vgpr0
279    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
280    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2048, implicit $exec
281    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
282    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
283    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
284    ; GFX9-LABEL: name: load_private_s32_from_1_gep_2048
285    ; GFX9: liveins: $vgpr0
286    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
287    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 2048, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
288    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
289    %0:vgpr(p5) = COPY $vgpr0
290    %1:vgpr(s32) = G_CONSTANT i32 2048
291    %2:vgpr(p5) = G_PTR_ADD %0, %1
292    %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5)
293    $vgpr0 = COPY %3
294
295...
296
297---
298
299name: load_private_s32_from_1_gep_m2047
300legalized:       true
301regBankSelected: true
302tracksRegLiveness: true
303machineFunctionInfo:
304  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
305  stackPtrOffsetReg: $sgpr32
306
307body: |
308  bb.0:
309    liveins:  $vgpr0
310
311    ; GFX6-LABEL: name: load_private_s32_from_1_gep_m2047
312    ; GFX6: liveins: $vgpr0
313    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
314    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2047, implicit $exec
315    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
316    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
317    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
318    ; GFX9-LABEL: name: load_private_s32_from_1_gep_m2047
319    ; GFX9: liveins: $vgpr0
320    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
321    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2047, implicit $exec
322    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
323    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
324    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
325    %0:vgpr(p5) = COPY $vgpr0
326    %1:vgpr(s32) = G_CONSTANT i32 -2047
327    %2:vgpr(p5) = G_PTR_ADD %0, %1
328    %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5)
329    $vgpr0 = COPY %3
330
331...
332
333---
334
335name: load_private_s32_from_1_gep_m2048
336legalized:       true
337regBankSelected: true
338tracksRegLiveness: true
339machineFunctionInfo:
340  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
341  stackPtrOffsetReg: $sgpr32
342
343body: |
344  bb.0:
345    liveins:  $vgpr0
346
347    ; GFX6-LABEL: name: load_private_s32_from_1_gep_m2048
348    ; GFX6: liveins: $vgpr0
349    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
350    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2048, implicit $exec
351    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
352    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
353    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
354    ; GFX9-LABEL: name: load_private_s32_from_1_gep_m2048
355    ; GFX9: liveins: $vgpr0
356    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
357    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2048, implicit $exec
358    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
359    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
360    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
361    %0:vgpr(p5) = COPY $vgpr0
362    %1:vgpr(s32) = G_CONSTANT i32 -2048
363    %2:vgpr(p5) = G_PTR_ADD %0, %1
364    %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5)
365    $vgpr0 = COPY %3
366
367...
368
369---
370
371name: load_private_s32_from_1_gep_4095
372legalized:       true
373regBankSelected: true
374tracksRegLiveness: true
375machineFunctionInfo:
376  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
377  stackPtrOffsetReg: $sgpr32
378
379body: |
380  bb.0:
381    liveins:  $vgpr0
382
383    ; GFX6-LABEL: name: load_private_s32_from_1_gep_4095
384    ; GFX6: liveins: $vgpr0
385    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
386    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec
387    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
388    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
389    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
390    ; GFX9-LABEL: name: load_private_s32_from_1_gep_4095
391    ; GFX9: liveins: $vgpr0
392    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
393    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
394    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
395    %0:vgpr(p5) = COPY $vgpr0
396    %1:vgpr(s32) = G_CONSTANT i32 4095
397    %2:vgpr(p5) = G_PTR_ADD %0, %1
398    %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5)
399    $vgpr0 = COPY %3
400
401...
402
403---
404
405name: load_private_s32_from_1_gep_4096
406legalized:       true
407regBankSelected: true
408tracksRegLiveness: true
409machineFunctionInfo:
410  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
411  stackPtrOffsetReg: $sgpr32
412
413body: |
414  bb.0:
415    liveins:  $vgpr0
416
417    ; GFX6-LABEL: name: load_private_s32_from_1_gep_4096
418    ; GFX6: liveins: $vgpr0
419    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
420    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
421    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
422    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
423    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
424    ; GFX9-LABEL: name: load_private_s32_from_1_gep_4096
425    ; GFX9: liveins: $vgpr0
426    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
427    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
428    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
429    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
430    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
431    %0:vgpr(p5) = COPY $vgpr0
432    %1:vgpr(s32) = G_CONSTANT i32 4096
433    %2:vgpr(p5) = G_PTR_ADD %0, %1
434    %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5)
435    $vgpr0 = COPY %3
436
437...
438
439---
440
441name: load_private_s32_from_1_gep_m4095
442legalized:       true
443regBankSelected: true
444tracksRegLiveness: true
445machineFunctionInfo:
446  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
447  stackPtrOffsetReg: $sgpr32
448
449body: |
450  bb.0:
451    liveins:  $vgpr0
452
453    ; GFX6-LABEL: name: load_private_s32_from_1_gep_m4095
454    ; GFX6: liveins: $vgpr0
455    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
456    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4095, implicit $exec
457    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
458    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
459    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
460    ; GFX9-LABEL: name: load_private_s32_from_1_gep_m4095
461    ; GFX9: liveins: $vgpr0
462    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
463    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4095, implicit $exec
464    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
465    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
466    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
467    %0:vgpr(p5) = COPY $vgpr0
468    %1:vgpr(s32) = G_CONSTANT i32 -4095
469    %2:vgpr(p5) = G_PTR_ADD %0, %1
470    %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5)
471    $vgpr0 = COPY %3
472
473...
474
475---
476
477name: load_private_s32_from_1_gep_m4096
478legalized:       true
479regBankSelected: true
480tracksRegLiveness: true
481machineFunctionInfo:
482  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
483  stackPtrOffsetReg: $sgpr32
484
485body: |
486  bb.0:
487    liveins:  $vgpr0
488
489    ; GFX6-LABEL: name: load_private_s32_from_1_gep_m4096
490    ; GFX6: liveins: $vgpr0
491    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
492    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4096, implicit $exec
493    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
494    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
495    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
496    ; GFX9-LABEL: name: load_private_s32_from_1_gep_m4096
497    ; GFX9: liveins: $vgpr0
498    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
499    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4096, implicit $exec
500    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
501    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
502    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
503    %0:vgpr(p5) = COPY $vgpr0
504    %1:vgpr(s32) = G_CONSTANT i32 -4096
505    %2:vgpr(p5) = G_PTR_ADD %0, %1
506    %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5)
507    $vgpr0 = COPY %3
508
509...
510
511---
512
513name: load_private_s32_from_1_gep_8191
514legalized:       true
515regBankSelected: true
516tracksRegLiveness: true
517machineFunctionInfo:
518  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
519  stackPtrOffsetReg: $sgpr32
520
521body: |
522  bb.0:
523    liveins:  $vgpr0
524
525    ; GFX6-LABEL: name: load_private_s32_from_1_gep_8191
526    ; GFX6: liveins: $vgpr0
527    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
528    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8191, implicit $exec
529    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
530    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
531    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
532    ; GFX9-LABEL: name: load_private_s32_from_1_gep_8191
533    ; GFX9: liveins: $vgpr0
534    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
535    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8191, implicit $exec
536    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
537    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
538    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
539    %0:vgpr(p5) = COPY $vgpr0
540    %1:vgpr(s32) = G_CONSTANT i32 8191
541    %2:vgpr(p5) = G_PTR_ADD %0, %1
542    %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5)
543    $vgpr0 = COPY %3
544
545...
546
547---
548
549name: load_private_s32_from_1_gep_8192
550legalized:       true
551regBankSelected: true
552tracksRegLiveness: true
553machineFunctionInfo:
554  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
555  stackPtrOffsetReg: $sgpr32
556
557body: |
558  bb.0:
559    liveins:  $vgpr0
560
561    ; GFX6-LABEL: name: load_private_s32_from_1_gep_8192
562    ; GFX6: liveins: $vgpr0
563    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
564    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8192, implicit $exec
565    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
566    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
567    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
568    ; GFX9-LABEL: name: load_private_s32_from_1_gep_8192
569    ; GFX9: liveins: $vgpr0
570    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
571    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8192, implicit $exec
572    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
573    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
574    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
575    %0:vgpr(p5) = COPY $vgpr0
576    %1:vgpr(s32) = G_CONSTANT i32 8192
577    %2:vgpr(p5) = G_PTR_ADD %0, %1
578    %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5)
579    $vgpr0 = COPY %3
580
581...
582
583---
584
585name: load_private_s32_from_1_gep_m8191
586legalized:       true
587regBankSelected: true
588tracksRegLiveness: true
589machineFunctionInfo:
590  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
591  stackPtrOffsetReg: $sgpr32
592
593body: |
594  bb.0:
595    liveins:  $vgpr0
596
597    ; GFX6-LABEL: name: load_private_s32_from_1_gep_m8191
598    ; GFX6: liveins: $vgpr0
599    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
600    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8191, implicit $exec
601    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
602    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
603    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
604    ; GFX9-LABEL: name: load_private_s32_from_1_gep_m8191
605    ; GFX9: liveins: $vgpr0
606    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
607    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8191, implicit $exec
608    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
609    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
610    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
611    %0:vgpr(p5) = COPY $vgpr0
612    %1:vgpr(s32) = G_CONSTANT i32 -8191
613    %2:vgpr(p5) = G_PTR_ADD %0, %1
614    %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5)
615    $vgpr0 = COPY %3
616
617...
618
619---
620
621name: load_private_s32_from_1_gep_m8192
622legalized:       true
623regBankSelected: true
624tracksRegLiveness: true
625machineFunctionInfo:
626  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
627  stackPtrOffsetReg: $sgpr32
628
629body: |
630  bb.0:
631    liveins:  $vgpr0
632
633    ; GFX6-LABEL: name: load_private_s32_from_1_gep_m8192
634    ; GFX6: liveins: $vgpr0
635    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
636    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8192, implicit $exec
637    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
638    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
639    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
640    ; GFX9-LABEL: name: load_private_s32_from_1_gep_m8192
641    ; GFX9: liveins: $vgpr0
642    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
643    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8192, implicit $exec
644    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
645    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
646    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
647    %0:vgpr(p5) = COPY $vgpr0
648    %1:vgpr(s32) = G_CONSTANT i32 -8192
649    %2:vgpr(p5) = G_PTR_ADD %0, %1
650    %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5)
651    $vgpr0 = COPY %3
652
653...
654
655---
656
657name: load_private_s32_from_4_constant_0
658legalized:       true
659regBankSelected: true
660tracksRegLiveness: true
661machineFunctionInfo:
662  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
663  stackPtrOffsetReg: $sgpr32
664
665body: |
666  bb.0:
667
668    ; GFX6-LABEL: name: load_private_s32_from_4_constant_0
669    ; GFX6: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
670    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]]
671    ; GFX9-LABEL: name: load_private_s32_from_4_constant_0
672    ; GFX9: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
673    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]]
674    %0:vgpr(p5) = G_CONSTANT i32 0
675    %1:vgpr(s32) = G_LOAD %0 :: (load 4, align 4, addrspace 5)
676    $vgpr0 = COPY %1
677
678...
679
680---
681
682name: load_private_s32_from_4_constant_sgpr_16
683legalized:       true
684regBankSelected: true
685tracksRegLiveness: true
686machineFunctionInfo:
687  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
688  stackPtrOffsetReg: $sgpr32
689
690body: |
691  bb.0:
692
693    ; GFX6-LABEL: name: load_private_s32_from_4_constant_sgpr_16
694    ; GFX6: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 16, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
695    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]]
696    ; GFX9-LABEL: name: load_private_s32_from_4_constant_sgpr_16
697    ; GFX9: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 16, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
698    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]]
699    %0:sgpr(p5) = G_CONSTANT i32 16
700    %1:vgpr(s32) = G_LOAD %0 :: (load 4, align 4, addrspace 5)
701    $vgpr0 = COPY %1
702
703...
704
705---
706
707name: load_private_s32_from_1_constant_4095
708legalized:       true
709regBankSelected: true
710tracksRegLiveness: true
711machineFunctionInfo:
712  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
713  stackPtrOffsetReg: $sgpr32
714
715body: |
716  bb.0:
717
718    ; GFX6-LABEL: name: load_private_s32_from_1_constant_4095
719    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
720    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFSET]]
721    ; GFX9-LABEL: name: load_private_s32_from_1_constant_4095
722    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
723    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFSET]]
724    %0:vgpr(p5) = G_CONSTANT i32 4095
725    %1:vgpr(s32) = G_LOAD %0 :: (load 1, align 1, addrspace 5)
726    $vgpr0 = COPY %1
727
728...
729
730---
731
732name: load_private_s32_from_1_constant_4096
733legalized:       true
734regBankSelected: true
735tracksRegLiveness: true
736machineFunctionInfo:
737  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
738  stackPtrOffsetReg: $sgpr32
739
740body: |
741  bb.0:
742
743    ; GFX6-LABEL: name: load_private_s32_from_1_constant_4096
744    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
745    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
746    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
747    ; GFX9-LABEL: name: load_private_s32_from_1_constant_4096
748    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
749    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
750    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
751    %0:vgpr(p5) = G_CONSTANT i32 4096
752    %1:vgpr(s32) = G_LOAD %0 :: (load 1, align 1, addrspace 5)
753    $vgpr0 = COPY %1
754
755...
756
757---
758
759name: load_private_s32_from_fi
760legalized:       true
761regBankSelected: true
762tracksRegLiveness: true
763machineFunctionInfo:
764  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
765  stackPtrOffsetReg: $sgpr32
766stack:
767  - { id: 0, size: 4, alignment: 4 }
768
769body: |
770  bb.0:
771
772    ; GFX6-LABEL: name: load_private_s32_from_fi
773    ; GFX6: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
774    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
775    ; GFX9-LABEL: name: load_private_s32_from_fi
776    ; GFX9: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
777    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
778    %0:vgpr(p5) = G_FRAME_INDEX %stack.0
779    %1:vgpr(s32) = G_LOAD %0 :: (load 4, align 4, addrspace 5)
780    $vgpr0 = COPY %1
781
782...
783
784---
785
786name: load_private_s32_from_1_fi_offset_4095
787legalized:       true
788regBankSelected: true
789tracksRegLiveness: true
790machineFunctionInfo:
791  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
792  stackPtrOffsetReg: $sgpr32
793stack:
794  - { id: 0, size: 4096, alignment: 4 }
795
796body: |
797  bb.0:
798
799    ; GFX6-LABEL: name: load_private_s32_from_1_fi_offset_4095
800    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 4095, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
801    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
802    ; GFX9-LABEL: name: load_private_s32_from_1_fi_offset_4095
803    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 4095, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
804    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
805    %0:vgpr(p5) = G_FRAME_INDEX %stack.0
806    %1:vgpr(s32) = G_CONSTANT i32 4095
807    %2:vgpr(p5) = G_PTR_ADD %0, %1
808    %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5)
809    $vgpr0 = COPY %3
810
811...
812
813---
814
815name: load_private_s32_from_1_fi_offset_4096
816legalized:       true
817regBankSelected: true
818tracksRegLiveness: true
819machineFunctionInfo:
820  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
821  stackPtrOffsetReg: $sgpr32
822stack:
823  - { id: 0, size: 8192, alignment: 4 }
824
825body: |
826  bb.0:
827
828    ; GFX6-LABEL: name: load_private_s32_from_1_fi_offset_4096
829    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
830    ; GFX6: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
831    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, implicit $exec
832    ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
833    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
834    ; GFX9-LABEL: name: load_private_s32_from_1_fi_offset_4096
835    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
836    ; GFX9: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
837    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, implicit $exec
838    ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, 0, 0, implicit $exec :: (load 1, addrspace 5)
839    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
840    %0:vgpr(p5) = G_FRAME_INDEX %stack.0
841    %1:vgpr(s32) = G_CONSTANT i32 4096
842    %2:vgpr(p5) = G_PTR_ADD %0, %1
843    %3:vgpr(s32) = G_LOAD %2 :: (load 1, align 1, addrspace 5)
844    $vgpr0 = COPY %3
845
846...
847
848# Should not fold offset if this is a null dereference.
849---
850
851name: load_private_s32_from_neg1
852legalized:       true
853regBankSelected: true
854tracksRegLiveness: true
855machineFunctionInfo:
856  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
857  stackPtrOffsetReg: $sgpr32
858
859body: |
860  bb.0:
861
862    ; GFX6-LABEL: name: load_private_s32_from_neg1
863    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
864    ; GFX6: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, -1, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
865    ; GFX6: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
866    ; GFX9-LABEL: name: load_private_s32_from_neg1
867    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
868    ; GFX9: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, -1, 0, 0, 0, 0, 0, implicit $exec :: (load 4, addrspace 5)
869    ; GFX9: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
870    %0:vgpr(p5) = G_CONSTANT i32 -1
871    %1:vgpr(s32) = G_LOAD %0 :: (load 4, align 4, addrspace 5)
872    $vgpr0 = COPY %1
873
874...
875