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