[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-load-private.mir
blobdf148638e70055f75c07a7ebd8b4d70cd2325364
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
9 ---
11 name: load_private_s32_from_4
12 legalized:       true
13 regBankSelected: true
14 tracksRegLiveness: true
15 machineFunctionInfo:
16   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
17   stackPtrOffsetReg: $sgpr32
19 body: |
20   bb.0:
21     liveins:  $vgpr0
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
54 ...
56 ---
58 name: load_private_s32_from_2
59 legalized:       true
60 regBankSelected: true
61 tracksRegLiveness: true
62 machineFunctionInfo:
63   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
64   stackPtrOffsetReg: $sgpr32
66 body: |
67   bb.0:
68     liveins:  $vgpr0
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
105 name: load_private_s32_from_1
106 legalized:       true
107 regBankSelected: true
108 tracksRegLiveness: true
109 machineFunctionInfo:
110   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
111   stackPtrOffsetReg: $sgpr32
113 body: |
114   bb.0:
115     liveins:  $vgpr0
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
152 name: load_private_p3_from_4
153 legalized:       true
154 regBankSelected: true
155 tracksRegLiveness: true
156 machineFunctionInfo:
157   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
158   stackPtrOffsetReg: $sgpr32
160 body: |
161   bb.0:
162     liveins:  $vgpr0
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
199 name: load_private_p5_from_4
200 legalized:       true
201 regBankSelected: true
202 tracksRegLiveness: true
203 machineFunctionInfo:
204   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
205   stackPtrOffsetReg: $sgpr32
207 body: |
208   bb.0:
209     liveins:  $vgpr0
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
246 name: load_private_v2s16
247 legalized:       true
248 regBankSelected: true
249 tracksRegLiveness: true
250 machineFunctionInfo:
251   isEntryFunction: false
252   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
253   stackPtrOffsetReg: $sgpr32
255 body: |
256   bb.0:
257     liveins:  $vgpr0
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
292 ################################################################################
293 ### Stress addressing modes
294 ################################################################################
298 name: load_private_s32_from_1_gep_2047
299 legalized:       true
300 regBankSelected: true
301 tracksRegLiveness: true
302 machineFunctionInfo:
303   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
304   stackPtrOffsetReg: $sgpr32
306 body: |
307   bb.0:
308     liveins:  $vgpr0
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
351 name: load_private_s32_from_1_gep_2047_known_bits
352 legalized:       true
353 regBankSelected: true
354 tracksRegLiveness: true
355 machineFunctionInfo:
356   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
357   stackPtrOffsetReg: $sgpr32
359 body: |
360   bb.0:
361     liveins:  $vgpr0
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
402 name: load_private_s32_from_1_gep_2048
403 legalized:       true
404 regBankSelected: true
405 tracksRegLiveness: true
406 machineFunctionInfo:
407   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
408   stackPtrOffsetReg: $sgpr32
410 body: |
411   bb.0:
412     liveins:  $vgpr0
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
455 name: load_private_s32_from_1_gep_m2047
456 legalized:       true
457 regBankSelected: true
458 tracksRegLiveness: true
459 machineFunctionInfo:
460   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
461   stackPtrOffsetReg: $sgpr32
463 body: |
464   bb.0:
465     liveins:  $vgpr0
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
508 name: load_private_s32_from_1_gep_m2048
509 legalized:       true
510 regBankSelected: true
511 tracksRegLiveness: true
512 machineFunctionInfo:
513   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
514   stackPtrOffsetReg: $sgpr32
516 body: |
517   bb.0:
518     liveins:  $vgpr0
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
561 name: load_private_s32_from_1_gep_4095
562 legalized:       true
563 regBankSelected: true
564 tracksRegLiveness: true
565 machineFunctionInfo:
566   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
567   stackPtrOffsetReg: $sgpr32
569 body: |
570   bb.0:
571     liveins:  $vgpr0
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
614 name: load_private_s32_from_1_gep_4096
615 legalized:       true
616 regBankSelected: true
617 tracksRegLiveness: true
618 machineFunctionInfo:
619   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
620   stackPtrOffsetReg: $sgpr32
622 body: |
623   bb.0:
624     liveins:  $vgpr0
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
669 name: load_private_s32_from_1_gep_m4095
670 legalized:       true
671 regBankSelected: true
672 tracksRegLiveness: true
673 machineFunctionInfo:
674   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
675   stackPtrOffsetReg: $sgpr32
677 body: |
678   bb.0:
679     liveins:  $vgpr0
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
722 name: load_private_s32_from_1_gep_m4096
723 legalized:       true
724 regBankSelected: true
725 tracksRegLiveness: true
726 machineFunctionInfo:
727   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
728   stackPtrOffsetReg: $sgpr32
730 body: |
731   bb.0:
732     liveins:  $vgpr0
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
775 name: load_private_s32_from_1_gep_8191
776 legalized:       true
777 regBankSelected: true
778 tracksRegLiveness: true
779 machineFunctionInfo:
780   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
781   stackPtrOffsetReg: $sgpr32
783 body: |
784   bb.0:
785     liveins:  $vgpr0
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
830 name: load_private_s32_from_1_gep_8192
831 legalized:       true
832 regBankSelected: true
833 tracksRegLiveness: true
834 machineFunctionInfo:
835   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
836   stackPtrOffsetReg: $sgpr32
838 body: |
839   bb.0:
840     liveins:  $vgpr0
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
885 name: load_private_s32_from_1_gep_m8191
886 legalized:       true
887 regBankSelected: true
888 tracksRegLiveness: true
889 machineFunctionInfo:
890   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
891   stackPtrOffsetReg: $sgpr32
893 body: |
894   bb.0:
895     liveins:  $vgpr0
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
940 name: load_private_s32_from_1_gep_m8192
941 legalized:       true
942 regBankSelected: true
943 tracksRegLiveness: true
944 machineFunctionInfo:
945   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
946   stackPtrOffsetReg: $sgpr32
948 body: |
949   bb.0:
950     liveins:  $vgpr0
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
995 name: load_private_s32_from_1_gep_24bit_max
996 legalized:       true
997 regBankSelected: true
998 tracksRegLiveness: true
999 machineFunctionInfo:
1000   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1001   stackPtrOffsetReg: $sgpr32
1003 body: |
1004   bb.0:
1005     liveins:  $vgpr0
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
1050 name: load_private_s32_from_1_gep_2x_24bit_max
1051 legalized:       true
1052 regBankSelected: true
1053 tracksRegLiveness: true
1054 machineFunctionInfo:
1055   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1056   stackPtrOffsetReg: $sgpr32
1058 body: |
1059   bb.0:
1060     liveins:  $vgpr0
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
1107 name: load_private_s32_from_1_gep_24bit_min
1108 legalized:       true
1109 regBankSelected: true
1110 tracksRegLiveness: true
1111 machineFunctionInfo:
1112   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1113   stackPtrOffsetReg: $sgpr32
1115 body: |
1116   bb.0:
1117     liveins:  $vgpr0
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
1162 name: load_private_s32_from_1_gep_2x_24bit_min
1163 legalized:       true
1164 regBankSelected: true
1165 tracksRegLiveness: true
1166 machineFunctionInfo:
1167   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1168   stackPtrOffsetReg: $sgpr32
1170 body: |
1171   bb.0:
1172     liveins:  $vgpr0
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
1219 name: load_private_s32_from_4_constant_0
1220 legalized:       true
1221 regBankSelected: true
1222 tracksRegLiveness: true
1223 machineFunctionInfo:
1224   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1225   stackPtrOffsetReg: $sgpr32
1227 body: |
1228   bb.0:
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
1255 name: load_private_s32_from_4_constant_sgpr_16
1256 legalized:       true
1257 regBankSelected: true
1258 tracksRegLiveness: true
1259 machineFunctionInfo:
1260   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1261   stackPtrOffsetReg: $sgpr32
1263 body: |
1264   bb.0:
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
1291 name: load_private_s32_from_1_constant_4095
1292 legalized:       true
1293 regBankSelected: true
1294 tracksRegLiveness: true
1295 machineFunctionInfo:
1296   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1297   stackPtrOffsetReg: $sgpr32
1299 body: |
1300   bb.0:
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
1327 name: load_private_s32_from_1_constant_4096
1328 legalized:       true
1329 regBankSelected: true
1330 tracksRegLiveness: true
1331 machineFunctionInfo:
1332   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1333   stackPtrOffsetReg: $sgpr32
1335 body: |
1336   bb.0:
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
1365 name: load_private_s32_from_fi
1366 legalized:       true
1367 regBankSelected: true
1368 tracksRegLiveness: true
1369 machineFunctionInfo:
1370   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1371   stackPtrOffsetReg: $sgpr32
1372 stack:
1373   - { id: 0, size: 4, alignment: 4 }
1375 body: |
1376   bb.0:
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
1400 name: load_private_s32_from_1_fi_offset_4095
1401 legalized:       true
1402 regBankSelected: true
1403 tracksRegLiveness: true
1404 machineFunctionInfo:
1405   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1406   stackPtrOffsetReg: $sgpr32
1407 stack:
1408   - { id: 0, size: 4096, alignment: 4 }
1410 body: |
1411   bb.0:
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
1436 # Have to hack around the copy of the constant to VGPR
1438 name: load_private_s32_from_1_fi_offset_sgpr_4095
1439 legalized:       true
1440 regBankSelected: true
1441 tracksRegLiveness: true
1442 machineFunctionInfo:
1443   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1444   stackPtrOffsetReg: $sgpr32
1445 stack:
1446   - { id: 0, size: 4096, alignment: 4 }
1448 body: |
1449   bb.0:
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
1477 name: load_private_s32_from_1_fi_offset_4096
1478 legalized:       true
1479 regBankSelected: true
1480 tracksRegLiveness: true
1481 machineFunctionInfo:
1482   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1483   stackPtrOffsetReg: $sgpr32
1484 stack:
1485   - { id: 0, size: 8192, alignment: 4 }
1487 body: |
1488   bb.0:
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
1520 # Should not fold offset if this is a null dereference.
1523 name: load_private_s32_from_neg1
1524 legalized:       true
1525 regBankSelected: true
1526 tracksRegLiveness: true
1527 machineFunctionInfo:
1528   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1529   stackPtrOffsetReg: $sgpr32
1531 body: |
1532   bb.0:
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