Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / fold-fi-mubuf.mir
blobdcd64f58db201a37195dc7698aaa4a1dd3a8d362
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn-amd-amdhsa -verify-machineinstrs -run-pass si-fold-operands,dead-mi-elimination  %s -o - | FileCheck -check-prefix=GCN %s
4 # Kernels can have no FP
5 ---
6 name: kernel_no_fold_fi_non_stack_rsrc_and_soffset
7 tracksRegLiveness: true
8 frameInfo:
9   maxAlignment:    4
10   localFrameSize:  4
11 stack:
12   - { id: 0, size: 4, alignment: 4, local-offset: 0 }
13 machineFunctionInfo:
14   isEntryFunction: true
15   scratchRSrcReg:  '$sgpr96_sgpr97_sgpr98_sgpr99'
16   stackPtrOffsetReg: '$sgpr32'
17 body:             |
18   bb.0:
19     liveins: $sgpr12_sgpr13_sgpr14_sgpr15
21     ; GCN-LABEL: name: kernel_no_fold_fi_non_stack_rsrc_and_soffset
22     ; GCN: liveins: $sgpr12_sgpr13_sgpr14_sgpr15
23     ; GCN-NEXT: {{  $}}
24     ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr15
25     ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
26     ; GCN-NEXT: [[BUFFER_LOAD_DWORD_IDXEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN [[V_MOV_B32_e32_]], [[COPY]], 0, 0, 0, 0, implicit $exec
27     ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_IDXEN]]
28     ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr0
29     %0:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr15
30     %1:sreg_32_xm0 = S_MOV_B32 0
31     %2:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
32     %3:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN %2, %0, %1, 0, 0, 0, implicit $exec
33     $vgpr0 = COPY %3
34     SI_RETURN_TO_EPILOG $vgpr0
36 ...
38 ---
39 name: kernel_no_fold_fi_non_stack_rsrc
40 tracksRegLiveness: true
41 frameInfo:
42   maxAlignment:    4
43   localFrameSize:  4
44 stack:
45   - { id: 0, size: 4, alignment: 4, local-offset: 0 }
46 machineFunctionInfo:
47   isEntryFunction: true
48   scratchRSrcReg:  '$sgpr96_sgpr97_sgpr98_sgpr99'
49   stackPtrOffsetReg: '$sgpr32'
50 body:             |
51   bb.0:
52     liveins: $sgpr12_sgpr13_sgpr14_sgpr15
54     ; GCN-LABEL: name: kernel_no_fold_fi_non_stack_rsrc
55     ; GCN: liveins: $sgpr12_sgpr13_sgpr14_sgpr15
56     ; GCN-NEXT: {{  $}}
57     ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr15
58     ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
59     ; GCN-NEXT: [[BUFFER_LOAD_DWORD_IDXEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN [[V_MOV_B32_e32_]], [[COPY]], 0, 0, 0, 0, implicit $exec
60     ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_IDXEN]]
61     ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr0
62     %0:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr15
63     %2:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
64     %3:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN %2, %0, 0, 0, 0, 0, implicit $exec
65     $vgpr0 = COPY %3
66     SI_RETURN_TO_EPILOG $vgpr0
68 ...
70 ---
71 name: kernel_no_fold_fi_non_stack_soffset
72 tracksRegLiveness: true
73 frameInfo:
74   maxAlignment:    4
75   localFrameSize:  4
76 stack:
77   - { id: 0, size: 4, alignment: 4, local-offset: 0 }
78 machineFunctionInfo:
79   isEntryFunction: true
80   scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
81   stackPtrOffsetReg: '$sgpr32'
82 body:             |
83   bb.0:
85     ; GCN-LABEL: name: kernel_no_fold_fi_non_stack_soffset
86     ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
87     ; GCN-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 7, implicit $exec
88     ; GCN-NEXT: BUFFER_STORE_DWORD_OFFEN [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
89     ; GCN-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN [[V_MOV_B32_e32_]], $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
90     ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
91     ; GCN-NEXT: S_ENDPGM 0, implicit $vgpr0
92     %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
93     %1:vgpr_32 = V_MOV_B32_e32 7, implicit $exec
94     %2:sreg_32_xm0 = S_MOV_B32 0
96     BUFFER_STORE_DWORD_OFFEN %1:vgpr_32, %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, %2, 0, 0, 0, implicit $exec
97     %3:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, %2, 0, 0, 0, implicit $exec
98     $vgpr0 = COPY %3
99     S_ENDPGM 0, implicit $vgpr0
104 name: kernel_fold_fi_mubuf
105 tracksRegLiveness: true
106 frameInfo:
107   maxAlignment:    4
108   localFrameSize:  4
109 stack:
110   - { id: 0, size: 4, alignment: 4, local-offset: 0 }
111 machineFunctionInfo:
112   isEntryFunction: true
113   scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
114   stackPtrOffsetReg: '$sgpr32'
115 body:             |
116   bb.0:
118     ; GCN-LABEL: name: kernel_fold_fi_mubuf
119     ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 7, implicit $exec
120     ; GCN-NEXT: BUFFER_STORE_DWORD_OFFEN [[V_MOV_B32_e32_]], %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
121     ; GCN-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
122     ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
123     ; GCN-NEXT: S_ENDPGM 0, implicit $vgpr0
124     %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
125     %1:vgpr_32 = V_MOV_B32_e32 7, implicit $exec
127     BUFFER_STORE_DWORD_OFFEN %1:vgpr_32, %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
128     %2:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
129     $vgpr0 = COPY %2
130     S_ENDPGM 0, implicit $vgpr0
135 # Functions have an unswizzled SP/FP relative to the wave offset
137 name: function_no_fold_fi_non_stack_rsrc_and_soffset
138 tracksRegLiveness: true
139 frameInfo:
140   maxAlignment:    4
141   localFrameSize:  4
142 stack:
143   - { id: 0, size: 4, alignment: 4, local-offset: 0 }
144 machineFunctionInfo:
145   isEntryFunction: false
146   scratchRSrcReg:  '$sgpr96_sgpr97_sgpr98_sgpr99'
147   frameOffsetReg:  '$sgpr32'
148   stackPtrOffsetReg: '$sgpr32'
149 body:             |
150   bb.0:
151     liveins: $sgpr12_sgpr13_sgpr14_sgpr15
153     ; GCN-LABEL: name: function_no_fold_fi_non_stack_rsrc_and_soffset
154     ; GCN: liveins: $sgpr12_sgpr13_sgpr14_sgpr15
155     ; GCN-NEXT: {{  $}}
156     ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr15
157     ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
158     ; GCN-NEXT: [[BUFFER_LOAD_DWORD_IDXEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN [[V_MOV_B32_e32_]], [[COPY]], 0, 0, 0, 0, implicit $exec
159     ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_IDXEN]]
160     ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr0
161     %0:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr15
162     %1:sreg_32_xm0 = S_MOV_B32 0
163     %2:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
164     %3:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN %2, %0, %1, 0, 0, 0, implicit $exec
165     $vgpr0 = COPY %3
166     SI_RETURN_TO_EPILOG $vgpr0
171 name: function_no_fold_fi_non_stack_rsrc
172 tracksRegLiveness: true
173 frameInfo:
174   maxAlignment:    4
175   localFrameSize:  4
176 stack:
177   - { id: 0, size: 4, alignment: 4, local-offset: 0 }
178 machineFunctionInfo:
179   isEntryFunction: false
180   scratchRSrcReg:  '$sgpr96_sgpr97_sgpr98_sgpr99'
181   frameOffsetReg:  '$sgpr32'
182   stackPtrOffsetReg: '$sgpr32'
183 body:             |
184   bb.0:
185     liveins: $sgpr12_sgpr13_sgpr14_sgpr15
187     ; GCN-LABEL: name: function_no_fold_fi_non_stack_rsrc
188     ; GCN: liveins: $sgpr12_sgpr13_sgpr14_sgpr15
189     ; GCN-NEXT: {{  $}}
190     ; GCN-NEXT: [[COPY:%[0-9]+]]:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr15
191     ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
192     ; GCN-NEXT: [[BUFFER_LOAD_DWORD_IDXEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN [[V_MOV_B32_e32_]], [[COPY]], 0, 0, 0, 0, implicit $exec
193     ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_IDXEN]]
194     ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr0
195     %0:sgpr_128 = COPY $sgpr12_sgpr13_sgpr14_sgpr15
196     %2:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
197     %3:vgpr_32 = BUFFER_LOAD_DWORD_IDXEN %2, %0, 0, 0, 0, 0, implicit $exec
198     $vgpr0 = COPY %3
199     SI_RETURN_TO_EPILOG $vgpr0
204 name: function_no_fold_fi_non_stack_soffset
205 tracksRegLiveness: true
206 frameInfo:
207   maxAlignment:    4
208   localFrameSize:  4
209 stack:
210   - { id: 0, size: 4, alignment: 4, local-offset: 0 }
211 machineFunctionInfo:
212   isEntryFunction: false
213   scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
214   frameOffsetReg:  '$sgpr32'
215   stackPtrOffsetReg: '$sgpr32'
216 body:             |
217   bb.0:
219     ; GCN-LABEL: name: function_no_fold_fi_non_stack_soffset
220     ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 7, implicit $exec
221     ; GCN-NEXT: BUFFER_STORE_DWORD_OFFEN [[V_MOV_B32_e32_]], %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
222     ; GCN-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
223     ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
224     ; GCN-NEXT: S_ENDPGM 0, implicit $vgpr0
225     %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
226     %1:vgpr_32 = V_MOV_B32_e32 7, implicit $exec
228     BUFFER_STORE_DWORD_OFFEN %1:vgpr_32, %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
229     %2:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
230     $vgpr0 = COPY %2
231     S_ENDPGM 0, implicit $vgpr0
236 name: function_fold_fi_mubuf_wave_relative
237 tracksRegLiveness: true
238 frameInfo:
239   maxAlignment:    4
240   localFrameSize:  4
241 stack:
242   - { id: 0, size: 4, alignment: 4, local-offset: 0 }
243 machineFunctionInfo:
244   isEntryFunction: false
245   scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
246   frameOffsetReg:  '$sgpr32'
247   stackPtrOffsetReg: '$sgpr32'
248 body:             |
249   bb.0:
251     ; GCN-LABEL: name: function_fold_fi_mubuf_wave_relative
252     ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 7, implicit $exec
253     ; GCN-NEXT: BUFFER_STORE_DWORD_OFFEN [[V_MOV_B32_e32_]], %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
254     ; GCN-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
255     ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
256     ; GCN-NEXT: S_ENDPGM 0, implicit $vgpr0
257     %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
258     %1:vgpr_32 = V_MOV_B32_e32 7, implicit $exec
260     BUFFER_STORE_DWORD_OFFEN %1:vgpr_32, %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
261     %2:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
262     $vgpr0 = COPY %2
263     S_ENDPGM 0, implicit $vgpr0
268 name: function_fold_fi_mubuf_stack_relative
269 tracksRegLiveness: true
270 frameInfo:
271   maxAlignment:    4
272   localFrameSize:  4
273 stack:
274   - { id: 0, size: 4, alignment: 4, local-offset: 0 }
275 machineFunctionInfo:
276   isEntryFunction: false
277   scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
278   frameOffsetReg:  '$sgpr32'
279   stackPtrOffsetReg: '$sgpr32'
280 body:             |
281   bb.0:
283     ; GCN-LABEL: name: function_fold_fi_mubuf_stack_relative
284     ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 7, implicit $exec
285     ; GCN-NEXT: BUFFER_STORE_DWORD_OFFEN [[V_MOV_B32_e32_]], %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
286     ; GCN-NEXT: [[BUFFER_LOAD_DWORD_OFFEN:%[0-9]+]]:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %stack.0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
287     ; GCN-NEXT: $vgpr0 = COPY [[BUFFER_LOAD_DWORD_OFFEN]]
288     ; GCN-NEXT: S_ENDPGM 0, implicit $vgpr0
289     %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
290     %1:vgpr_32 = V_MOV_B32_e32 7, implicit $exec
292     BUFFER_STORE_DWORD_OFFEN %1:vgpr_32, %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
293     %2:vgpr_32 = BUFFER_LOAD_DWORD_OFFEN %0:vgpr_32, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
294     $vgpr0 = COPY %2
295     S_ENDPGM 0, implicit $vgpr0