[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-load-private.mir
blob4bf6b6a623d82696961c53f860fcefa073690714
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX6 %s
3 # RUN: llc -O0 -march=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX6 %s
4 # RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s
5 # RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s
6 # RUN: llc -march=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX11 %s
8 ---
10 name: load_private_s32_from_4
11 legalized:       true
12 regBankSelected: true
13 tracksRegLiveness: true
14 machineFunctionInfo:
15   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
16   stackPtrOffsetReg: $sgpr32
18 body: |
19   bb.0:
20     liveins:  $vgpr0
22     ; GFX6-LABEL: name: load_private_s32_from_4
23     ; GFX6: liveins: $vgpr0
24     ; GFX6-NEXT: {{  $}}
25     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
26     ; 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)
27     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
28     ; GFX9-LABEL: name: load_private_s32_from_4
29     ; GFX9: liveins: $vgpr0
30     ; GFX9-NEXT: {{  $}}
31     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
32     ; 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)
33     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
34     ; GFX11-LABEL: name: load_private_s32_from_4
35     ; GFX11: liveins: $vgpr0
36     ; GFX11-NEXT: {{  $}}
37     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
38     ; GFX11-NEXT: [[SCRATCH_LOAD_DWORD:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 5)
39     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]]
40     %0:vgpr(p5) = COPY $vgpr0
41     %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 5)
42     $vgpr0 = COPY %1
44 ...
46 ---
48 name: load_private_s32_from_2
49 legalized:       true
50 regBankSelected: true
51 tracksRegLiveness: true
52 machineFunctionInfo:
53   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
54   stackPtrOffsetReg: $sgpr32
56 body: |
57   bb.0:
58     liveins:  $vgpr0
60     ; GFX6-LABEL: name: load_private_s32_from_2
61     ; GFX6: liveins: $vgpr0
62     ; GFX6-NEXT: {{  $}}
63     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
64     ; 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)
65     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_USHORT_OFFEN]]
66     ; GFX9-LABEL: name: load_private_s32_from_2
67     ; GFX9: liveins: $vgpr0
68     ; GFX9-NEXT: {{  $}}
69     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
70     ; 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)
71     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_USHORT_OFFEN]]
72     ; GFX11-LABEL: name: load_private_s32_from_2
73     ; GFX11: liveins: $vgpr0
74     ; GFX11-NEXT: {{  $}}
75     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
76     ; GFX11-NEXT: [[SCRATCH_LOAD_USHORT:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_USHORT [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s16), addrspace 5)
77     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_USHORT]]
78     %0:vgpr(p5) = COPY $vgpr0
79     %1:vgpr(s32) = G_LOAD %0 :: (load (s16), align 2, addrspace 5)
80     $vgpr0 = COPY %1
82 ...
84 ---
86 name: load_private_s32_from_1
87 legalized:       true
88 regBankSelected: true
89 tracksRegLiveness: true
90 machineFunctionInfo:
91   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
92   stackPtrOffsetReg: $sgpr32
94 body: |
95   bb.0:
96     liveins:  $vgpr0
98     ; GFX6-LABEL: name: load_private_s32_from_1
99     ; GFX6: liveins: $vgpr0
100     ; GFX6-NEXT: {{  $}}
101     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
102     ; 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)
103     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
104     ; GFX9-LABEL: name: load_private_s32_from_1
105     ; GFX9: liveins: $vgpr0
106     ; GFX9-NEXT: {{  $}}
107     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
108     ; 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)
109     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
110     ; GFX11-LABEL: name: load_private_s32_from_1
111     ; GFX11: liveins: $vgpr0
112     ; GFX11-NEXT: {{  $}}
113     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
114     ; GFX11-NEXT: [[SCRATCH_LOAD_UBYTE:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_UBYTE [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (s8), addrspace 5)
115     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
116     %0:vgpr(p5) = COPY $vgpr0
117     %1:vgpr(s32) = G_LOAD %0 :: (load (s8), align 1, addrspace 5)
118     $vgpr0 = COPY %1
124 name: load_private_p3_from_4
125 legalized:       true
126 regBankSelected: true
127 tracksRegLiveness: true
128 machineFunctionInfo:
129   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
130   stackPtrOffsetReg: $sgpr32
132 body: |
133   bb.0:
134     liveins:  $vgpr0
136     ; GFX6-LABEL: name: load_private_p3_from_4
137     ; GFX6: liveins: $vgpr0
138     ; GFX6-NEXT: {{  $}}
139     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
140     ; 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)
141     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
142     ; GFX9-LABEL: name: load_private_p3_from_4
143     ; GFX9: liveins: $vgpr0
144     ; GFX9-NEXT: {{  $}}
145     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
146     ; 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)
147     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
148     ; GFX11-LABEL: name: load_private_p3_from_4
149     ; GFX11: liveins: $vgpr0
150     ; GFX11-NEXT: {{  $}}
151     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
152     ; GFX11-NEXT: [[SCRATCH_LOAD_DWORD:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (p3), addrspace 5)
153     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]]
154     %0:vgpr(p5) = COPY $vgpr0
155     %1:vgpr(p3) = G_LOAD %0 :: (load (p3), align 4, addrspace 5)
156     $vgpr0 = COPY %1
162 name: load_private_p5_from_4
163 legalized:       true
164 regBankSelected: true
165 tracksRegLiveness: true
166 machineFunctionInfo:
167   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
168   stackPtrOffsetReg: $sgpr32
170 body: |
171   bb.0:
172     liveins:  $vgpr0
174     ; GFX6-LABEL: name: load_private_p5_from_4
175     ; GFX6: liveins: $vgpr0
176     ; GFX6-NEXT: {{  $}}
177     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
178     ; 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)
179     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
180     ; GFX9-LABEL: name: load_private_p5_from_4
181     ; GFX9: liveins: $vgpr0
182     ; GFX9-NEXT: {{  $}}
183     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
184     ; 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)
185     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
186     ; GFX11-LABEL: name: load_private_p5_from_4
187     ; GFX11: liveins: $vgpr0
188     ; GFX11-NEXT: {{  $}}
189     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
190     ; GFX11-NEXT: [[SCRATCH_LOAD_DWORD:%[0-9]+]]:vgpr_32 = SCRATCH_LOAD_DWORD [[COPY]], 0, 0, implicit $exec, implicit $flat_scr :: (load (p5), addrspace 5)
191     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]]
192     %0:vgpr(p5) = COPY $vgpr0
193     %1:vgpr(p5) = G_LOAD %0 :: (load (p5), align 4, addrspace 5)
194     $vgpr0 = COPY %1
200 name: load_private_v2s16
201 legalized:       true
202 regBankSelected: true
203 tracksRegLiveness: true
204 machineFunctionInfo:
205   isEntryFunction: false
206   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
207   stackPtrOffsetReg: $sgpr32
209 body: |
210   bb.0:
211     liveins:  $vgpr0
213     ; GFX6-LABEL: name: load_private_v2s16
214     ; GFX6: liveins: $vgpr0
215     ; GFX6-NEXT: {{  $}}
216     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
217     ; 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)
218     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
219     ; GFX9-LABEL: name: load_private_v2s16
220     ; GFX9: liveins: $vgpr0
221     ; GFX9-NEXT: {{  $}}
222     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
223     ; 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)
224     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
225     ; GFX11-LABEL: name: load_private_v2s16
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 (<2 x s16>), addrspace 5)
230     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]]
231     %0:vgpr(p5) = COPY $vgpr0
232     %1:vgpr(<2 x s16>) = G_LOAD %0 :: (load (<2 x s16>), align 4, addrspace 5)
233     $vgpr0 = COPY %1
237 ################################################################################
238 ### Stress addressing modes
239 ################################################################################
243 name: load_private_s32_from_1_gep_2047
244 legalized:       true
245 regBankSelected: true
246 tracksRegLiveness: true
247 machineFunctionInfo:
248   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
249   stackPtrOffsetReg: $sgpr32
251 body: |
252   bb.0:
253     liveins:  $vgpr0
255     ; GFX6-LABEL: name: load_private_s32_from_1_gep_2047
256     ; GFX6: liveins: $vgpr0
257     ; GFX6-NEXT: {{  $}}
258     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
259     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec
260     ; 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
261     ; 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)
262     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
263     ; GFX9-LABEL: name: load_private_s32_from_1_gep_2047
264     ; GFX9: liveins: $vgpr0
265     ; GFX9-NEXT: {{  $}}
266     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
267     ; 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)
268     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
269     ; GFX11-LABEL: name: load_private_s32_from_1_gep_2047
270     ; GFX11: liveins: $vgpr0
271     ; GFX11-NEXT: {{  $}}
272     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
273     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec
274     ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
275     ; 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)
276     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
277     %0:vgpr(p5) = COPY $vgpr0
278     %1:vgpr(s32) = G_CONSTANT i32 2047
279     %2:vgpr(p5) = G_PTR_ADD %0, %1
280     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
281     $vgpr0 = COPY %3
287 name: load_private_s32_from_1_gep_2047_known_bits
288 legalized:       true
289 regBankSelected: true
290 tracksRegLiveness: true
291 machineFunctionInfo:
292   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
293   stackPtrOffsetReg: $sgpr32
295 body: |
296   bb.0:
297     liveins:  $vgpr0
299     ; GFX6-LABEL: name: load_private_s32_from_1_gep_2047_known_bits
300     ; GFX6: liveins: $vgpr0
301     ; GFX6-NEXT: {{  $}}
302     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
303     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
304     ; GFX6-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
305     ; GFX6-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)
306     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
307     ; GFX9-LABEL: name: load_private_s32_from_1_gep_2047_known_bits
308     ; GFX9: liveins: $vgpr0
309     ; GFX9-NEXT: {{  $}}
310     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
311     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
312     ; GFX9-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
313     ; 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)
314     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
315     ; GFX11-LABEL: name: load_private_s32_from_1_gep_2047_known_bits
316     ; GFX11: liveins: $vgpr0
317     ; GFX11-NEXT: {{  $}}
318     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
319     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
320     ; GFX11-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
321     ; 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)
322     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
323     %0:vgpr(s32) = COPY $vgpr0
324     %1:vgpr(s32) = G_CONSTANT i32 2147483647
325     %2:vgpr(s32) = G_AND %0, %1
326     %3:vgpr(p5) = G_INTTOPTR %2
327     %4:vgpr(s32) = G_CONSTANT i32 2047
328     %5:vgpr(p5) = G_PTR_ADD %3, %4
329     %6:vgpr(s32) = G_LOAD %5 :: (load (s8), align 1, addrspace 5)
330     $vgpr0 = COPY %6
336 name: load_private_s32_from_1_gep_2048
337 legalized:       true
338 regBankSelected: true
339 tracksRegLiveness: true
340 machineFunctionInfo:
341   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
342   stackPtrOffsetReg: $sgpr32
344 body: |
345   bb.0:
346     liveins:  $vgpr0
348     ; GFX6-LABEL: name: load_private_s32_from_1_gep_2048
349     ; GFX6: liveins: $vgpr0
350     ; GFX6-NEXT: {{  $}}
351     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
352     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2048, implicit $exec
353     ; 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
354     ; 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)
355     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
356     ; GFX9-LABEL: name: load_private_s32_from_1_gep_2048
357     ; GFX9: liveins: $vgpr0
358     ; GFX9-NEXT: {{  $}}
359     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
360     ; 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)
361     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
362     ; GFX11-LABEL: name: load_private_s32_from_1_gep_2048
363     ; GFX11: liveins: $vgpr0
364     ; GFX11-NEXT: {{  $}}
365     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
366     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2048, implicit $exec
367     ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
368     ; 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)
369     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
370     %0:vgpr(p5) = COPY $vgpr0
371     %1:vgpr(s32) = G_CONSTANT i32 2048
372     %2:vgpr(p5) = G_PTR_ADD %0, %1
373     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
374     $vgpr0 = COPY %3
380 name: load_private_s32_from_1_gep_m2047
381 legalized:       true
382 regBankSelected: true
383 tracksRegLiveness: true
384 machineFunctionInfo:
385   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
386   stackPtrOffsetReg: $sgpr32
388 body: |
389   bb.0:
390     liveins:  $vgpr0
392     ; GFX6-LABEL: name: load_private_s32_from_1_gep_m2047
393     ; GFX6: liveins: $vgpr0
394     ; GFX6-NEXT: {{  $}}
395     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
396     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2047, implicit $exec
397     ; 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
398     ; 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)
399     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
400     ; GFX9-LABEL: name: load_private_s32_from_1_gep_m2047
401     ; GFX9: liveins: $vgpr0
402     ; GFX9-NEXT: {{  $}}
403     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
404     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2047, implicit $exec
405     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
406     ; 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)
407     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
408     ; GFX11-LABEL: name: load_private_s32_from_1_gep_m2047
409     ; GFX11: liveins: $vgpr0
410     ; GFX11-NEXT: {{  $}}
411     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
412     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2047, implicit $exec
413     ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
414     ; 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)
415     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
416     %0:vgpr(p5) = COPY $vgpr0
417     %1:vgpr(s32) = G_CONSTANT i32 -2047
418     %2:vgpr(p5) = G_PTR_ADD %0, %1
419     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
420     $vgpr0 = COPY %3
426 name: load_private_s32_from_1_gep_m2048
427 legalized:       true
428 regBankSelected: true
429 tracksRegLiveness: true
430 machineFunctionInfo:
431   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
432   stackPtrOffsetReg: $sgpr32
434 body: |
435   bb.0:
436     liveins:  $vgpr0
438     ; GFX6-LABEL: name: load_private_s32_from_1_gep_m2048
439     ; GFX6: liveins: $vgpr0
440     ; GFX6-NEXT: {{  $}}
441     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
442     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2048, implicit $exec
443     ; 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
444     ; 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)
445     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
446     ; GFX9-LABEL: name: load_private_s32_from_1_gep_m2048
447     ; GFX9: liveins: $vgpr0
448     ; GFX9-NEXT: {{  $}}
449     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
450     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2048, implicit $exec
451     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
452     ; 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)
453     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
454     ; GFX11-LABEL: name: load_private_s32_from_1_gep_m2048
455     ; GFX11: liveins: $vgpr0
456     ; GFX11-NEXT: {{  $}}
457     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
458     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2048, implicit $exec
459     ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
460     ; 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)
461     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
462     %0:vgpr(p5) = COPY $vgpr0
463     %1:vgpr(s32) = G_CONSTANT i32 -2048
464     %2:vgpr(p5) = G_PTR_ADD %0, %1
465     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
466     $vgpr0 = COPY %3
472 name: load_private_s32_from_1_gep_4095
473 legalized:       true
474 regBankSelected: true
475 tracksRegLiveness: true
476 machineFunctionInfo:
477   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
478   stackPtrOffsetReg: $sgpr32
480 body: |
481   bb.0:
482     liveins:  $vgpr0
484     ; GFX6-LABEL: name: load_private_s32_from_1_gep_4095
485     ; GFX6: liveins: $vgpr0
486     ; GFX6-NEXT: {{  $}}
487     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
488     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec
489     ; 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
490     ; 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)
491     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
492     ; GFX9-LABEL: name: load_private_s32_from_1_gep_4095
493     ; GFX9: liveins: $vgpr0
494     ; GFX9-NEXT: {{  $}}
495     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
496     ; 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)
497     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
498     ; GFX11-LABEL: name: load_private_s32_from_1_gep_4095
499     ; GFX11: liveins: $vgpr0
500     ; GFX11-NEXT: {{  $}}
501     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
502     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec
503     ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
504     ; 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)
505     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
506     %0:vgpr(p5) = COPY $vgpr0
507     %1:vgpr(s32) = G_CONSTANT i32 4095
508     %2:vgpr(p5) = G_PTR_ADD %0, %1
509     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
510     $vgpr0 = COPY %3
516 name: load_private_s32_from_1_gep_4096
517 legalized:       true
518 regBankSelected: true
519 tracksRegLiveness: true
520 machineFunctionInfo:
521   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
522   stackPtrOffsetReg: $sgpr32
524 body: |
525   bb.0:
526     liveins:  $vgpr0
528     ; GFX6-LABEL: name: load_private_s32_from_1_gep_4096
529     ; GFX6: liveins: $vgpr0
530     ; GFX6-NEXT: {{  $}}
531     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
532     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
533     ; 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
534     ; 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)
535     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
536     ; GFX9-LABEL: name: load_private_s32_from_1_gep_4096
537     ; GFX9: liveins: $vgpr0
538     ; GFX9-NEXT: {{  $}}
539     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
540     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
541     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
542     ; 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)
543     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
544     ; GFX11-LABEL: name: load_private_s32_from_1_gep_4096
545     ; GFX11: liveins: $vgpr0
546     ; GFX11-NEXT: {{  $}}
547     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
548     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
549     ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
550     ; 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)
551     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
552     %0:vgpr(p5) = COPY $vgpr0
553     %1:vgpr(s32) = G_CONSTANT i32 4096
554     %2:vgpr(p5) = G_PTR_ADD %0, %1
555     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
556     $vgpr0 = COPY %3
562 name: load_private_s32_from_1_gep_m4095
563 legalized:       true
564 regBankSelected: true
565 tracksRegLiveness: true
566 machineFunctionInfo:
567   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
568   stackPtrOffsetReg: $sgpr32
570 body: |
571   bb.0:
572     liveins:  $vgpr0
574     ; GFX6-LABEL: name: load_private_s32_from_1_gep_m4095
575     ; GFX6: liveins: $vgpr0
576     ; GFX6-NEXT: {{  $}}
577     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
578     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4095, implicit $exec
579     ; 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
580     ; 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)
581     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
582     ; GFX9-LABEL: name: load_private_s32_from_1_gep_m4095
583     ; GFX9: liveins: $vgpr0
584     ; GFX9-NEXT: {{  $}}
585     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
586     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4095, implicit $exec
587     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
588     ; 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)
589     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
590     ; GFX11-LABEL: name: load_private_s32_from_1_gep_m4095
591     ; GFX11: liveins: $vgpr0
592     ; GFX11-NEXT: {{  $}}
593     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
594     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4095, implicit $exec
595     ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
596     ; 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)
597     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
598     %0:vgpr(p5) = COPY $vgpr0
599     %1:vgpr(s32) = G_CONSTANT i32 -4095
600     %2:vgpr(p5) = G_PTR_ADD %0, %1
601     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
602     $vgpr0 = COPY %3
608 name: load_private_s32_from_1_gep_m4096
609 legalized:       true
610 regBankSelected: true
611 tracksRegLiveness: true
612 machineFunctionInfo:
613   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
614   stackPtrOffsetReg: $sgpr32
616 body: |
617   bb.0:
618     liveins:  $vgpr0
620     ; GFX6-LABEL: name: load_private_s32_from_1_gep_m4096
621     ; GFX6: liveins: $vgpr0
622     ; GFX6-NEXT: {{  $}}
623     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
624     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4096, implicit $exec
625     ; 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
626     ; 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)
627     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
628     ; GFX9-LABEL: name: load_private_s32_from_1_gep_m4096
629     ; GFX9: liveins: $vgpr0
630     ; GFX9-NEXT: {{  $}}
631     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
632     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4096, implicit $exec
633     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
634     ; 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)
635     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
636     ; GFX11-LABEL: name: load_private_s32_from_1_gep_m4096
637     ; GFX11: liveins: $vgpr0
638     ; GFX11-NEXT: {{  $}}
639     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
640     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4096, implicit $exec
641     ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
642     ; 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)
643     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
644     %0:vgpr(p5) = COPY $vgpr0
645     %1:vgpr(s32) = G_CONSTANT i32 -4096
646     %2:vgpr(p5) = G_PTR_ADD %0, %1
647     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
648     $vgpr0 = COPY %3
654 name: load_private_s32_from_1_gep_8191
655 legalized:       true
656 regBankSelected: true
657 tracksRegLiveness: true
658 machineFunctionInfo:
659   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
660   stackPtrOffsetReg: $sgpr32
662 body: |
663   bb.0:
664     liveins:  $vgpr0
666     ; GFX6-LABEL: name: load_private_s32_from_1_gep_8191
667     ; GFX6: liveins: $vgpr0
668     ; GFX6-NEXT: {{  $}}
669     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
670     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8191, implicit $exec
671     ; 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
672     ; 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)
673     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
674     ; GFX9-LABEL: name: load_private_s32_from_1_gep_8191
675     ; GFX9: liveins: $vgpr0
676     ; GFX9-NEXT: {{  $}}
677     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
678     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8191, implicit $exec
679     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
680     ; 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)
681     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
682     ; GFX11-LABEL: name: load_private_s32_from_1_gep_8191
683     ; GFX11: liveins: $vgpr0
684     ; GFX11-NEXT: {{  $}}
685     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
686     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8191, implicit $exec
687     ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
688     ; 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)
689     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
690     %0:vgpr(p5) = COPY $vgpr0
691     %1:vgpr(s32) = G_CONSTANT i32 8191
692     %2:vgpr(p5) = G_PTR_ADD %0, %1
693     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
694     $vgpr0 = COPY %3
700 name: load_private_s32_from_1_gep_8192
701 legalized:       true
702 regBankSelected: true
703 tracksRegLiveness: true
704 machineFunctionInfo:
705   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
706   stackPtrOffsetReg: $sgpr32
708 body: |
709   bb.0:
710     liveins:  $vgpr0
712     ; GFX6-LABEL: name: load_private_s32_from_1_gep_8192
713     ; GFX6: liveins: $vgpr0
714     ; GFX6-NEXT: {{  $}}
715     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
716     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8192, implicit $exec
717     ; 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
718     ; 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)
719     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
720     ; GFX9-LABEL: name: load_private_s32_from_1_gep_8192
721     ; GFX9: liveins: $vgpr0
722     ; GFX9-NEXT: {{  $}}
723     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
724     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8192, implicit $exec
725     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
726     ; 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)
727     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
728     ; GFX11-LABEL: name: load_private_s32_from_1_gep_8192
729     ; GFX11: liveins: $vgpr0
730     ; GFX11-NEXT: {{  $}}
731     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
732     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8192, implicit $exec
733     ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
734     ; 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)
735     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
736     %0:vgpr(p5) = COPY $vgpr0
737     %1:vgpr(s32) = G_CONSTANT i32 8192
738     %2:vgpr(p5) = G_PTR_ADD %0, %1
739     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
740     $vgpr0 = COPY %3
746 name: load_private_s32_from_1_gep_m8191
747 legalized:       true
748 regBankSelected: true
749 tracksRegLiveness: true
750 machineFunctionInfo:
751   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
752   stackPtrOffsetReg: $sgpr32
754 body: |
755   bb.0:
756     liveins:  $vgpr0
758     ; GFX6-LABEL: name: load_private_s32_from_1_gep_m8191
759     ; GFX6: liveins: $vgpr0
760     ; GFX6-NEXT: {{  $}}
761     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
762     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8191, implicit $exec
763     ; 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
764     ; 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)
765     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
766     ; GFX9-LABEL: name: load_private_s32_from_1_gep_m8191
767     ; GFX9: liveins: $vgpr0
768     ; GFX9-NEXT: {{  $}}
769     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
770     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8191, implicit $exec
771     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
772     ; 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)
773     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
774     ; GFX11-LABEL: name: load_private_s32_from_1_gep_m8191
775     ; GFX11: liveins: $vgpr0
776     ; GFX11-NEXT: {{  $}}
777     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
778     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8191, implicit $exec
779     ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
780     ; 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)
781     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
782     %0:vgpr(p5) = COPY $vgpr0
783     %1:vgpr(s32) = G_CONSTANT i32 -8191
784     %2:vgpr(p5) = G_PTR_ADD %0, %1
785     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
786     $vgpr0 = COPY %3
792 name: load_private_s32_from_1_gep_m8192
793 legalized:       true
794 regBankSelected: true
795 tracksRegLiveness: true
796 machineFunctionInfo:
797   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
798   stackPtrOffsetReg: $sgpr32
800 body: |
801   bb.0:
802     liveins:  $vgpr0
804     ; GFX6-LABEL: name: load_private_s32_from_1_gep_m8192
805     ; GFX6: liveins: $vgpr0
806     ; GFX6-NEXT: {{  $}}
807     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
808     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8192, implicit $exec
809     ; 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
810     ; 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)
811     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
812     ; GFX9-LABEL: name: load_private_s32_from_1_gep_m8192
813     ; GFX9: liveins: $vgpr0
814     ; GFX9-NEXT: {{  $}}
815     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
816     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8192, implicit $exec
817     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
818     ; 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)
819     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
820     ; GFX11-LABEL: name: load_private_s32_from_1_gep_m8192
821     ; GFX11: liveins: $vgpr0
822     ; GFX11-NEXT: {{  $}}
823     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
824     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8192, implicit $exec
825     ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
826     ; 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)
827     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
828     %0:vgpr(p5) = COPY $vgpr0
829     %1:vgpr(s32) = G_CONSTANT i32 -8192
830     %2:vgpr(p5) = G_PTR_ADD %0, %1
831     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
832     $vgpr0 = COPY %3
838 name: load_private_s32_from_4_constant_0
839 legalized:       true
840 regBankSelected: true
841 tracksRegLiveness: true
842 machineFunctionInfo:
843   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
844   stackPtrOffsetReg: $sgpr32
846 body: |
847   bb.0:
849     ; GFX6-LABEL: name: load_private_s32_from_4_constant_0
850     ; 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)
851     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]]
852     ; GFX9-LABEL: name: load_private_s32_from_4_constant_0
853     ; 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)
854     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]]
855     ; GFX11-LABEL: name: load_private_s32_from_4_constant_0
856     ; GFX11: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
857     ; 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)
858     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]]
859     %0:vgpr(p5) = G_CONSTANT i32 0
860     %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 5)
861     $vgpr0 = COPY %1
867 name: load_private_s32_from_4_constant_sgpr_16
868 legalized:       true
869 regBankSelected: true
870 tracksRegLiveness: true
871 machineFunctionInfo:
872   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
873   stackPtrOffsetReg: $sgpr32
875 body: |
876   bb.0:
878     ; GFX6-LABEL: name: load_private_s32_from_4_constant_sgpr_16
879     ; 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)
880     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]]
881     ; GFX9-LABEL: name: load_private_s32_from_4_constant_sgpr_16
882     ; 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)
883     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]]
884     ; GFX11-LABEL: name: load_private_s32_from_4_constant_sgpr_16
885     ; GFX11: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xexec_hi = S_MOV_B32 16
886     ; 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)
887     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD_SADDR]]
888     %0:sgpr(p5) = G_CONSTANT i32 16
889     %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 5)
890     $vgpr0 = COPY %1
896 name: load_private_s32_from_1_constant_4095
897 legalized:       true
898 regBankSelected: true
899 tracksRegLiveness: true
900 machineFunctionInfo:
901   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
902   stackPtrOffsetReg: $sgpr32
904 body: |
905   bb.0:
907     ; GFX6-LABEL: name: load_private_s32_from_1_constant_4095
908     ; 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)
909     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFSET]]
910     ; GFX9-LABEL: name: load_private_s32_from_1_constant_4095
911     ; 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)
912     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFSET]]
913     ; GFX11-LABEL: name: load_private_s32_from_1_constant_4095
914     ; GFX11: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec
915     ; 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)
916     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
917     %0:vgpr(p5) = G_CONSTANT i32 4095
918     %1:vgpr(s32) = G_LOAD %0 :: (load (s8), align 1, addrspace 5)
919     $vgpr0 = COPY %1
925 name: load_private_s32_from_1_constant_4096
926 legalized:       true
927 regBankSelected: true
928 tracksRegLiveness: true
929 machineFunctionInfo:
930   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
931   stackPtrOffsetReg: $sgpr32
933 body: |
934   bb.0:
936     ; GFX6-LABEL: name: load_private_s32_from_1_constant_4096
937     ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
938     ; 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)
939     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
940     ; GFX9-LABEL: name: load_private_s32_from_1_constant_4096
941     ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
942     ; 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)
943     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
944     ; GFX11-LABEL: name: load_private_s32_from_1_constant_4096
945     ; GFX11: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
946     ; 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)
947     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE]]
948     %0:vgpr(p5) = G_CONSTANT i32 4096
949     %1:vgpr(s32) = G_LOAD %0 :: (load (s8), align 1, addrspace 5)
950     $vgpr0 = COPY %1
956 name: load_private_s32_from_fi
957 legalized:       true
958 regBankSelected: true
959 tracksRegLiveness: true
960 machineFunctionInfo:
961   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
962   stackPtrOffsetReg: $sgpr32
963 stack:
964   - { id: 0, size: 4, alignment: 4 }
966 body: |
967   bb.0:
969     ; GFX6-LABEL: name: load_private_s32_from_fi
970     ; 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)
971     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
972     ; GFX9-LABEL: name: load_private_s32_from_fi
973     ; 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)
974     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
975     ; GFX11-LABEL: name: load_private_s32_from_fi
976     ; 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)
977     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD_SADDR]]
978     %0:vgpr(p5) = G_FRAME_INDEX %stack.0
979     %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 5)
980     $vgpr0 = COPY %1
985 name: load_private_s32_from_1_fi_offset_4095
986 legalized:       true
987 regBankSelected: true
988 tracksRegLiveness: true
989 machineFunctionInfo:
990   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
991   stackPtrOffsetReg: $sgpr32
992 stack:
993   - { id: 0, size: 4096, alignment: 4 }
995 body: |
996   bb.0:
998     ; GFX6-LABEL: name: load_private_s32_from_1_fi_offset_4095
999     ; 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)
1000     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
1001     ; GFX9-LABEL: name: load_private_s32_from_1_fi_offset_4095
1002     ; 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)
1003     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
1004     ; GFX11-LABEL: name: load_private_s32_from_1_fi_offset_4095
1005     ; 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)
1006     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE_SADDR]]
1007     %0:vgpr(p5) = G_FRAME_INDEX %stack.0
1008     %1:vgpr(s32) = G_CONSTANT i32 4095
1009     %2:vgpr(p5) = G_PTR_ADD %0, %1
1010     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
1011     $vgpr0 = COPY %3
1015 # Have to hack around the copy of the constant to VGPR
1017 name: load_private_s32_from_1_fi_offset_sgpr_4095
1018 legalized:       true
1019 regBankSelected: true
1020 tracksRegLiveness: true
1021 machineFunctionInfo:
1022   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1023   stackPtrOffsetReg: $sgpr32
1024 stack:
1025   - { id: 0, size: 4096, alignment: 4 }
1027 body: |
1028   bb.0:
1030     ; GFX6-LABEL: name: load_private_s32_from_1_fi_offset_sgpr_4095
1031     ; 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)
1032     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
1033     ; GFX9-LABEL: name: load_private_s32_from_1_fi_offset_sgpr_4095
1034     ; 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)
1035     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
1036     ; GFX11-LABEL: name: load_private_s32_from_1_fi_offset_sgpr_4095
1037     ; 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)
1038     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE_SADDR]]
1039     %0:vgpr(p5) = G_FRAME_INDEX %stack.0
1040     %1:sgpr(s32) = G_CONSTANT i32 4095
1041     %2:vgpr(s32) = COPY %1
1042     %3:vgpr(p5) = G_PTR_ADD %0, %2
1043     %4:vgpr(s32) = G_LOAD %3 :: (load (s8), align 1, addrspace 5)
1044     $vgpr0 = COPY %4
1050 name: load_private_s32_from_1_fi_offset_4096
1051 legalized:       true
1052 regBankSelected: true
1053 tracksRegLiveness: true
1054 machineFunctionInfo:
1055   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1056   stackPtrOffsetReg: $sgpr32
1057 stack:
1058   - { id: 0, size: 8192, alignment: 4 }
1060 body: |
1061   bb.0:
1063     ; GFX6-LABEL: name: load_private_s32_from_1_fi_offset_4096
1064     ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
1065     ; GFX6-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
1066     ; 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
1067     ; 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)
1068     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
1069     ; GFX9-LABEL: name: load_private_s32_from_1_fi_offset_4096
1070     ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
1071     ; GFX9-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
1072     ; 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
1073     ; 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)
1074     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
1075     ; GFX11-LABEL: name: load_private_s32_from_1_fi_offset_4096
1076     ; GFX11: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
1077     ; 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)
1078     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_UBYTE_SVS]]
1079     %0:vgpr(p5) = G_FRAME_INDEX %stack.0
1080     %1:vgpr(s32) = G_CONSTANT i32 4096
1081     %2:vgpr(p5) = G_PTR_ADD %0, %1
1082     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
1083     $vgpr0 = COPY %3
1087 # Should not fold offset if this is a null dereference.
1090 name: load_private_s32_from_neg1
1091 legalized:       true
1092 regBankSelected: true
1093 tracksRegLiveness: true
1094 machineFunctionInfo:
1095   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
1096   stackPtrOffsetReg: $sgpr32
1098 body: |
1099   bb.0:
1101     ; GFX6-LABEL: name: load_private_s32_from_neg1
1102     ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
1103     ; 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)
1104     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
1105     ; GFX9-LABEL: name: load_private_s32_from_neg1
1106     ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
1107     ; 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)
1108     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
1109     ; GFX11-LABEL: name: load_private_s32_from_neg1
1110     ; GFX11: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
1111     ; 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)
1112     ; GFX11-NEXT: $vgpr0 = COPY [[SCRATCH_LOAD_DWORD]]
1113     %0:vgpr(p5) = G_CONSTANT i32 -1
1114     %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 5)
1115     $vgpr0 = COPY %1