[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-store-private.mir
blob4f801759c38e1afbbdb92105df96de46b8dbd248
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 -mattr=-wavefrontsize32,+wavefrontsize64 -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: function_store_private_s32_to_4
11 legalized:       true
12 regBankSelected: true
13 tracksRegLiveness: true
14 machineFunctionInfo:
15   isEntryFunction: false
16   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
17   stackPtrOffsetReg: $sgpr32
19 body: |
20   bb.0:
21     liveins: $vgpr0, $vgpr1
23     ; GFX6-LABEL: name: function_store_private_s32_to_4
24     ; GFX6: liveins: $vgpr0, $vgpr1
25     ; GFX6-NEXT: {{  $}}
26     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
27     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
28     ; GFX6-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s32), addrspace 5)
29     ; GFX9-LABEL: name: function_store_private_s32_to_4
30     ; GFX9: liveins: $vgpr0, $vgpr1
31     ; GFX9-NEXT: {{  $}}
32     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
33     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
34     ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s32), addrspace 5)
35     ; GFX11-LABEL: name: function_store_private_s32_to_4
36     ; GFX11: liveins: $vgpr0, $vgpr1
37     ; GFX11-NEXT: {{  $}}
38     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
39     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
40     ; GFX11-NEXT: SCRATCH_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 5)
41     %0:vgpr(s32) = COPY $vgpr0
42     %1:vgpr(p5) = COPY $vgpr1
43     G_STORE %0, %1 :: (store (s32), align 4, addrspace 5)
45 ...
47 ---
49 name: function_store_private_s32_to_2
50 legalized:       true
51 regBankSelected: true
52 tracksRegLiveness: true
53 machineFunctionInfo:
54   isEntryFunction: false
55   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
56   stackPtrOffsetReg: $sgpr32
58 body: |
59   bb.0:
60     liveins: $vgpr0, $vgpr1
62     ; GFX6-LABEL: name: function_store_private_s32_to_2
63     ; GFX6: liveins: $vgpr0, $vgpr1
64     ; GFX6-NEXT: {{  $}}
65     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
66     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
67     ; GFX6-NEXT: BUFFER_STORE_SHORT_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s16), addrspace 5)
68     ; GFX9-LABEL: name: function_store_private_s32_to_2
69     ; GFX9: liveins: $vgpr0, $vgpr1
70     ; GFX9-NEXT: {{  $}}
71     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
72     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
73     ; GFX9-NEXT: BUFFER_STORE_SHORT_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s16), addrspace 5)
74     ; GFX11-LABEL: name: function_store_private_s32_to_2
75     ; GFX11: liveins: $vgpr0, $vgpr1
76     ; GFX11-NEXT: {{  $}}
77     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
78     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
79     ; GFX11-NEXT: SCRATCH_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s16), addrspace 5)
80     %0:vgpr(s32) = COPY $vgpr0
81     %1:vgpr(p5) = COPY $vgpr1
82     G_STORE %0, %1 :: (store (s16), align 2, addrspace 5)
84 ...
86 ---
88 name: function_store_private_s32_to_1
89 legalized:       true
90 regBankSelected: true
91 tracksRegLiveness: true
92 machineFunctionInfo:
93   isEntryFunction: false
94   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
95   stackPtrOffsetReg: $sgpr32
97 body: |
98   bb.0:
99     liveins: $vgpr0, $vgpr1
101     ; GFX6-LABEL: name: function_store_private_s32_to_1
102     ; GFX6: liveins: $vgpr0, $vgpr1
103     ; GFX6-NEXT: {{  $}}
104     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
105     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
106     ; GFX6-NEXT: BUFFER_STORE_BYTE_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s8), addrspace 5)
107     ; GFX9-LABEL: name: function_store_private_s32_to_1
108     ; GFX9: liveins: $vgpr0, $vgpr1
109     ; GFX9-NEXT: {{  $}}
110     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
111     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
112     ; GFX9-NEXT: BUFFER_STORE_BYTE_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s8), addrspace 5)
113     ; GFX11-LABEL: name: function_store_private_s32_to_1
114     ; GFX11: liveins: $vgpr0, $vgpr1
115     ; GFX11-NEXT: {{  $}}
116     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
117     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
118     ; GFX11-NEXT: SCRATCH_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8), addrspace 5)
119     %0:vgpr(s32) = COPY $vgpr0
120     %1:vgpr(p5) = COPY $vgpr1
121     G_STORE %0, %1 :: (store (s8), align 1, addrspace 5)
127 name: function_store_private_v2s16
128 legalized:       true
129 regBankSelected: true
130 tracksRegLiveness: true
131 machineFunctionInfo:
132   isEntryFunction: false
133   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
134   stackPtrOffsetReg: $sgpr32
136 body: |
137   bb.0:
138     liveins: $vgpr0, $vgpr1
140     ; GFX6-LABEL: name: function_store_private_v2s16
141     ; GFX6: liveins: $vgpr0, $vgpr1
142     ; GFX6-NEXT: {{  $}}
143     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
144     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
145     ; GFX6-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (<2 x s16>), addrspace 5)
146     ; GFX9-LABEL: name: function_store_private_v2s16
147     ; GFX9: liveins: $vgpr0, $vgpr1
148     ; GFX9-NEXT: {{  $}}
149     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
150     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
151     ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (<2 x s16>), addrspace 5)
152     ; GFX11-LABEL: name: function_store_private_v2s16
153     ; GFX11: liveins: $vgpr0, $vgpr1
154     ; GFX11-NEXT: {{  $}}
155     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
156     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
157     ; GFX11-NEXT: SCRATCH_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s16>), addrspace 5)
158     %0:vgpr(<2 x s16>) = COPY $vgpr0
159     %1:vgpr(p5) = COPY $vgpr1
160     G_STORE %0, %1 :: (store (<2 x s16>), align 4, addrspace 5)
166 name: function_store_private_p3
167 legalized:       true
168 regBankSelected: true
169 tracksRegLiveness: true
170 machineFunctionInfo:
171   isEntryFunction: false
172   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
173   stackPtrOffsetReg: $sgpr32
175 body: |
176   bb.0:
177     liveins: $vgpr0, $vgpr1
179     ; GFX6-LABEL: name: function_store_private_p3
180     ; GFX6: liveins: $vgpr0, $vgpr1
181     ; GFX6-NEXT: {{  $}}
182     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
183     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
184     ; GFX6-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (p3), addrspace 5)
185     ; GFX9-LABEL: name: function_store_private_p3
186     ; GFX9: liveins: $vgpr0, $vgpr1
187     ; GFX9-NEXT: {{  $}}
188     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
189     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
190     ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (p3), addrspace 5)
191     ; GFX11-LABEL: name: function_store_private_p3
192     ; GFX11: liveins: $vgpr0, $vgpr1
193     ; GFX11-NEXT: {{  $}}
194     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
195     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
196     ; GFX11-NEXT: SCRATCH_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p3), addrspace 5)
197     %0:vgpr(p3) = COPY $vgpr0
198     %1:vgpr(p5) = COPY $vgpr1
199     G_STORE %0, %1 :: (store (p3), align 4, addrspace 5)
205 name: function_store_private_p5
206 legalized:       true
207 regBankSelected: true
208 tracksRegLiveness: true
209 machineFunctionInfo:
210   isEntryFunction: false
211   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
212   stackPtrOffsetReg: $sgpr32
214 body: |
215   bb.0:
216     liveins: $vgpr0, $vgpr1
218     ; GFX6-LABEL: name: function_store_private_p5
219     ; GFX6: liveins: $vgpr0, $vgpr1
220     ; GFX6-NEXT: {{  $}}
221     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
222     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
223     ; GFX6-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (p5), addrspace 5)
224     ; GFX9-LABEL: name: function_store_private_p5
225     ; GFX9: liveins: $vgpr0, $vgpr1
226     ; GFX9-NEXT: {{  $}}
227     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
228     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
229     ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (p5), addrspace 5)
230     ; GFX11-LABEL: name: function_store_private_p5
231     ; GFX11: liveins: $vgpr0, $vgpr1
232     ; GFX11-NEXT: {{  $}}
233     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
234     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
235     ; GFX11-NEXT: SCRATCH_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p5), addrspace 5)
236     %0:vgpr(p5) = COPY $vgpr0
237     %1:vgpr(p5) = COPY $vgpr1
238     G_STORE %0, %1 :: (store (p5), align 4, addrspace 5)
244 name: function_store_private_s32_to_1_fi_offset_4095
245 legalized:       true
246 regBankSelected: true
247 tracksRegLiveness: true
248 machineFunctionInfo:
249   isEntryFunction: false
250   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
251   stackPtrOffsetReg: $sgpr32
252 stack:
253   - { id: 0, size: 4096, alignment: 4 }
255 body: |
256   bb.0:
258     ; GFX6-LABEL: name: function_store_private_s32_to_1_fi_offset_4095
259     ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
260     ; GFX6-NEXT: BUFFER_STORE_BYTE_OFFEN [[V_MOV_B32_e32_]], %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, implicit $exec :: (store (s8), addrspace 5)
261     ; GFX9-LABEL: name: function_store_private_s32_to_1_fi_offset_4095
262     ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
263     ; GFX9-NEXT: BUFFER_STORE_BYTE_OFFEN [[V_MOV_B32_e32_]], %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, implicit $exec :: (store (s8), addrspace 5)
264     ; GFX11-LABEL: name: function_store_private_s32_to_1_fi_offset_4095
265     ; GFX11: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
266     ; GFX11-NEXT: SCRATCH_STORE_BYTE_SADDR [[V_MOV_B32_e32_]], %stack.0, 4095, 0, implicit $exec, implicit $flat_scr :: (store (s8), addrspace 5)
267     %0:vgpr(p5) = G_FRAME_INDEX %stack.0
268     %1:vgpr(s32) = G_CONSTANT i32 4095
269     %2:vgpr(p5) = G_PTR_ADD %0, %1
270     %3:vgpr(s32) = G_CONSTANT i32 0
271     G_STORE %3, %2 :: (store (s8), align 1, addrspace 5)
277 name: function_store_private_s32_to_1_constant_4095
278 legalized:       true
279 regBankSelected: true
280 tracksRegLiveness: true
281 machineFunctionInfo:
282   isEntryFunction: false
283   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
284   stackPtrOffsetReg: $sgpr32
285 stack:
286   - { id: 0, size: 4096, alignment: 4 }
288 body: |
289   bb.0:
291     ; GFX6-LABEL: name: function_store_private_s32_to_1_constant_4095
292     ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
293     ; GFX6-NEXT: BUFFER_STORE_BYTE_OFFSET [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, implicit $exec :: (store (s8), addrspace 5)
294     ; GFX9-LABEL: name: function_store_private_s32_to_1_constant_4095
295     ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
296     ; GFX9-NEXT: BUFFER_STORE_BYTE_OFFSET [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, implicit $exec :: (store (s8), addrspace 5)
297     ; GFX11-LABEL: name: function_store_private_s32_to_1_constant_4095
298     ; GFX11: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec
299     ; GFX11-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
300     ; GFX11-NEXT: SCRATCH_STORE_BYTE [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8), addrspace 5)
301     %0:vgpr(p5) = G_CONSTANT i32 4095
302     %1:vgpr(s32) = G_CONSTANT i32 0
303     G_STORE %1, %0 :: (store (s8), align 1, addrspace 5)
309 name: function_store_private_s32_to_1_constant_4096
310 legalized:       true
311 regBankSelected: true
312 tracksRegLiveness: true
313 machineFunctionInfo:
314   isEntryFunction: false
315   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
316   stackPtrOffsetReg: $sgpr32
317 stack:
318   - { id: 0, size: 4096, alignment: 4 }
320 body: |
321   bb.0:
323     ; GFX6-LABEL: name: function_store_private_s32_to_1_constant_4096
324     ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
325     ; GFX6-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
326     ; GFX6-NEXT: BUFFER_STORE_BYTE_OFFEN [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s8), addrspace 5)
327     ; GFX9-LABEL: name: function_store_private_s32_to_1_constant_4096
328     ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
329     ; GFX9-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
330     ; GFX9-NEXT: BUFFER_STORE_BYTE_OFFEN [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s8), addrspace 5)
331     ; GFX11-LABEL: name: function_store_private_s32_to_1_constant_4096
332     ; GFX11: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
333     ; GFX11-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
334     ; GFX11-NEXT: SCRATCH_STORE_BYTE [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8), addrspace 5)
335     %0:vgpr(p5) = G_CONSTANT i32 4096
336     %1:vgpr(s32) = G_CONSTANT i32 0
337     G_STORE %1, %0 :: (store (s8), align 1, addrspace 5)
343 name: kernel_store_private_s32_to_4
344 legalized:       true
345 regBankSelected: true
346 tracksRegLiveness: true
347 machineFunctionInfo:
348   isEntryFunction: true
349   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
351 body: |
352   bb.0:
353     liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
355     ; GFX6-LABEL: name: kernel_store_private_s32_to_4
356     ; GFX6: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
357     ; GFX6-NEXT: {{  $}}
358     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
359     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
360     ; GFX6-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s32), addrspace 5)
361     ; GFX9-LABEL: name: kernel_store_private_s32_to_4
362     ; GFX9: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
363     ; GFX9-NEXT: {{  $}}
364     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
365     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
366     ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s32), addrspace 5)
367     ; GFX11-LABEL: name: kernel_store_private_s32_to_4
368     ; GFX11: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
369     ; GFX11-NEXT: {{  $}}
370     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
371     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
372     ; GFX11-NEXT: SCRATCH_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 5)
373     %0:vgpr(s32) = COPY $vgpr0
374     %1:vgpr(p5) = COPY $vgpr1
375     G_STORE %0, %1 :: (store (s32), align 4, addrspace 5)
381 name: kernel_store_private_s32_to_2
382 legalized:       true
383 regBankSelected: true
384 tracksRegLiveness: true
385 machineFunctionInfo:
386   isEntryFunction: true
387   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
389 body: |
390   bb.0:
391     liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
393     ; GFX6-LABEL: name: kernel_store_private_s32_to_2
394     ; GFX6: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
395     ; GFX6-NEXT: {{  $}}
396     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
397     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
398     ; GFX6-NEXT: BUFFER_STORE_SHORT_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s16), addrspace 5)
399     ; GFX9-LABEL: name: kernel_store_private_s32_to_2
400     ; GFX9: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
401     ; GFX9-NEXT: {{  $}}
402     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
403     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
404     ; GFX9-NEXT: BUFFER_STORE_SHORT_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s16), addrspace 5)
405     ; GFX11-LABEL: name: kernel_store_private_s32_to_2
406     ; GFX11: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
407     ; GFX11-NEXT: {{  $}}
408     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
409     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
410     ; GFX11-NEXT: SCRATCH_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s16), addrspace 5)
411     %0:vgpr(s32) = COPY $vgpr0
412     %1:vgpr(p5) = COPY $vgpr1
413     G_STORE %0, %1 :: (store (s16), align 2, addrspace 5)
419 name: kernel_store_private_s32_to_1
420 legalized:       true
421 regBankSelected: true
422 tracksRegLiveness: true
423 machineFunctionInfo:
424   isEntryFunction: true
425   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
427 body: |
428   bb.0:
429     liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
431     ; GFX6-LABEL: name: kernel_store_private_s32_to_1
432     ; GFX6: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
433     ; GFX6-NEXT: {{  $}}
434     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
435     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
436     ; GFX6-NEXT: BUFFER_STORE_BYTE_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s8), addrspace 5)
437     ; GFX9-LABEL: name: kernel_store_private_s32_to_1
438     ; GFX9: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
439     ; GFX9-NEXT: {{  $}}
440     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
441     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
442     ; GFX9-NEXT: BUFFER_STORE_BYTE_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s8), addrspace 5)
443     ; GFX11-LABEL: name: kernel_store_private_s32_to_1
444     ; GFX11: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
445     ; GFX11-NEXT: {{  $}}
446     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
447     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
448     ; GFX11-NEXT: SCRATCH_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8), addrspace 5)
449     %0:vgpr(s32) = COPY $vgpr0
450     %1:vgpr(p5) = COPY $vgpr1
451     G_STORE %0, %1 :: (store (s8), align 1, addrspace 5)
457 name: kernel_store_private_v2s16
458 legalized:       true
459 regBankSelected: true
460 tracksRegLiveness: true
461 machineFunctionInfo:
462   isEntryFunction: true
463   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
465 body: |
466   bb.0:
467     liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
470     ; GFX6-LABEL: name: kernel_store_private_v2s16
471     ; GFX6: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
472     ; GFX6-NEXT: {{  $}}
473     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
474     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
475     ; GFX6-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (<2 x s16>), addrspace 5)
476     ; GFX9-LABEL: name: kernel_store_private_v2s16
477     ; GFX9: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
478     ; GFX9-NEXT: {{  $}}
479     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
480     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
481     ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (<2 x s16>), addrspace 5)
482     ; GFX11-LABEL: name: kernel_store_private_v2s16
483     ; GFX11: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
484     ; GFX11-NEXT: {{  $}}
485     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
486     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
487     ; GFX11-NEXT: SCRATCH_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s16>), addrspace 5)
488     %0:vgpr(<2 x s16>) = COPY $vgpr0
489     %1:vgpr(p5) = COPY $vgpr1
490     G_STORE %0, %1 :: (store (<2 x s16>), align 4, addrspace 5)
496 name: kernel_store_private_p3
497 legalized:       true
498 regBankSelected: true
499 tracksRegLiveness: true
500 machineFunctionInfo:
501   isEntryFunction: true
502   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
504 body: |
505   bb.0:
506     liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
508     ; GFX6-LABEL: name: kernel_store_private_p3
509     ; GFX6: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
510     ; GFX6-NEXT: {{  $}}
511     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
512     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
513     ; GFX6-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (p3), addrspace 5)
514     ; GFX9-LABEL: name: kernel_store_private_p3
515     ; GFX9: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
516     ; GFX9-NEXT: {{  $}}
517     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
518     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
519     ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (p3), addrspace 5)
520     ; GFX11-LABEL: name: kernel_store_private_p3
521     ; GFX11: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
522     ; GFX11-NEXT: {{  $}}
523     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
524     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
525     ; GFX11-NEXT: SCRATCH_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p3), addrspace 5)
526     %0:vgpr(p3) = COPY $vgpr0
527     %1:vgpr(p5) = COPY $vgpr1
528     G_STORE %0, %1 :: (store (p3), align 4, addrspace 5)
534 name: kernel_store_private_p5
535 legalized:       true
536 regBankSelected: true
537 tracksRegLiveness: true
538 machineFunctionInfo:
539   isEntryFunction: true
540   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
542 body: |
543   bb.0:
544     liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
546     ; GFX6-LABEL: name: kernel_store_private_p5
547     ; GFX6: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
548     ; GFX6-NEXT: {{  $}}
549     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
550     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
551     ; GFX6-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (p5), addrspace 5)
552     ; GFX9-LABEL: name: kernel_store_private_p5
553     ; GFX9: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
554     ; GFX9-NEXT: {{  $}}
555     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
556     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
557     ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[COPY1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (p5), addrspace 5)
558     ; GFX11-LABEL: name: kernel_store_private_p5
559     ; GFX11: liveins: $vgpr0, $vgpr1, $sgpr0_sgpr1_sgpr2_sgpr3
560     ; GFX11-NEXT: {{  $}}
561     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
562     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
563     ; GFX11-NEXT: SCRATCH_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p5), addrspace 5)
564     %0:vgpr(p5) = COPY $vgpr0
565     %1:vgpr(p5) = COPY $vgpr1
566     G_STORE %0, %1 :: (store (p5), align 4, addrspace 5)
572 name: kernel_store_private_s32_to_1_fi_offset_4095
573 legalized:       true
574 regBankSelected: true
575 tracksRegLiveness: true
576 machineFunctionInfo:
577   isEntryFunction: true
578   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
579 stack:
580   - { id: 0, size: 4096, alignment: 4 }
582 body: |
583   bb.0:
584     liveins: $sgpr0_sgpr1_sgpr2_sgpr3
586     ; GFX6-LABEL: name: kernel_store_private_s32_to_1_fi_offset_4095
587     ; GFX6: liveins: $sgpr0_sgpr1_sgpr2_sgpr3
588     ; GFX6-NEXT: {{  $}}
589     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
590     ; GFX6-NEXT: BUFFER_STORE_BYTE_OFFEN [[V_MOV_B32_e32_]], %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, implicit $exec :: (store (s8), addrspace 5)
591     ; GFX9-LABEL: name: kernel_store_private_s32_to_1_fi_offset_4095
592     ; GFX9: liveins: $sgpr0_sgpr1_sgpr2_sgpr3
593     ; GFX9-NEXT: {{  $}}
594     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
595     ; GFX9-NEXT: BUFFER_STORE_BYTE_OFFEN [[V_MOV_B32_e32_]], %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, implicit $exec :: (store (s8), addrspace 5)
596     ; GFX11-LABEL: name: kernel_store_private_s32_to_1_fi_offset_4095
597     ; GFX11: liveins: $sgpr0_sgpr1_sgpr2_sgpr3
598     ; GFX11-NEXT: {{  $}}
599     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
600     ; GFX11-NEXT: SCRATCH_STORE_BYTE_SADDR [[V_MOV_B32_e32_]], %stack.0, 4095, 0, implicit $exec, implicit $flat_scr :: (store (s8), addrspace 5)
601     %0:vgpr(p5) = G_FRAME_INDEX %stack.0
602     %1:vgpr(s32) = G_CONSTANT i32 4095
603     %2:vgpr(p5) = G_PTR_ADD %0, %1
604     %3:vgpr(s32) = G_CONSTANT i32 0
605     G_STORE %3, %2 :: (store (s8), align 1, addrspace 5)
611 name: kernel_store_private_s32_to_1_constant_4095
612 legalized:       true
613 regBankSelected: true
614 tracksRegLiveness: true
615 machineFunctionInfo:
616   isEntryFunction: true
617   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
618 stack:
619   - { id: 0, size: 4096, alignment: 4 }
621 body: |
622   bb.0:
623     liveins: $sgpr0_sgpr1_sgpr2_sgpr3
625     ; GFX6-LABEL: name: kernel_store_private_s32_to_1_constant_4095
626     ; GFX6: liveins: $sgpr0_sgpr1_sgpr2_sgpr3
627     ; GFX6-NEXT: {{  $}}
628     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
629     ; GFX6-NEXT: BUFFER_STORE_BYTE_OFFSET [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, implicit $exec :: (store (s8), addrspace 5)
630     ; GFX9-LABEL: name: kernel_store_private_s32_to_1_constant_4095
631     ; GFX9: liveins: $sgpr0_sgpr1_sgpr2_sgpr3
632     ; GFX9-NEXT: {{  $}}
633     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
634     ; GFX9-NEXT: BUFFER_STORE_BYTE_OFFSET [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 4095, 0, 0, implicit $exec :: (store (s8), addrspace 5)
635     ; GFX11-LABEL: name: kernel_store_private_s32_to_1_constant_4095
636     ; GFX11: liveins: $sgpr0_sgpr1_sgpr2_sgpr3
637     ; GFX11-NEXT: {{  $}}
638     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec
639     ; GFX11-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
640     ; GFX11-NEXT: SCRATCH_STORE_BYTE [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8), addrspace 5)
641     %0:vgpr(p5) = G_CONSTANT i32 4095
642     %1:vgpr(s32) = G_CONSTANT i32 0
643     G_STORE %1, %0 :: (store (s8), align 1, addrspace 5)
649 name: kernel_store_private_s32_to_1_constant_4096
650 legalized:       true
651 regBankSelected: true
652 tracksRegLiveness: true
653 machineFunctionInfo:
654   isEntryFunction: true
655   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
656 stack:
657   - { id: 0, size: 4096, alignment: 4 }
659 body: |
660   bb.0:
661     liveins: $sgpr0_sgpr1_sgpr2_sgpr3
663     ; GFX6-LABEL: name: kernel_store_private_s32_to_1_constant_4096
664     ; GFX6: liveins: $sgpr0_sgpr1_sgpr2_sgpr3
665     ; GFX6-NEXT: {{  $}}
666     ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
667     ; GFX6-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
668     ; GFX6-NEXT: BUFFER_STORE_BYTE_OFFEN [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s8), addrspace 5)
669     ; GFX9-LABEL: name: kernel_store_private_s32_to_1_constant_4096
670     ; GFX9: liveins: $sgpr0_sgpr1_sgpr2_sgpr3
671     ; GFX9-NEXT: {{  $}}
672     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
673     ; GFX9-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
674     ; GFX9-NEXT: BUFFER_STORE_BYTE_OFFEN [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s8), addrspace 5)
675     ; GFX11-LABEL: name: kernel_store_private_s32_to_1_constant_4096
676     ; GFX11: liveins: $sgpr0_sgpr1_sgpr2_sgpr3
677     ; GFX11-NEXT: {{  $}}
678     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
679     ; GFX11-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
680     ; GFX11-NEXT: SCRATCH_STORE_BYTE [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8), addrspace 5)
681     %0:vgpr(p5) = G_CONSTANT i32 4096
682     %1:vgpr(s32) = G_CONSTANT i32 0
683     G_STORE %1, %0 :: (store (s8), align 1, addrspace 5)
688 name: function_store_private_s32_to_4_wave_address
689 legalized:       true
690 regBankSelected: true
691 tracksRegLiveness: true
692 machineFunctionInfo:
693   isEntryFunction: false
694   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
695   stackPtrOffsetReg: $sgpr32
697 body: |
698   bb.0:
699     liveins: $vgpr0, $vgpr1
701     ; GFX6-LABEL: name: function_store_private_s32_to_4_wave_address
702     ; GFX6: liveins: $vgpr0, $vgpr1
703     ; GFX6-NEXT: {{  $}}
704     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
705     ; GFX6-NEXT: BUFFER_STORE_DWORD_OFFSET [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec :: (store (s32), addrspace 5)
706     ; GFX9-LABEL: name: function_store_private_s32_to_4_wave_address
707     ; GFX9: liveins: $vgpr0, $vgpr1
708     ; GFX9-NEXT: {{  $}}
709     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
710     ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFSET [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec :: (store (s32), addrspace 5)
711     ; GFX11-LABEL: name: function_store_private_s32_to_4_wave_address
712     ; GFX11: liveins: $vgpr0, $vgpr1
713     ; GFX11-NEXT: {{  $}}
714     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
715     ; GFX11-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 5, $sgpr32, implicit $exec
716     ; GFX11-NEXT: SCRATCH_STORE_DWORD [[COPY]], [[V_LSHRREV_B32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 5)
717     %0:vgpr(s32) = COPY $vgpr0
718     %1:vgpr(p5) = G_AMDGPU_WAVE_ADDRESS $sgpr32
719     G_STORE %0, %1 :: (store (s32), align 4, addrspace 5)
723 # Has regbank copy of constant
725 name: function_store_private_s32_to_4_wave_address_offset_copy_constant_4095
726 legalized:       true
727 regBankSelected: true
728 tracksRegLiveness: true
729 machineFunctionInfo:
730   isEntryFunction: false
731   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
732   stackPtrOffsetReg: $sgpr32
734 body: |
735   bb.0:
736     liveins: $vgpr0, $vgpr1
738     ; GFX6-LABEL: name: function_store_private_s32_to_4_wave_address_offset_copy_constant_4095
739     ; GFX6: liveins: $vgpr0, $vgpr1
740     ; GFX6-NEXT: {{  $}}
741     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
742     ; GFX6-NEXT: BUFFER_STORE_DWORD_OFFSET [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 4095, 0, 0, implicit $exec :: (store (s32), addrspace 5)
743     ; GFX9-LABEL: name: function_store_private_s32_to_4_wave_address_offset_copy_constant_4095
744     ; GFX9: liveins: $vgpr0, $vgpr1
745     ; GFX9-NEXT: {{  $}}
746     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
747     ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFSET [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 4095, 0, 0, implicit $exec :: (store (s32), addrspace 5)
748     ; GFX11-LABEL: name: function_store_private_s32_to_4_wave_address_offset_copy_constant_4095
749     ; GFX11: liveins: $vgpr0, $vgpr1
750     ; GFX11-NEXT: {{  $}}
751     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
752     ; GFX11-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 5, $sgpr32, implicit $exec
753     ; GFX11-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4095
754     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]
755     ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[V_LSHRREV_B32_e64_]], [[COPY1]], 0, implicit $exec
756     ; GFX11-NEXT: SCRATCH_STORE_DWORD [[COPY]], [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 5)
757     %0:vgpr(s32) = COPY $vgpr0
758     %1:vgpr(p5) = G_AMDGPU_WAVE_ADDRESS $sgpr32
759     %2:sgpr(s32) = G_CONSTANT i32 4095
760     %3:vgpr(s32) = COPY %2
761     %4:vgpr(p5) = G_PTR_ADD %1, %3
762     G_STORE %0, %4 :: (store (s32), align 4, addrspace 5)
767 name: function_store_private_s32_to_4_wave_address_offset_4095
768 legalized:       true
769 regBankSelected: true
770 tracksRegLiveness: true
771 machineFunctionInfo:
772   isEntryFunction: false
773   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
774   stackPtrOffsetReg: $sgpr32
776 body: |
777   bb.0:
778     liveins: $vgpr0, $vgpr1
780     ; GFX6-LABEL: name: function_store_private_s32_to_4_wave_address_offset_4095
781     ; GFX6: liveins: $vgpr0, $vgpr1
782     ; GFX6-NEXT: {{  $}}
783     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
784     ; GFX6-NEXT: BUFFER_STORE_DWORD_OFFSET [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 4095, 0, 0, implicit $exec :: (store (s32), addrspace 5)
785     ;
786     ; GFX9-LABEL: name: function_store_private_s32_to_4_wave_address_offset_4095
787     ; GFX9: liveins: $vgpr0, $vgpr1
788     ; GFX9-NEXT: {{  $}}
789     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
790     ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFSET [[COPY]], $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 4095, 0, 0, implicit $exec :: (store (s32), addrspace 5)
791     ;
792     ; GFX11-LABEL: name: function_store_private_s32_to_4_wave_address_offset_4095
793     ; GFX11: liveins: $vgpr0, $vgpr1
794     ; GFX11-NEXT: {{  $}}
795     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
796     ; GFX11-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 5, $sgpr32, implicit $exec
797     ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec
798     ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[V_LSHRREV_B32_e64_]], [[V_MOV_B32_e32_]], 0, implicit $exec
799     ; GFX11-NEXT: SCRATCH_STORE_DWORD [[COPY]], [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 5)
800     %0:vgpr(s32) = COPY $vgpr0
801     %1:vgpr(p5) = G_AMDGPU_WAVE_ADDRESS $sgpr32
802     %2:vgpr(s32) = G_CONSTANT i32 4095
803     %3:vgpr(p5) = G_PTR_ADD %1, %2
804     G_STORE %0, %3 :: (store (s32), align 4, addrspace 5)
809 name: function_store_private_s32_to_4_wave_address_offset_copy_constant_4096
810 legalized:       true
811 regBankSelected: true
812 tracksRegLiveness: true
813 machineFunctionInfo:
814   isEntryFunction: false
815   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
816   stackPtrOffsetReg: $sgpr32
818 body: |
819   bb.0:
820     liveins: $vgpr0, $vgpr1
822     ; GFX6-LABEL: name: function_store_private_s32_to_4_wave_address_offset_copy_constant_4096
823     ; GFX6: liveins: $vgpr0, $vgpr1
824     ; GFX6-NEXT: {{  $}}
825     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
826     ; GFX6-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 6, $sgpr32, implicit $exec
827     ; GFX6-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096
828     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]
829     ; 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_LSHRREV_B32_e64_]], [[COPY1]], 0, implicit $exec
830     ; GFX6-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[V_ADD_CO_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s32), addrspace 5)
831     ;
832     ; GFX9-LABEL: name: function_store_private_s32_to_4_wave_address_offset_copy_constant_4096
833     ; GFX9: liveins: $vgpr0, $vgpr1
834     ; GFX9-NEXT: {{  $}}
835     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
836     ; GFX9-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 6, $sgpr32, implicit $exec
837     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096
838     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]
839     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[V_LSHRREV_B32_e64_]], [[COPY1]], 0, implicit $exec
840     ; GFX9-NEXT: BUFFER_STORE_DWORD_OFFEN [[COPY]], [[V_ADD_U32_e64_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s32), addrspace 5)
841     ; GFX11-LABEL: name: function_store_private_s32_to_4_wave_address_offset_copy_constant_4096
842     ; GFX11: liveins: $vgpr0, $vgpr1
843     ; GFX11-NEXT: {{  $}}
844     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
845     ; GFX11-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 5, $sgpr32, implicit $exec
846     ; GFX11-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096
847     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]
848     ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[V_LSHRREV_B32_e64_]], [[COPY1]], 0, implicit $exec
849     ; GFX11-NEXT: SCRATCH_STORE_DWORD [[COPY]], [[V_ADD_U32_e64_]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32), addrspace 5)
850     %0:vgpr(s32) = COPY $vgpr0
851     %1:vgpr(p5) = G_AMDGPU_WAVE_ADDRESS $sgpr32
852     %2:sgpr(s32) = G_CONSTANT i32 4096
853     %3:vgpr(s32) = COPY %2
854     %4:vgpr(p5) = G_PTR_ADD %1, %3
855     G_STORE %0, %4 :: (store (s32), align 4, addrspace 5)