[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / waitcnt-preexisting.mir
blobada517ea78b344a5cb7947afc0c4db26cd2d3348
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=gfx908 -verify-machineinstrs -run-pass si-insert-waitcnts -o - %s | FileCheck -check-prefixes=GFX9 %s
4 ---
5 name:            test_waitcnt_preexisting_lgkmcnt_unmodified
6 body:             |
7   bb.0:
8     liveins: $vgpr0
10     ; GFX9-LABEL: name: test_waitcnt_preexisting_lgkmcnt_unmodified
11     ; GFX9: S_WAITCNT 0
12     ; GFX9: $vgpr0_vgpr1 = DS_READ2_B32 $vgpr0, 0, 1, 0, implicit $m0, implicit $exec
13     ; GFX9: S_WAITCNT 49279
14     ; GFX9: $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
15     ; GFX9: S_WAITCNT 112
16     ; GFX9: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
17     ; GFX9: S_ENDPGM 0
18     $vgpr0_vgpr1 = DS_READ2_B32 $vgpr0, 0, 1, 0, implicit $m0, implicit $exec
19     S_WAITCNT 49279
20     $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
21     FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
22     S_ENDPGM 0
23 ...
25 ---
26 name:            test_waitcnt_preexisting_vmcnt_unmodified
27 body:             |
28   bb.0:
29     liveins: $vgpr0_vgpr1
31     ; GFX9-LABEL: name: test_waitcnt_preexisting_vmcnt_unmodified
32     ; GFX9: S_WAITCNT 0
33     ; GFX9: $vgpr0_vgpr1 = GLOBAL_LOAD_DWORDX2 $vgpr0_vgpr1, 0, 0, implicit $exec
34     ; GFX9: S_WAITCNT 3952
35     ; GFX9: $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
36     ; GFX9: S_WAITCNT 112
37     ; GFX9: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
38     ; GFX9: S_ENDPGM 0
39     $vgpr0_vgpr1 = GLOBAL_LOAD_DWORDX2 $vgpr0_vgpr1, 0, 0, implicit $exec
40     S_WAITCNT 3952
41     $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
42     FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
43     S_ENDPGM 0
44 ...
46 # Respect preexisting waitcnt and add required wait.
48 ---
49 name:            test_waitcnt_preexisting_vmcnt_needs_lgkmcnt
50 body:             |
51   bb.0:
52     liveins: $vgpr0
54     ; GFX9-LABEL: name: test_waitcnt_preexisting_vmcnt_needs_lgkmcnt
55     ; GFX9: S_WAITCNT 0
56     ; GFX9: $vgpr0_vgpr1 = DS_READ2_B32 $vgpr0, 0, 1, 0, implicit $m0, implicit $exec
57     ; GFX9: S_WAITCNT 112
58     ; GFX9: $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
59     ; GFX9: S_WAITCNT 112
60     ; GFX9: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
61     ; GFX9: S_ENDPGM 0
62     $vgpr0_vgpr1 = DS_READ2_B32 $vgpr0, 0, 1, 0, implicit $m0, implicit $exec
63     S_WAITCNT 3952
64     $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
65     FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
66     S_ENDPGM 0
67 ...
69 ---
70 name:            test_waitcnt_preexisting_lgkmcnt_needs_vmcnt
71 body:             |
72   bb.0:
73     liveins: $vgpr0_vgpr1
75     ; GFX9-LABEL: name: test_waitcnt_preexisting_lgkmcnt_needs_vmcnt
76     ; GFX9: S_WAITCNT 0
77     ; GFX9: $vgpr0_vgpr1 = GLOBAL_LOAD_DWORDX2 $vgpr0_vgpr1, 0, 0, implicit $exec
78     ; GFX9: S_WAITCNT 112
79     ; GFX9: $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
80     ; GFX9: S_WAITCNT 112
81     ; GFX9: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
82     ; GFX9: S_ENDPGM 0
83     $vgpr0_vgpr1 = GLOBAL_LOAD_DWORDX2 $vgpr0_vgpr1, 0, 0, implicit $exec
84     S_WAITCNT 49279
85     $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
86     FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
87     S_ENDPGM 0
88 ...
90 # Apply wait for all counters from preexisting waitcnt regardless of the wait
91 # required by the next instruction.
93 ---
94 name:            test_waitcnt_preexisting_apply_all_counters
95 body:             |
96   bb.0:
97     liveins: $vgpr0_vgpr1, $vgpr2
99     ; GFX9-LABEL: name: test_waitcnt_preexisting_apply_all_counters
100     ; GFX9: S_WAITCNT 0
101     ; GFX9: $vgpr4_vgpr5 = GLOBAL_LOAD_DWORDX2 $vgpr0_vgpr1, 0, 0, implicit $exec
102     ; GFX9: $vgpr6_vgpr7 = DS_READ2_B32 $vgpr2, 0, 1, 0, implicit $m0, implicit $exec
103     ; GFX9: S_WAITCNT 0
104     ; GFX9: $vgpr6 = V_OR_B32_e32 1, killed $vgpr6, implicit $exec
105     ; GFX9: $vgpr0 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, implicit $exec, implicit $flat_scr
106     ; GFX9: S_WAITCNT 112
107     ; GFX9: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
108     $vgpr4_vgpr5 = GLOBAL_LOAD_DWORDX2 $vgpr0_vgpr1, 0, 0, implicit $exec
109     $vgpr6_vgpr7 = DS_READ2_B32 $vgpr2, 0, 1, 0, implicit $m0, implicit $exec
110     S_WAITCNT 0
111     $vgpr6 = V_OR_B32_e32 1, killed $vgpr6, implicit $exec
112     $vgpr0 = FLAT_LOAD_DWORD $vgpr4_vgpr5, 0, 0, implicit $exec, implicit $flat_scr
113     FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
117 name:            test_waitcnt_preexisting_combine_waitcnt
118 body:             |
119   bb.0:
120     liveins: $vgpr0_vgpr1
122     ; GFX9-LABEL: name: test_waitcnt_preexisting_combine_waitcnt
123     ; GFX9: S_WAITCNT 0
124     ; GFX9: $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
125     ; GFX9: S_WAITCNT 0
126     ; GFX9: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
127     $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
128     S_WAITCNT 0
129     S_WAITCNT 0
130     S_WAITCNT 0
131     S_WAITCNT 0
132     S_WAITCNT 0
133     S_WAITCNT 0
134     FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
138 name:            test_waitcnt_preexisting_combine_waitcnt_diff_counters
139 body:             |
140   bb.0:
141     liveins: $vgpr0_vgpr1
143     ; GFX9-LABEL: name: test_waitcnt_preexisting_combine_waitcnt_diff_counters
144     ; GFX9: S_WAITCNT 0
145     ; GFX9: $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
146     ; GFX9: S_WAITCNT 112
147     ; GFX9: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
148     $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
149     S_WAITCNT 49279
150     S_WAITCNT 3952
151     FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
154 # Apply preexisting waitcnt when no wait is immediately needed.
155 # FIXME: Move waitcnt as late as possible.
158 name:            test_waitcnt_preexisting_early_wait
159 body:             |
160   bb.0:
161     liveins: $vgpr0_vgpr1
163     ; GFX9-LABEL: name: test_waitcnt_preexisting_early_wait
164     ; GFX9: S_WAITCNT 0
165     ; GFX9: $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
166     ; GFX9: S_WAITCNT 0
167     ; GFX9: S_NOP 0
168     ; GFX9: S_NOP 0
169     ; GFX9: S_NOP 0
170     ; GFX9: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
171     ; GFX9: S_ENDPGM 0
172     $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
173     S_WAITCNT 0
174     S_NOP 0
175     S_NOP 0
176     S_NOP 0
177     FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
178     S_ENDPGM 0
182 name:            test_waitcnt_preexisting_ignore_kill
183 body:             |
184   bb.0:
185     liveins: $vgpr0_vgpr1
187     ; GFX9-LABEL: name: test_waitcnt_preexisting_ignore_kill
188     ; GFX9: S_WAITCNT 0
189     ; GFX9: $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
190     ; GFX9: S_WAITCNT 3952
191     ; GFX9: KILL $vgpr0
192     $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
193     S_WAITCNT 3952
194     KILL $vgpr0
197 # Combine preexisting waitcnt with wait added to the start of a non-entry function.
200 name:            test_waitcnt_preexisting_func_start
201 body:             |
202   bb.0:
203     ; GFX9-LABEL: name: test_waitcnt_preexisting_func_start
204     ; GFX9: S_WAITCNT 0
205     ; GFX9-NOT: S_WAITCNT 0
206     ; GFX9: S_ENDPGM 0
207     S_WAITCNT 0
208     S_ENDPGM 0
211 # Verify that extra waitcnt are not added after buffer invalidate instructions.
214 name:            test_waitcnt_preexisting_buffer_inv
215 body:             |
216   bb.0:
217     ; GFX9-LABEL: name: test_waitcnt_preexisting_buffer_inv
218     ; GFX9: S_WAITCNT 0
219     ; GFX9: $vgpr0_vgpr1 = GLOBAL_LOAD_DWORDX2 $vgpr0_vgpr1, 0, 0, implicit $exec
220     ; GFX9: S_WAITCNT 3952
221     ; GFX9: BUFFER_INVL2 implicit $exec
222     ; GFX9: BUFFER_WBINVL1_VOL implicit $exec
223     ; GFX9: $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
224     ; GFX9: S_WAITCNT 112
225     ; GFX9: FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
226     ; GFX9: S_ENDPGM 0
227     $vgpr0_vgpr1 = GLOBAL_LOAD_DWORDX2 $vgpr0_vgpr1, 0, 0, implicit $exec
228     S_WAITCNT 3952
229     BUFFER_INVL2 implicit $exec
230     BUFFER_WBINVL1_VOL implicit $exec
231     $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr
232     FLAT_STORE_DWORD $vgpr0_vgpr1, $vgpr0, 0, 0, implicit $exec, implicit $flat_scr
233     S_ENDPGM 0