Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / release-vgprs.mir
blob3a879e818af797b64e4564ee8315e02f834b66cc
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O2 -march=amdgcn -mcpu=gfx1100 -run-pass=si-insert-waitcnts -verify-machineinstrs -o - %s | FileCheck %s -check-prefixes=CHECK,OPT
3 # RUN: llc -O0 -march=amdgcn -mcpu=gfx1100 -run-pass=si-insert-waitcnts -verify-machineinstrs -o - %s | FileCheck %s -check-prefixes=CHECK,NOOPT
5 --- |
6   define amdgpu_ps void @tbuffer_store1() { ret void }
7   define amdgpu_ps void @tbuffer_store2() { ret void }
8   define amdgpu_ps void @flat_store() { ret void }
9   define amdgpu_ps void @global_store() { ret void }
10   define amdgpu_ps void @buffer_store_format() { ret void }
11   define amdgpu_ps void @ds_write_b32() { ret void }
12   define amdgpu_ps void @global_store_dword() { ret void }
13   define amdgpu_ps void @multiple_basic_blocks1() { ret void }
14   define amdgpu_ps void @multiple_basic_blocks2() { ret void }
15   define amdgpu_ps void @multiple_basic_blocks3() { ret void }
16   define amdgpu_ps void @recursive_loop() { ret void }
17   define amdgpu_ps void @recursive_loop_vmem() { ret void }
18   define amdgpu_ps void @image_store() { ret void }
19   define amdgpu_ps void @scratch_store() { ret void }
20   define amdgpu_ps void @buffer_atomic() { ret void }
21   define amdgpu_ps void @flat_atomic() { ret void }
22   define amdgpu_ps void @global_atomic() { ret void }
23   define amdgpu_ps void @image_atomic() { ret void }
24   define amdgpu_ps void @global_store_optnone() noinline optnone { ret void }
25 ...
27 ---
28 name:            tbuffer_store1
29 body:             |
30   bb.0:
31     ; OPT-LABEL: name: tbuffer_store1
32     ; OPT: S_WAITCNT 0
33     ; OPT-NEXT: TBUFFER_STORE_FORMAT_XYZW_OFFSET_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 42, 117, 0, 0, implicit $exec
34     ; OPT-NEXT: S_NOP 0
35     ; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m0
36     ; OPT-NEXT: S_ENDPGM 0
37     ;
38     ; NOOPT-LABEL: name: tbuffer_store1
39     ; NOOPT: S_WAITCNT 0
40     ; NOOPT-NEXT: TBUFFER_STORE_FORMAT_XYZW_OFFSET_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 42, 117, 0, 0, implicit $exec
41     ; NOOPT-NEXT: S_ENDPGM 0
42     TBUFFER_STORE_FORMAT_XYZW_OFFSET_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 42, 117, 0, 0, implicit $exec
43     S_ENDPGM 0
44 ...
46 ---
47 name:            tbuffer_store2
48 body:             |
49   bb.0:
50     ; OPT-LABEL: name: tbuffer_store2
51     ; OPT: S_WAITCNT 0
52     ; OPT-NEXT: TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec :: (dereferenceable store (s128), align 1, addrspace 7)
53     ; OPT-NEXT: S_NOP 0
54     ; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m0
55     ; OPT-NEXT: S_ENDPGM 0
56     ;
57     ; NOOPT-LABEL: name: tbuffer_store2
58     ; NOOPT: S_WAITCNT 0
59     ; NOOPT-NEXT: TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec :: (dereferenceable store (s128), align 1, addrspace 7)
60     ; NOOPT-NEXT: S_ENDPGM 0
61     TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec :: (dereferenceable store (s128), align 1, addrspace 7)
62     S_ENDPGM 0
63 ...
65 ---
66 name:            flat_store
67 body:             |
68   bb.0:
69     ; CHECK-LABEL: name: flat_store
70     ; CHECK: S_WAITCNT 0
71     ; CHECK-NEXT: FLAT_STORE_DWORDX4 $vgpr49_vgpr50, $vgpr26_vgpr27_vgpr28_vgpr29, 0, 0, implicit $exec, implicit $flat_scr
72     ; CHECK-NEXT: S_ENDPGM 0
73     FLAT_STORE_DWORDX4 $vgpr49_vgpr50, $vgpr26_vgpr27_vgpr28_vgpr29, 0, 0, implicit $exec, implicit $flat_scr
74     S_ENDPGM 0
75 ...
77 ---
78 name:            global_store
79 body:             |
80   bb.0:
81     ; OPT-LABEL: name: global_store
82     ; OPT: S_WAITCNT 0
83     ; OPT-NEXT: GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr1, 0, 4, implicit $exec
84     ; OPT-NEXT: S_WAITCNT_VSCNT undef $sgpr_null, 0
85     ; OPT-NEXT: S_NOP 0
86     ; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m0
87     ; OPT-NEXT: S_ENDPGM 0
88     ;
89     ; NOOPT-LABEL: name: global_store
90     ; NOOPT: S_WAITCNT 0
91     ; NOOPT-NEXT: GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr1, 0, 4, implicit $exec
92     ; NOOPT-NEXT: S_WAITCNT_VSCNT undef $sgpr_null, 0
93     ; NOOPT-NEXT: S_ENDPGM 0
94     GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr1, 0, 4, implicit $exec
95     S_WAITCNT_VSCNT undef $sgpr_null, 0
96     S_ENDPGM 0
97 ...
99 ---
100 name:            buffer_store_format
101 body:             |
102   bb.0:
103     ; OPT-LABEL: name: buffer_store_format
104     ; OPT: S_WAITCNT 0
105     ; OPT-NEXT: BUFFER_STORE_FORMAT_D16_X_OFFEN_exact killed renamable $vgpr0, killed renamable $vgpr1, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 0, 0, 0, implicit $exec
106     ; OPT-NEXT: S_NOP 0
107     ; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m0
108     ; OPT-NEXT: S_ENDPGM 0
109     ;
110     ; NOOPT-LABEL: name: buffer_store_format
111     ; NOOPT: S_WAITCNT 0
112     ; NOOPT-NEXT: BUFFER_STORE_FORMAT_D16_X_OFFEN_exact killed renamable $vgpr0, killed renamable $vgpr1, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 0, 0, 0, implicit $exec
113     ; NOOPT-NEXT: S_ENDPGM 0
114     BUFFER_STORE_FORMAT_D16_X_OFFEN_exact killed renamable $vgpr0, killed renamable $vgpr1, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 0, 0, 0, implicit $exec
115     S_ENDPGM 0
119 name:            ds_write_b32
120 body:             |
121   bb.0:
122     ; CHECK-LABEL: name: ds_write_b32
123     ; CHECK: renamable $vgpr0 = IMPLICIT_DEF
124     ; CHECK-NEXT: renamable $vgpr1 = IMPLICIT_DEF
125     ; CHECK-NEXT: S_WAITCNT 0
126     ; CHECK-NEXT: DS_WRITE_B32_gfx9 killed renamable $vgpr0, killed renamable $vgpr1, 12, 0, implicit $exec
127     ; CHECK-NEXT: S_ENDPGM 0
128     renamable $vgpr0 = IMPLICIT_DEF
129     renamable $vgpr1 = IMPLICIT_DEF
130     DS_WRITE_B32_gfx9 killed renamable $vgpr0, killed renamable $vgpr1, 12, 0, implicit $exec
131     S_ENDPGM 0
135 name:            global_store_dword
136 body:             |
137   bb.0:
138     liveins: $vgpr0, $sgpr0_sgpr1
140     ; OPT-LABEL: name: global_store_dword
141     ; OPT: liveins: $vgpr0, $sgpr0_sgpr1
142     ; OPT-NEXT: {{  $}}
143     ; OPT-NEXT: S_WAITCNT 0
144     ; OPT-NEXT: renamable $vgpr0 = V_MAD_I32_I24_e64 killed $vgpr1, killed $vgpr0, killed $sgpr2, 0, implicit $exec
145     ; OPT-NEXT: GLOBAL_STORE_DWORD_SADDR killed renamable $vgpr2, killed renamable $vgpr0, killed renamable $sgpr0_sgpr1, 0, 0, implicit $exec
146     ; OPT-NEXT: S_NOP 0
147     ; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m0
148     ; OPT-NEXT: S_ENDPGM 0
149     ;
150     ; NOOPT-LABEL: name: global_store_dword
151     ; NOOPT: liveins: $vgpr0, $sgpr0_sgpr1
152     ; NOOPT-NEXT: {{  $}}
153     ; NOOPT-NEXT: S_WAITCNT 0
154     ; NOOPT-NEXT: renamable $vgpr0 = V_MAD_I32_I24_e64 killed $vgpr1, killed $vgpr0, killed $sgpr2, 0, implicit $exec
155     ; NOOPT-NEXT: GLOBAL_STORE_DWORD_SADDR killed renamable $vgpr2, killed renamable $vgpr0, killed renamable $sgpr0_sgpr1, 0, 0, implicit $exec
156     ; NOOPT-NEXT: S_ENDPGM 0
157     renamable $vgpr0 = V_MAD_I32_I24_e64 killed $vgpr1, killed $vgpr0, killed $sgpr2, 0, implicit $exec
158     GLOBAL_STORE_DWORD_SADDR killed renamable $vgpr2, killed renamable $vgpr0, killed renamable $sgpr0_sgpr1, 0, 0, implicit $exec
159     S_ENDPGM 0
163 name:            multiple_basic_blocks1
164 body:             |
165   ; CHECK-LABEL: name: multiple_basic_blocks1
166   ; CHECK: bb.0:
167   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
168   ; CHECK-NEXT: {{  $}}
169   ; CHECK-NEXT:   S_WAITCNT 0
170   ; CHECK-NEXT:   renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
171   ; CHECK-NEXT:   S_BRANCH %bb.1
172   ; CHECK-NEXT: {{  $}}
173   ; CHECK-NEXT: bb.1:
174   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
175   ; CHECK-NEXT: {{  $}}
176   ; CHECK-NEXT:   S_WAITCNT 1015
177   ; CHECK-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
178   ; CHECK-NEXT:   S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc
179   ; CHECK-NEXT:   S_CBRANCH_SCC1 %bb.1, implicit killed $scc
180   ; CHECK-NEXT:   S_BRANCH %bb.2
181   ; CHECK-NEXT: {{  $}}
182   ; CHECK-NEXT: bb.2:
183   ; CHECK-NEXT:   S_ENDPGM 0
184   bb.0:
185     successors: %bb.1
187     renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
188     S_BRANCH %bb.1
190   bb.1:
191     successors: %bb.1, %bb.2
193     $vgpr1 = V_ADD_U32_e32 renamable $vgpr0, renamable $vgpr2, implicit $exec
194     S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc
195     S_CBRANCH_SCC1 %bb.1, implicit killed $scc
196     S_BRANCH %bb.2
198   bb.2:
199     S_ENDPGM 0
204 # One block has a VMEM store as the last instruction, we should release the VGPRS
207 name:            multiple_basic_blocks2
208 body:             |
209   ; OPT-LABEL: name: multiple_basic_blocks2
210   ; OPT: bb.0:
211   ; OPT-NEXT:   successors: %bb.2(0x80000000)
212   ; OPT-NEXT: {{  $}}
213   ; OPT-NEXT:   S_WAITCNT 0
214   ; OPT-NEXT:   TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
215   ; OPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
216   ; OPT-NEXT:   S_BRANCH %bb.2
217   ; OPT-NEXT: {{  $}}
218   ; OPT-NEXT: bb.1:
219   ; OPT-NEXT:   successors: %bb.2(0x80000000)
220   ; OPT-NEXT: {{  $}}
221   ; OPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
222   ; OPT-NEXT:   TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
223   ; OPT-NEXT:   S_BRANCH %bb.2
224   ; OPT-NEXT: {{  $}}
225   ; OPT-NEXT: bb.2:
226   ; OPT-NEXT:   S_NOP 0
227   ; OPT-NEXT:   S_SENDMSG 3, implicit $exec, implicit $m0
228   ; OPT-NEXT:   S_ENDPGM 0
229   ;
230   ; NOOPT-LABEL: name: multiple_basic_blocks2
231   ; NOOPT: bb.0:
232   ; NOOPT-NEXT:   successors: %bb.2(0x80000000)
233   ; NOOPT-NEXT: {{  $}}
234   ; NOOPT-NEXT:   S_WAITCNT 0
235   ; NOOPT-NEXT:   TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
236   ; NOOPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
237   ; NOOPT-NEXT:   S_BRANCH %bb.2
238   ; NOOPT-NEXT: {{  $}}
239   ; NOOPT-NEXT: bb.1:
240   ; NOOPT-NEXT:   successors: %bb.2(0x80000000)
241   ; NOOPT-NEXT: {{  $}}
242   ; NOOPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
243   ; NOOPT-NEXT:   TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
244   ; NOOPT-NEXT:   S_BRANCH %bb.2
245   ; NOOPT-NEXT: {{  $}}
246   ; NOOPT-NEXT: bb.2:
247   ; NOOPT-NEXT:   S_ENDPGM 0
248   bb.0:
249     successors: %bb.2
251     TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
252     $vgpr1 = V_ADD_U32_e32 renamable $vgpr0, renamable $vgpr2, implicit $exec
253     S_BRANCH %bb.2
255   bb.1:
256     successors: %bb.2
258     $vgpr1 = V_ADD_U32_e32 renamable $vgpr0, renamable $vgpr2, implicit $exec
259     TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
260     S_BRANCH %bb.2
262   bb.2:
263     S_ENDPGM 0
267 # One parent block has a VMEM store, release VGPRs
269 name:            multiple_basic_blocks3
270 body:             |
271   ; OPT-LABEL: name: multiple_basic_blocks3
272   ; OPT: bb.0:
273   ; OPT-NEXT:   successors: %bb.2(0x80000000)
274   ; OPT-NEXT: {{  $}}
275   ; OPT-NEXT:   S_WAITCNT 0
276   ; OPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
277   ; OPT-NEXT:   TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
278   ; OPT-NEXT:   S_BRANCH %bb.2
279   ; OPT-NEXT: {{  $}}
280   ; OPT-NEXT: bb.1:
281   ; OPT-NEXT:   successors: %bb.2(0x80000000)
282   ; OPT-NEXT: {{  $}}
283   ; OPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
284   ; OPT-NEXT:   S_BRANCH %bb.2
285   ; OPT-NEXT: {{  $}}
286   ; OPT-NEXT: bb.2:
287   ; OPT-NEXT:   successors: %bb.4(0x80000000)
288   ; OPT-NEXT: {{  $}}
289   ; OPT-NEXT:   S_BRANCH %bb.4
290   ; OPT-NEXT: {{  $}}
291   ; OPT-NEXT: bb.3:
292   ; OPT-NEXT:   successors: %bb.4(0x80000000)
293   ; OPT-NEXT: {{  $}}
294   ; OPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
295   ; OPT-NEXT:   S_BRANCH %bb.4
296   ; OPT-NEXT: {{  $}}
297   ; OPT-NEXT: bb.4:
298   ; OPT-NEXT:   S_NOP 0
299   ; OPT-NEXT:   S_SENDMSG 3, implicit $exec, implicit $m0
300   ; OPT-NEXT:   S_ENDPGM 0
301   ;
302   ; NOOPT-LABEL: name: multiple_basic_blocks3
303   ; NOOPT: bb.0:
304   ; NOOPT-NEXT:   successors: %bb.2(0x80000000)
305   ; NOOPT-NEXT: {{  $}}
306   ; NOOPT-NEXT:   S_WAITCNT 0
307   ; NOOPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
308   ; NOOPT-NEXT:   TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
309   ; NOOPT-NEXT:   S_BRANCH %bb.2
310   ; NOOPT-NEXT: {{  $}}
311   ; NOOPT-NEXT: bb.1:
312   ; NOOPT-NEXT:   successors: %bb.2(0x80000000)
313   ; NOOPT-NEXT: {{  $}}
314   ; NOOPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
315   ; NOOPT-NEXT:   S_BRANCH %bb.2
316   ; NOOPT-NEXT: {{  $}}
317   ; NOOPT-NEXT: bb.2:
318   ; NOOPT-NEXT:   successors: %bb.4(0x80000000)
319   ; NOOPT-NEXT: {{  $}}
320   ; NOOPT-NEXT:   S_BRANCH %bb.4
321   ; NOOPT-NEXT: {{  $}}
322   ; NOOPT-NEXT: bb.3:
323   ; NOOPT-NEXT:   successors: %bb.4(0x80000000)
324   ; NOOPT-NEXT: {{  $}}
325   ; NOOPT-NEXT:   $vgpr1 = V_ADD_U32_e32 $vgpr0, $vgpr2, implicit $exec
326   ; NOOPT-NEXT:   S_BRANCH %bb.4
327   ; NOOPT-NEXT: {{  $}}
328   ; NOOPT-NEXT: bb.4:
329   ; NOOPT-NEXT:   S_ENDPGM 0
330   bb.0:
331     successors: %bb.2
333     $vgpr1 = V_ADD_U32_e32 renamable $vgpr0, renamable $vgpr2, implicit $exec
334     TBUFFER_STORE_FORMAT_X_OFFSET_exact killed renamable $vgpr0, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 125, 0, 0, implicit $exec
335     S_BRANCH %bb.2
337   bb.1:
338     successors: %bb.2
340     $vgpr1 = V_ADD_U32_e32 renamable $vgpr0, renamable $vgpr2, implicit $exec
341     S_BRANCH %bb.2
343   bb.2:
344     successors: %bb.4
346     S_BRANCH %bb.4
348   bb.3:
349     successors: %bb.4
351     $vgpr1 = V_ADD_U32_e32 renamable $vgpr0, renamable $vgpr2, implicit $exec
352     S_BRANCH %bb.4
354   bb.4:
355     S_ENDPGM 0
359 name:            recursive_loop
360 body:             |
361   ; CHECK-LABEL: name: recursive_loop
362   ; CHECK: bb.0:
363   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
364   ; CHECK-NEXT: {{  $}}
365   ; CHECK-NEXT:   S_WAITCNT 0
366   ; CHECK-NEXT:   renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
367   ; CHECK-NEXT:   S_BRANCH %bb.1
368   ; CHECK-NEXT: {{  $}}
369   ; CHECK-NEXT: bb.1:
370   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
371   ; CHECK-NEXT: {{  $}}
372   ; CHECK-NEXT:   S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc
373   ; CHECK-NEXT:   S_CBRANCH_SCC1 %bb.1, implicit killed $scc
374   ; CHECK-NEXT:   S_BRANCH %bb.2
375   ; CHECK-NEXT: {{  $}}
376   ; CHECK-NEXT: bb.2:
377   ; CHECK-NEXT:   S_ENDPGM 0
378   bb.0:
379     successors: %bb.1
381     renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
382     S_BRANCH %bb.1
384   bb.1:
385     successors: %bb.1, %bb.2
387     S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc
388     S_CBRANCH_SCC1 %bb.1, implicit killed $scc
389     S_BRANCH %bb.2
391   bb.2:
392     S_ENDPGM 0
396 name:            recursive_loop_vmem
397 body:             |
398   ; OPT-LABEL: name: recursive_loop_vmem
399   ; OPT: bb.0:
400   ; OPT-NEXT:   successors: %bb.1(0x80000000)
401   ; OPT-NEXT: {{  $}}
402   ; OPT-NEXT:   S_WAITCNT 0
403   ; OPT-NEXT:   renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
404   ; OPT-NEXT:   S_BRANCH %bb.1
405   ; OPT-NEXT: {{  $}}
406   ; OPT-NEXT: bb.1:
407   ; OPT-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
408   ; OPT-NEXT: {{  $}}
409   ; OPT-NEXT:   S_WAITCNT 1015
410   ; OPT-NEXT:   TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec
411   ; OPT-NEXT:   S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc
412   ; OPT-NEXT:   S_CBRANCH_SCC1 %bb.1, implicit killed $scc
413   ; OPT-NEXT:   S_BRANCH %bb.2
414   ; OPT-NEXT: {{  $}}
415   ; OPT-NEXT: bb.2:
416   ; OPT-NEXT:   S_NOP 0
417   ; OPT-NEXT:   S_SENDMSG 3, implicit $exec, implicit $m0
418   ; OPT-NEXT:   S_ENDPGM 0
419   ;
420   ; NOOPT-LABEL: name: recursive_loop_vmem
421   ; NOOPT: bb.0:
422   ; NOOPT-NEXT:   successors: %bb.1(0x80000000)
423   ; NOOPT-NEXT: {{  $}}
424   ; NOOPT-NEXT:   S_WAITCNT 0
425   ; NOOPT-NEXT:   renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
426   ; NOOPT-NEXT:   S_BRANCH %bb.1
427   ; NOOPT-NEXT: {{  $}}
428   ; NOOPT-NEXT: bb.1:
429   ; NOOPT-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
430   ; NOOPT-NEXT: {{  $}}
431   ; NOOPT-NEXT:   S_WAITCNT 1015
432   ; NOOPT-NEXT:   TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec
433   ; NOOPT-NEXT:   S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc
434   ; NOOPT-NEXT:   S_CBRANCH_SCC1 %bb.1, implicit killed $scc
435   ; NOOPT-NEXT:   S_BRANCH %bb.2
436   ; NOOPT-NEXT: {{  $}}
437   ; NOOPT-NEXT: bb.2:
438   ; NOOPT-NEXT:   S_ENDPGM 0
439   bb.0:
440     successors: %bb.1
442     renamable $vgpr0 = BUFFER_LOAD_FORMAT_X_IDXEN killed renamable $vgpr0, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec
443     S_BRANCH %bb.1
445   bb.1:
446     successors: %bb.1, %bb.2
448     TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 115, 0, 0, implicit $exec
449     S_CMP_LG_U32 killed renamable $sgpr3, renamable $sgpr4, implicit-def $scc
450     S_CBRANCH_SCC1 %bb.1, implicit killed $scc
451     S_BRANCH %bb.2
453   bb.2:
454     S_ENDPGM 0
458 name:            image_store
459 body:             |
460   bb.0:
461     ; OPT-LABEL: name: image_store
462     ; OPT: S_WAITCNT 0
463     ; OPT-NEXT: IMAGE_STORE_V2_V1_gfx11 killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 12, 0, 1, 0, 0, -1, 0, 0, 0, implicit $exec :: (dereferenceable store (<2 x s32>), addrspace 7)
464     ; OPT-NEXT: S_NOP 0
465     ; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m0
466     ; OPT-NEXT: S_ENDPGM 0
467     ;
468     ; NOOPT-LABEL: name: image_store
469     ; NOOPT: S_WAITCNT 0
470     ; NOOPT-NEXT: IMAGE_STORE_V2_V1_gfx11 killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 12, 0, 1, 0, 0, -1, 0, 0, 0, implicit $exec :: (dereferenceable store (<2 x s32>), addrspace 7)
471     ; NOOPT-NEXT: S_ENDPGM 0
472   IMAGE_STORE_V2_V1_gfx11 killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 12, 0, 1, 0, 0, -1, 0, 0, 0, implicit $exec :: (dereferenceable store (<2 x s32>), addrspace 7)
473   S_ENDPGM 0
477 name:            scratch_store
478 body:             |
479   bb.0:
480     ; CHECK-LABEL: name: scratch_store
481     ; CHECK: S_WAITCNT 0
482     ; CHECK-NEXT: renamable $sgpr0 = S_AND_B32 killed renamable $sgpr0, -16, implicit-def dead $scc
483     ; CHECK-NEXT: SCRATCH_STORE_DWORD_SADDR killed renamable $vgpr0, killed renamable $sgpr0, 0, 0, implicit $exec, implicit $flat_scr
484     ; CHECK-NEXT: S_ENDPGM 0
485     renamable $sgpr0 = S_AND_B32 killed renamable $sgpr0, -16, implicit-def dead $scc
486     SCRATCH_STORE_DWORD_SADDR killed renamable $vgpr0, killed renamable $sgpr0, 0, 0, implicit $exec, implicit $flat_scr
487     S_ENDPGM 0
491 name:            buffer_atomic
492 body:             |
493   bb.0:
494     ; OPT-LABEL: name: buffer_atomic
495     ; OPT: S_WAITCNT 0
496     ; OPT-NEXT: BUFFER_ATOMIC_ADD_F32_OFFEN killed renamable $vgpr0, killed renamable $vgpr2, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, implicit $exec :: (volatile dereferenceable load store (s64), align 1, addrspace 7)
497     ; OPT-NEXT: S_NOP 0
498     ; OPT-NEXT: S_SENDMSG 3, implicit $exec, implicit $m0
499     ; OPT-NEXT: S_ENDPGM 0
500     ;
501     ; NOOPT-LABEL: name: buffer_atomic
502     ; NOOPT: S_WAITCNT 0
503     ; NOOPT-NEXT: BUFFER_ATOMIC_ADD_F32_OFFEN killed renamable $vgpr0, killed renamable $vgpr2, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, implicit $exec :: (volatile dereferenceable load store (s64), align 1, addrspace 7)
504     ; NOOPT-NEXT: S_ENDPGM 0
505     BUFFER_ATOMIC_ADD_F32_OFFEN killed renamable $vgpr0, killed renamable $vgpr2, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, implicit $exec :: (volatile dereferenceable load store (s64), align 1, addrspace 7)
506     S_ENDPGM 0
510 name:            flat_atomic
511 body:             |
512   bb.0:
513     ; CHECK-LABEL: name: flat_atomic
514     ; CHECK: S_WAITCNT 0
515     ; CHECK-NEXT: renamable $vgpr0_vgpr1 = FLAT_ATOMIC_DEC_X2_RTN killed renamable $vgpr0_vgpr1, killed renamable $vgpr2_vgpr3, 40, 1, implicit $exec, implicit $flat_scr
516     ; CHECK-NEXT: S_ENDPGM 0
517     renamable $vgpr0_vgpr1 = FLAT_ATOMIC_DEC_X2_RTN killed renamable $vgpr0_vgpr1, killed renamable $vgpr2_vgpr3, 40, 1, implicit $exec, implicit $flat_scr
518     S_ENDPGM 0
523 name:            global_atomic
524 body:             |
525   bb.0:
526     ; CHECK-LABEL: name: global_atomic
527     ; CHECK: S_WAITCNT 0
528     ; CHECK-NEXT: renamable $vgpr0_vgpr1 = GLOBAL_ATOMIC_INC_X2_SADDR_RTN killed renamable $vgpr0, killed renamable $vgpr1_vgpr2, killed renamable $sgpr0_sgpr1, 40, 1, implicit $exec
529     ; CHECK-NEXT: S_ENDPGM 0
530     renamable $vgpr0_vgpr1 = GLOBAL_ATOMIC_INC_X2_SADDR_RTN killed renamable $vgpr0, killed renamable $vgpr1_vgpr2, killed renamable $sgpr0_sgpr1, 40, 1, implicit $exec
531     S_ENDPGM 0
535 name:            image_atomic
536 body:             |
537   bb.0:
538     ; CHECK-LABEL: name: image_atomic
539     ; CHECK: S_WAITCNT 0
540     ; CHECK-NEXT: renamable $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_ATOMIC_CMPSWAP_V2_V1_gfx11 killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 15, 0, 1, 1, 0, 0, 0, 0, implicit $exec :: (volatile dereferenceable load store (s64), addrspace 7)
541     ; CHECK-NEXT: S_ENDPGM 0
542     renamable $vgpr0_vgpr1_vgpr2_vgpr3 = IMAGE_ATOMIC_CMPSWAP_V2_V1_gfx11 killed renamable $vgpr0_vgpr1_vgpr2_vgpr3, killed renamable $vgpr4, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 15, 0, 1, 1, 0, 0, 0, 0, implicit $exec :: (volatile dereferenceable load store (s64), addrspace 7)
543     S_ENDPGM 0
547 name:            global_store_optnone
548 body:             |
549   bb.0:
550     ; CHECK-LABEL: name: global_store_optnone
551     ; CHECK: S_WAITCNT 0
552     ; CHECK-NEXT: GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr1, 0, 4, implicit $exec
553     ; CHECK-NEXT: S_WAITCNT_VSCNT undef $sgpr_null, 0
554     ; CHECK-NEXT: S_ENDPGM 0
555     GLOBAL_STORE_DWORD undef renamable $vgpr0_vgpr1, killed renamable $vgpr1, 0, 4, implicit $exec
556     S_WAITCNT_VSCNT undef $sgpr_null, 0
557     S_ENDPGM 0