[AMDGPU] Make v8i16/v8f16 legal
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-load-private.mir
blob67e3a5ff66d911b98ccf7b1dc1e40023ddce8f4e
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
7 ---
9 name: load_private_s32_from_4
10 legalized:       true
11 regBankSelected: true
12 tracksRegLiveness: true
13 machineFunctionInfo:
14   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
15   stackPtrOffsetReg: $sgpr32
17 body: |
18   bb.0:
19     liveins:  $vgpr0
21     ; GFX6-LABEL: name: load_private_s32_from_4
22     ; GFX6: liveins: $vgpr0
23     ; GFX6-NEXT: {{  $}}
24     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
25     ; GFX6-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s32), addrspace 5)
26     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
27     ; GFX9-LABEL: name: load_private_s32_from_4
28     ; GFX9: liveins: $vgpr0
29     ; GFX9-NEXT: {{  $}}
30     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
31     ; GFX9-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s32), addrspace 5)
32     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
33     %0:vgpr(p5) = COPY $vgpr0
34     %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 5)
35     $vgpr0 = COPY %1
37 ...
39 ---
41 name: load_private_s32_from_2
42 legalized:       true
43 regBankSelected: true
44 tracksRegLiveness: true
45 machineFunctionInfo:
46   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
47   stackPtrOffsetReg: $sgpr32
49 body: |
50   bb.0:
51     liveins:  $vgpr0
53     ; GFX6-LABEL: name: load_private_s32_from_2
54     ; GFX6: liveins: $vgpr0
55     ; GFX6-NEXT: {{  $}}
56     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
57     ; GFX6-NEXT: [[BUFFER_LOAD_USHORT_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_USHORT_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s16), addrspace 5)
58     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_USHORT_OFFEN]]
59     ; GFX9-LABEL: name: load_private_s32_from_2
60     ; GFX9: liveins: $vgpr0
61     ; GFX9-NEXT: {{  $}}
62     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
63     ; GFX9-NEXT: [[BUFFER_LOAD_USHORT_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_USHORT_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s16), addrspace 5)
64     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_USHORT_OFFEN]]
65     %0:vgpr(p5) = COPY $vgpr0
66     %1:vgpr(s32) = G_LOAD %0 :: (load (s16), align 2, addrspace 5)
67     $vgpr0 = COPY %1
69 ...
71 ---
73 name: load_private_s32_from_1
74 legalized:       true
75 regBankSelected: true
76 tracksRegLiveness: true
77 machineFunctionInfo:
78   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
79   stackPtrOffsetReg: $sgpr32
81 body: |
82   bb.0:
83     liveins:  $vgpr0
85     ; GFX6-LABEL: name: load_private_s32_from_1
86     ; GFX6: liveins: $vgpr0
87     ; GFX6-NEXT: {{  $}}
88     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
89     ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
90     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
91     ; GFX9-LABEL: name: load_private_s32_from_1
92     ; GFX9: liveins: $vgpr0
93     ; GFX9-NEXT: {{  $}}
94     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
95     ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
96     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
97     %0:vgpr(p5) = COPY $vgpr0
98     %1:vgpr(s32) = G_LOAD %0 :: (load (s8), align 1, addrspace 5)
99     $vgpr0 = COPY %1
105 name: load_private_p3_from_4
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_p3_from_4
118     ; GFX6: liveins: $vgpr0
119     ; GFX6-NEXT: {{  $}}
120     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
121     ; GFX6-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (p3), addrspace 5)
122     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
123     ; GFX9-LABEL: name: load_private_p3_from_4
124     ; GFX9: liveins: $vgpr0
125     ; GFX9-NEXT: {{  $}}
126     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
127     ; GFX9-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (p3), addrspace 5)
128     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
129     %0:vgpr(p5) = COPY $vgpr0
130     %1:vgpr(p3) = G_LOAD %0 :: (load (p3), align 4, addrspace 5)
131     $vgpr0 = COPY %1
137 name: load_private_p5_from_4
138 legalized:       true
139 regBankSelected: true
140 tracksRegLiveness: true
141 machineFunctionInfo:
142   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
143   stackPtrOffsetReg: $sgpr32
145 body: |
146   bb.0:
147     liveins:  $vgpr0
149     ; GFX6-LABEL: name: load_private_p5_from_4
150     ; GFX6: liveins: $vgpr0
151     ; GFX6-NEXT: {{  $}}
152     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
153     ; GFX6-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (p5), addrspace 5)
154     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
155     ; GFX9-LABEL: name: load_private_p5_from_4
156     ; GFX9: liveins: $vgpr0
157     ; GFX9-NEXT: {{  $}}
158     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
159     ; GFX9-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (p5), addrspace 5)
160     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
161     %0:vgpr(p5) = COPY $vgpr0
162     %1:vgpr(p5) = G_LOAD %0 :: (load (p5), align 4, addrspace 5)
163     $vgpr0 = COPY %1
169 name: load_private_v2s16
170 legalized:       true
171 regBankSelected: true
172 tracksRegLiveness: true
173 machineFunctionInfo:
174   isEntryFunction: false
175   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
176   stackPtrOffsetReg: $sgpr32
178 body: |
179   bb.0:
180     liveins:  $vgpr0
182     ; GFX6-LABEL: name: load_private_v2s16
183     ; GFX6: liveins: $vgpr0
184     ; GFX6-NEXT: {{  $}}
185     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
186     ; GFX6-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (<2 x s16>), addrspace 5)
187     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
188     ; GFX9-LABEL: name: load_private_v2s16
189     ; GFX9: liveins: $vgpr0
190     ; GFX9-NEXT: {{  $}}
191     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
192     ; GFX9-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (<2 x s16>), addrspace 5)
193     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
194     %0:vgpr(p5) = COPY $vgpr0
195     %1:vgpr(<2 x s16>) = G_LOAD %0 :: (load (<2 x s16>), align 4, addrspace 5)
196     $vgpr0 = COPY %1
200 ################################################################################
201 ### Stress addressing modes
202 ################################################################################
206 name: load_private_s32_from_1_gep_2047
207 legalized:       true
208 regBankSelected: true
209 tracksRegLiveness: true
210 machineFunctionInfo:
211   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
212   stackPtrOffsetReg: $sgpr32
214 body: |
215   bb.0:
216     liveins:  $vgpr0
218     ; GFX6-LABEL: name: load_private_s32_from_1_gep_2047
219     ; GFX6: liveins: $vgpr0
220     ; GFX6-NEXT: {{  $}}
221     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
222     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec
223     ; GFX6-NEXT: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
224     ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
225     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
226     ; GFX9-LABEL: name: load_private_s32_from_1_gep_2047
227     ; GFX9: liveins: $vgpr0
228     ; GFX9-NEXT: {{  $}}
229     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
230     ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 2047, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
231     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
232     %0:vgpr(p5) = COPY $vgpr0
233     %1:vgpr(s32) = G_CONSTANT i32 2047
234     %2:vgpr(p5) = G_PTR_ADD %0, %1
235     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
236     $vgpr0 = COPY %3
242 name: load_private_s32_from_1_gep_2047_known_bits
243 legalized:       true
244 regBankSelected: true
245 tracksRegLiveness: true
246 machineFunctionInfo:
247   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
248   stackPtrOffsetReg: $sgpr32
250 body: |
251   bb.0:
252     liveins:  $vgpr0
254     ; GFX6-LABEL: name: load_private_s32_from_1_gep_2047_known_bits
255     ; GFX6: liveins: $vgpr0
256     ; GFX6-NEXT: {{  $}}
257     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
258     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
259     ; GFX6-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
260     ; 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, 0, implicit $exec :: (load (s8), addrspace 5)
261     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
262     ; GFX9-LABEL: name: load_private_s32_from_1_gep_2047_known_bits
263     ; GFX9: liveins: $vgpr0
264     ; GFX9-NEXT: {{  $}}
265     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
266     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
267     ; GFX9-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
268     ; 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, 0, implicit $exec :: (load (s8), addrspace 5)
269     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
270     %0:vgpr(s32) = COPY $vgpr0
271     %1:vgpr(s32) = G_CONSTANT i32 2147483647
272     %2:vgpr(s32) = G_AND %0, %1
273     %3:vgpr(p5) = G_INTTOPTR %2
274     %4:vgpr(s32) = G_CONSTANT i32 2047
275     %5:vgpr(p5) = G_PTR_ADD %3, %4
276     %6:vgpr(s32) = G_LOAD %5 :: (load (s8), align 1, addrspace 5)
277     $vgpr0 = COPY %6
283 name: load_private_s32_from_1_gep_2048
284 legalized:       true
285 regBankSelected: true
286 tracksRegLiveness: true
287 machineFunctionInfo:
288   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
289   stackPtrOffsetReg: $sgpr32
291 body: |
292   bb.0:
293     liveins:  $vgpr0
295     ; GFX6-LABEL: name: load_private_s32_from_1_gep_2048
296     ; GFX6: liveins: $vgpr0
297     ; GFX6-NEXT: {{  $}}
298     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
299     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2048, implicit $exec
300     ; GFX6-NEXT: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
301     ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
302     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
303     ; GFX9-LABEL: name: load_private_s32_from_1_gep_2048
304     ; GFX9: liveins: $vgpr0
305     ; GFX9-NEXT: {{  $}}
306     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
307     ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 2048, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
308     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
309     %0:vgpr(p5) = COPY $vgpr0
310     %1:vgpr(s32) = G_CONSTANT i32 2048
311     %2:vgpr(p5) = G_PTR_ADD %0, %1
312     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
313     $vgpr0 = COPY %3
319 name: load_private_s32_from_1_gep_m2047
320 legalized:       true
321 regBankSelected: true
322 tracksRegLiveness: true
323 machineFunctionInfo:
324   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
325   stackPtrOffsetReg: $sgpr32
327 body: |
328   bb.0:
329     liveins:  $vgpr0
331     ; GFX6-LABEL: name: load_private_s32_from_1_gep_m2047
332     ; GFX6: liveins: $vgpr0
333     ; GFX6-NEXT: {{  $}}
334     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
335     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2047, implicit $exec
336     ; GFX6-NEXT: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
337     ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
338     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
339     ; GFX9-LABEL: name: load_private_s32_from_1_gep_m2047
340     ; GFX9: liveins: $vgpr0
341     ; GFX9-NEXT: {{  $}}
342     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
343     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2047, implicit $exec
344     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
345     ; 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, 0, implicit $exec :: (load (s8), addrspace 5)
346     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
347     %0:vgpr(p5) = COPY $vgpr0
348     %1:vgpr(s32) = G_CONSTANT i32 -2047
349     %2:vgpr(p5) = G_PTR_ADD %0, %1
350     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
351     $vgpr0 = COPY %3
357 name: load_private_s32_from_1_gep_m2048
358 legalized:       true
359 regBankSelected: true
360 tracksRegLiveness: true
361 machineFunctionInfo:
362   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
363   stackPtrOffsetReg: $sgpr32
365 body: |
366   bb.0:
367     liveins:  $vgpr0
369     ; GFX6-LABEL: name: load_private_s32_from_1_gep_m2048
370     ; GFX6: liveins: $vgpr0
371     ; GFX6-NEXT: {{  $}}
372     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
373     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2048, implicit $exec
374     ; GFX6-NEXT: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
375     ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
376     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
377     ; GFX9-LABEL: name: load_private_s32_from_1_gep_m2048
378     ; GFX9: liveins: $vgpr0
379     ; GFX9-NEXT: {{  $}}
380     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
381     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -2048, implicit $exec
382     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
383     ; 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, 0, implicit $exec :: (load (s8), addrspace 5)
384     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
385     %0:vgpr(p5) = COPY $vgpr0
386     %1:vgpr(s32) = G_CONSTANT i32 -2048
387     %2:vgpr(p5) = G_PTR_ADD %0, %1
388     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
389     $vgpr0 = COPY %3
395 name: load_private_s32_from_1_gep_4095
396 legalized:       true
397 regBankSelected: true
398 tracksRegLiveness: true
399 machineFunctionInfo:
400   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
401   stackPtrOffsetReg: $sgpr32
403 body: |
404   bb.0:
405     liveins:  $vgpr0
407     ; GFX6-LABEL: name: load_private_s32_from_1_gep_4095
408     ; GFX6: liveins: $vgpr0
409     ; GFX6-NEXT: {{  $}}
410     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
411     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec
412     ; GFX6-NEXT: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
413     ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
414     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
415     ; GFX9-LABEL: name: load_private_s32_from_1_gep_4095
416     ; GFX9: liveins: $vgpr0
417     ; GFX9-NEXT: {{  $}}
418     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
419     ; GFX9-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
420     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
421     %0:vgpr(p5) = COPY $vgpr0
422     %1:vgpr(s32) = G_CONSTANT i32 4095
423     %2:vgpr(p5) = G_PTR_ADD %0, %1
424     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
425     $vgpr0 = COPY %3
431 name: load_private_s32_from_1_gep_4096
432 legalized:       true
433 regBankSelected: true
434 tracksRegLiveness: true
435 machineFunctionInfo:
436   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
437   stackPtrOffsetReg: $sgpr32
439 body: |
440   bb.0:
441     liveins:  $vgpr0
443     ; GFX6-LABEL: name: load_private_s32_from_1_gep_4096
444     ; GFX6: liveins: $vgpr0
445     ; GFX6-NEXT: {{  $}}
446     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
447     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
448     ; GFX6-NEXT: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
449     ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
450     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
451     ; GFX9-LABEL: name: load_private_s32_from_1_gep_4096
452     ; GFX9: liveins: $vgpr0
453     ; GFX9-NEXT: {{  $}}
454     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
455     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
456     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
457     ; 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, 0, implicit $exec :: (load (s8), addrspace 5)
458     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
459     %0:vgpr(p5) = COPY $vgpr0
460     %1:vgpr(s32) = G_CONSTANT i32 4096
461     %2:vgpr(p5) = G_PTR_ADD %0, %1
462     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
463     $vgpr0 = COPY %3
469 name: load_private_s32_from_1_gep_m4095
470 legalized:       true
471 regBankSelected: true
472 tracksRegLiveness: true
473 machineFunctionInfo:
474   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
475   stackPtrOffsetReg: $sgpr32
477 body: |
478   bb.0:
479     liveins:  $vgpr0
481     ; GFX6-LABEL: name: load_private_s32_from_1_gep_m4095
482     ; GFX6: liveins: $vgpr0
483     ; GFX6-NEXT: {{  $}}
484     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
485     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4095, implicit $exec
486     ; GFX6-NEXT: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
487     ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
488     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
489     ; GFX9-LABEL: name: load_private_s32_from_1_gep_m4095
490     ; GFX9: liveins: $vgpr0
491     ; GFX9-NEXT: {{  $}}
492     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
493     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4095, implicit $exec
494     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
495     ; 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, 0, implicit $exec :: (load (s8), addrspace 5)
496     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
497     %0:vgpr(p5) = COPY $vgpr0
498     %1:vgpr(s32) = G_CONSTANT i32 -4095
499     %2:vgpr(p5) = G_PTR_ADD %0, %1
500     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
501     $vgpr0 = COPY %3
507 name: load_private_s32_from_1_gep_m4096
508 legalized:       true
509 regBankSelected: true
510 tracksRegLiveness: true
511 machineFunctionInfo:
512   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
513   stackPtrOffsetReg: $sgpr32
515 body: |
516   bb.0:
517     liveins:  $vgpr0
519     ; GFX6-LABEL: name: load_private_s32_from_1_gep_m4096
520     ; GFX6: liveins: $vgpr0
521     ; GFX6-NEXT: {{  $}}
522     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
523     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4096, implicit $exec
524     ; GFX6-NEXT: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
525     ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
526     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
527     ; GFX9-LABEL: name: load_private_s32_from_1_gep_m4096
528     ; GFX9: liveins: $vgpr0
529     ; GFX9-NEXT: {{  $}}
530     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
531     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -4096, implicit $exec
532     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
533     ; 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, 0, implicit $exec :: (load (s8), addrspace 5)
534     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
535     %0:vgpr(p5) = COPY $vgpr0
536     %1:vgpr(s32) = G_CONSTANT i32 -4096
537     %2:vgpr(p5) = G_PTR_ADD %0, %1
538     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
539     $vgpr0 = COPY %3
545 name: load_private_s32_from_1_gep_8191
546 legalized:       true
547 regBankSelected: true
548 tracksRegLiveness: true
549 machineFunctionInfo:
550   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
551   stackPtrOffsetReg: $sgpr32
553 body: |
554   bb.0:
555     liveins:  $vgpr0
557     ; GFX6-LABEL: name: load_private_s32_from_1_gep_8191
558     ; GFX6: liveins: $vgpr0
559     ; GFX6-NEXT: {{  $}}
560     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
561     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8191, implicit $exec
562     ; GFX6-NEXT: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
563     ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
564     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
565     ; GFX9-LABEL: name: load_private_s32_from_1_gep_8191
566     ; GFX9: liveins: $vgpr0
567     ; GFX9-NEXT: {{  $}}
568     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
569     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8191, implicit $exec
570     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
571     ; 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, 0, implicit $exec :: (load (s8), addrspace 5)
572     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
573     %0:vgpr(p5) = COPY $vgpr0
574     %1:vgpr(s32) = G_CONSTANT i32 8191
575     %2:vgpr(p5) = G_PTR_ADD %0, %1
576     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
577     $vgpr0 = COPY %3
583 name: load_private_s32_from_1_gep_8192
584 legalized:       true
585 regBankSelected: true
586 tracksRegLiveness: true
587 machineFunctionInfo:
588   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
589   stackPtrOffsetReg: $sgpr32
591 body: |
592   bb.0:
593     liveins:  $vgpr0
595     ; GFX6-LABEL: name: load_private_s32_from_1_gep_8192
596     ; GFX6: liveins: $vgpr0
597     ; GFX6-NEXT: {{  $}}
598     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
599     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8192, implicit $exec
600     ; GFX6-NEXT: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
601     ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
602     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
603     ; GFX9-LABEL: name: load_private_s32_from_1_gep_8192
604     ; GFX9: liveins: $vgpr0
605     ; GFX9-NEXT: {{  $}}
606     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
607     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 8192, implicit $exec
608     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
609     ; 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, 0, implicit $exec :: (load (s8), addrspace 5)
610     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
611     %0:vgpr(p5) = COPY $vgpr0
612     %1:vgpr(s32) = G_CONSTANT i32 8192
613     %2:vgpr(p5) = G_PTR_ADD %0, %1
614     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
615     $vgpr0 = COPY %3
621 name: load_private_s32_from_1_gep_m8191
622 legalized:       true
623 regBankSelected: true
624 tracksRegLiveness: true
625 machineFunctionInfo:
626   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
627   stackPtrOffsetReg: $sgpr32
629 body: |
630   bb.0:
631     liveins:  $vgpr0
633     ; GFX6-LABEL: name: load_private_s32_from_1_gep_m8191
634     ; GFX6: liveins: $vgpr0
635     ; GFX6-NEXT: {{  $}}
636     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
637     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8191, implicit $exec
638     ; GFX6-NEXT: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
639     ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
640     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
641     ; GFX9-LABEL: name: load_private_s32_from_1_gep_m8191
642     ; GFX9: liveins: $vgpr0
643     ; GFX9-NEXT: {{  $}}
644     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
645     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8191, implicit $exec
646     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
647     ; 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, 0, implicit $exec :: (load (s8), addrspace 5)
648     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
649     %0:vgpr(p5) = COPY $vgpr0
650     %1:vgpr(s32) = G_CONSTANT i32 -8191
651     %2:vgpr(p5) = G_PTR_ADD %0, %1
652     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
653     $vgpr0 = COPY %3
659 name: load_private_s32_from_1_gep_m8192
660 legalized:       true
661 regBankSelected: true
662 tracksRegLiveness: true
663 machineFunctionInfo:
664   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
665   stackPtrOffsetReg: $sgpr32
667 body: |
668   bb.0:
669     liveins:  $vgpr0
671     ; GFX6-LABEL: name: load_private_s32_from_1_gep_m8192
672     ; GFX6: liveins: $vgpr0
673     ; GFX6-NEXT: {{  $}}
674     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
675     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8192, implicit $exec
676     ; GFX6-NEXT: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
677     ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
678     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
679     ; GFX9-LABEL: name: load_private_s32_from_1_gep_m8192
680     ; GFX9: liveins: $vgpr0
681     ; GFX9-NEXT: {{  $}}
682     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
683     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -8192, implicit $exec
684     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
685     ; 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, 0, implicit $exec :: (load (s8), addrspace 5)
686     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
687     %0:vgpr(p5) = COPY $vgpr0
688     %1:vgpr(s32) = G_CONSTANT i32 -8192
689     %2:vgpr(p5) = G_PTR_ADD %0, %1
690     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
691     $vgpr0 = COPY %3
697 name: load_private_s32_from_4_constant_0
698 legalized:       true
699 regBankSelected: true
700 tracksRegLiveness: true
701 machineFunctionInfo:
702   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
703   stackPtrOffsetReg: $sgpr32
705 body: |
706   bb.0:
708     ; GFX6-LABEL: name: load_private_s32_from_4_constant_0
709     ; GFX6: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s32), addrspace 5)
710     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]]
711     ; GFX9-LABEL: name: load_private_s32_from_4_constant_0
712     ; GFX9: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s32), addrspace 5)
713     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]]
714     %0:vgpr(p5) = G_CONSTANT i32 0
715     %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 5)
716     $vgpr0 = COPY %1
722 name: load_private_s32_from_4_constant_sgpr_16
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:
733     ; GFX6-LABEL: name: load_private_s32_from_4_constant_sgpr_16
734     ; GFX6: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 16, 0, 0, 0, implicit $exec :: (load (s32), addrspace 5)
735     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]]
736     ; GFX9-LABEL: name: load_private_s32_from_4_constant_sgpr_16
737     ; GFX9: [[BUFFER_LOAD_DWORD_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 16, 0, 0, 0, implicit $exec :: (load (s32), addrspace 5)
738     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFSET]]
739     %0:sgpr(p5) = G_CONSTANT i32 16
740     %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 5)
741     $vgpr0 = COPY %1
747 name: load_private_s32_from_1_constant_4095
748 legalized:       true
749 regBankSelected: true
750 tracksRegLiveness: true
751 machineFunctionInfo:
752   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
753   stackPtrOffsetReg: $sgpr32
755 body: |
756   bb.0:
758     ; GFX6-LABEL: name: load_private_s32_from_1_constant_4095
759     ; GFX6: [[BUFFER_LOAD_UBYTE_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
760     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFSET]]
761     ; GFX9-LABEL: name: load_private_s32_from_1_constant_4095
762     ; GFX9: [[BUFFER_LOAD_UBYTE_OFFSET:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
763     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFSET]]
764     %0:vgpr(p5) = G_CONSTANT i32 4095
765     %1:vgpr(s32) = G_LOAD %0 :: (load (s8), align 1, addrspace 5)
766     $vgpr0 = COPY %1
772 name: load_private_s32_from_1_constant_4096
773 legalized:       true
774 regBankSelected: true
775 tracksRegLiveness: true
776 machineFunctionInfo:
777   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
778   stackPtrOffsetReg: $sgpr32
780 body: |
781   bb.0:
783     ; GFX6-LABEL: name: load_private_s32_from_1_constant_4096
784     ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
785     ; 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, 0, implicit $exec :: (load (s8), addrspace 5)
786     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
787     ; GFX9-LABEL: name: load_private_s32_from_1_constant_4096
788     ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
789     ; 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, 0, implicit $exec :: (load (s8), addrspace 5)
790     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
791     %0:vgpr(p5) = G_CONSTANT i32 4096
792     %1:vgpr(s32) = G_LOAD %0 :: (load (s8), align 1, addrspace 5)
793     $vgpr0 = COPY %1
799 name: load_private_s32_from_fi
800 legalized:       true
801 regBankSelected: true
802 tracksRegLiveness: true
803 machineFunctionInfo:
804   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
805   stackPtrOffsetReg: $sgpr32
806 stack:
807   - { id: 0, size: 4, alignment: 4 }
809 body: |
810   bb.0:
812     ; GFX6-LABEL: name: load_private_s32_from_fi
813     ; GFX6: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s32), addrspace 5)
814     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
815     ; GFX9-LABEL: name: load_private_s32_from_fi
816     ; GFX9: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s32), addrspace 5)
817     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
818     %0:vgpr(p5) = G_FRAME_INDEX %stack.0
819     %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 5)
820     $vgpr0 = COPY %1
825 name: load_private_s32_from_1_fi_offset_4095
826 legalized:       true
827 regBankSelected: true
828 tracksRegLiveness: true
829 machineFunctionInfo:
830   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
831   stackPtrOffsetReg: $sgpr32
832 stack:
833   - { id: 0, size: 4096, alignment: 4 }
835 body: |
836   bb.0:
838     ; GFX6-LABEL: name: load_private_s32_from_1_fi_offset_4095
839     ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
840     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
841     ; GFX9-LABEL: name: load_private_s32_from_1_fi_offset_4095
842     ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
843     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
844     %0:vgpr(p5) = G_FRAME_INDEX %stack.0
845     %1:vgpr(s32) = G_CONSTANT i32 4095
846     %2:vgpr(p5) = G_PTR_ADD %0, %1
847     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
848     $vgpr0 = COPY %3
852 # Have to hack around the copy of the constant to VGPR
854 name: load_private_s32_from_1_fi_offset_sgpr_4095
855 legalized:       true
856 regBankSelected: true
857 tracksRegLiveness: true
858 machineFunctionInfo:
859   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
860   stackPtrOffsetReg: $sgpr32
861 stack:
862   - { id: 0, size: 4096, alignment: 4 }
864 body: |
865   bb.0:
867     ; GFX6-LABEL: name: load_private_s32_from_1_fi_offset_sgpr_4095
868     ; GFX6: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
869     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
870     ; GFX9-LABEL: name: load_private_s32_from_1_fi_offset_sgpr_4095
871     ; GFX9: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
872     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
873     %0:vgpr(p5) = G_FRAME_INDEX %stack.0
874     %1:sgpr(s32) = G_CONSTANT i32 4095
875     %2:vgpr(s32) = COPY %1
876     %3:vgpr(p5) = G_PTR_ADD %0, %2
877     %4:vgpr(s32) = G_LOAD %3 :: (load (s8), align 1, addrspace 5)
878     $vgpr0 = COPY %4
884 name: load_private_s32_from_1_fi_offset_4096
885 legalized:       true
886 regBankSelected: true
887 tracksRegLiveness: true
888 machineFunctionInfo:
889   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
890   stackPtrOffsetReg: $sgpr32
891 stack:
892   - { id: 0, size: 8192, alignment: 4 }
894 body: |
895   bb.0:
897     ; GFX6-LABEL: name: load_private_s32_from_1_fi_offset_4096
898     ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
899     ; GFX6-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
900     ; GFX6-NEXT: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, implicit $exec
901     ; GFX6-NEXT: [[BUFFER_LOAD_UBYTE_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_UBYTE_OFFEN %2, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec :: (load (s8), addrspace 5)
902     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
903     ; GFX9-LABEL: name: load_private_s32_from_1_fi_offset_4096
904     ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
905     ; GFX9-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
906     ; 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
907     ; 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, 0, implicit $exec :: (load (s8), addrspace 5)
908     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_UBYTE_OFFEN]]
909     %0:vgpr(p5) = G_FRAME_INDEX %stack.0
910     %1:vgpr(s32) = G_CONSTANT i32 4096
911     %2:vgpr(p5) = G_PTR_ADD %0, %1
912     %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 5)
913     $vgpr0 = COPY %3
917 # Should not fold offset if this is a null dereference.
920 name: load_private_s32_from_neg1
921 legalized:       true
922 regBankSelected: true
923 tracksRegLiveness: true
924 machineFunctionInfo:
925   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
926   stackPtrOffsetReg: $sgpr32
928 body: |
929   bb.0:
931     ; GFX6-LABEL: name: load_private_s32_from_neg1
932     ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
933     ; 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, 0, implicit $exec :: (load (s32), addrspace 5)
934     ; GFX6-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
935     ; GFX9-LABEL: name: load_private_s32_from_neg1
936     ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
937     ; 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, 0, implicit $exec :: (load (s32), addrspace 5)
938     ; GFX9-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
939     %0:vgpr(p5) = G_CONSTANT i32 -1
940     %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 5)
941     $vgpr0 = COPY %1