xref: /llvm-project/llvm/test/CodeGen/AMDGPU/required-export-priority.mir (revision 939a6624ac95e68a4dca4ba3ef8a9dfe26182522)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
2# RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -run-pass=post-RA-hazard-rec %s -o - | FileCheck -check-prefixes=GFX1150 %s
3# RUN: llc -mtriple=amdgcn -mcpu=gfx11-generic -run-pass=post-RA-hazard-rec %s -o - | FileCheck -check-prefixes=GFX1150 %s
4
5--- |
6  define amdgpu_ps void @end_of_shader() {
7    ret void
8  }
9  define amdgpu_ps void @end_of_shader_return_to_epilogue() {
10    ret void
11  }
12  define amdgpu_ps void @end_of_block() {
13    ret void
14  }
15  define amdgpu_ps void @start_of_block() {
16    ret void
17  }
18  define amdgpu_ps void @block_of_exports() {
19    ret void
20  }
21  define amdgpu_ps void @sparse_exports() {
22    ret void
23  }
24  define amdgpu_ps void @existing_setprio_1() {
25    ret void
26  }
27  define amdgpu_ps void @existing_setprio_2() {
28    ret void
29  }
30...
31
32---
33name: end_of_shader
34tracksRegLiveness: true
35liveins:
36  - { reg: '$vgpr0' }
37body: |
38  bb.0:
39    liveins: $vgpr0
40    ; GFX1150-LABEL: name: end_of_shader
41    ; GFX1150: liveins: $vgpr0
42    ; GFX1150-NEXT: {{  $}}
43    ; GFX1150-NEXT: S_SETPRIO 2
44    ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
45    ; GFX1150-NEXT: S_SETPRIO 0
46    ; GFX1150-NEXT: S_NOP 0
47    ; GFX1150-NEXT: S_NOP 0
48    ; GFX1150-NEXT: S_ENDPGM 0
49    EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
50    S_ENDPGM 0
51...
52
53---
54name: end_of_shader_return_to_epilogue
55tracksRegLiveness: true
56liveins:
57  - { reg: '$vgpr0' }
58body: |
59  bb.0:
60    liveins: $vgpr0
61    ; GFX1150-LABEL: name: end_of_shader_return_to_epilogue
62    ; GFX1150: liveins: $vgpr0
63    ; GFX1150-NEXT: {{  $}}
64    ; GFX1150-NEXT: S_SETPRIO 2
65    ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
66    ; GFX1150-NEXT: S_SETPRIO 0
67    ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0
68    ; GFX1150-NEXT: S_NOP 0
69    ; GFX1150-NEXT: S_NOP 0
70    ; GFX1150-NEXT: S_SETPRIO 2
71    ; GFX1150-NEXT: SI_RETURN_TO_EPILOG $vgpr0
72    EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
73    SI_RETURN_TO_EPILOG $vgpr0
74...
75
76---
77name: end_of_block
78tracksRegLiveness: true
79liveins:
80  - { reg: '$vgpr0' }
81body: |
82  ; GFX1150-LABEL: name: end_of_block
83  ; GFX1150: bb.0:
84  ; GFX1150-NEXT:   successors: %bb.1(0x80000000)
85  ; GFX1150-NEXT:   liveins: $vgpr0
86  ; GFX1150-NEXT: {{  $}}
87  ; GFX1150-NEXT:   S_SETPRIO 2
88  ; GFX1150-NEXT:   EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
89  ; GFX1150-NEXT:   S_SETPRIO 0
90  ; GFX1150-NEXT:   S_WAITCNT_EXPCNT $sgpr_null, 0
91  ; GFX1150-NEXT:   S_NOP 0
92  ; GFX1150-NEXT:   S_NOP 0
93  ; GFX1150-NEXT:   S_SETPRIO 2
94  ; GFX1150-NEXT: {{  $}}
95  ; GFX1150-NEXT: bb.1:
96  ; GFX1150-NEXT:   S_ENDPGM 0
97  bb.0:
98    liveins: $vgpr0
99    EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
100
101  bb.1:
102    S_ENDPGM 0
103...
104
105---
106name: start_of_block
107tracksRegLiveness: true
108liveins:
109  - { reg: '$vgpr0' }
110body: |
111  ; GFX1150-LABEL: name: start_of_block
112  ; GFX1150: bb.0:
113  ; GFX1150-NEXT:   successors: %bb.1(0x80000000)
114  ; GFX1150-NEXT:   liveins: $vgpr0
115  ; GFX1150-NEXT: {{  $}}
116  ; GFX1150-NEXT:   S_SETPRIO 2
117  ; GFX1150-NEXT: {{  $}}
118  ; GFX1150-NEXT: bb.1:
119  ; GFX1150-NEXT:   successors: %bb.2(0x80000000)
120  ; GFX1150-NEXT:   liveins: $vgpr0
121  ; GFX1150-NEXT: {{  $}}
122  ; GFX1150-NEXT:   EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
123  ; GFX1150-NEXT:   S_SETPRIO 0
124  ; GFX1150-NEXT:   S_WAITCNT_EXPCNT $sgpr_null, 0
125  ; GFX1150-NEXT:   S_NOP 0
126  ; GFX1150-NEXT:   S_NOP 0
127  ; GFX1150-NEXT:   S_SETPRIO 2
128  ; GFX1150-NEXT: {{  $}}
129  ; GFX1150-NEXT: bb.2:
130  ; GFX1150-NEXT:   S_ENDPGM 0
131  bb.0:
132    liveins: $vgpr0
133
134  bb.1:
135    liveins: $vgpr0
136    EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
137
138  bb.2:
139    S_ENDPGM 0
140...
141
142---
143name: block_of_exports
144tracksRegLiveness: true
145liveins:
146  - { reg: '$vgpr0' }
147body: |
148  bb.0:
149    liveins: $vgpr0
150    ; GFX1150-LABEL: name: block_of_exports
151    ; GFX1150: liveins: $vgpr0
152    ; GFX1150-NEXT: {{  $}}
153    ; GFX1150-NEXT: S_SETPRIO 2
154    ; GFX1150-NEXT: EXP 2, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
155    ; GFX1150-NEXT: EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
156    ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
157    ; GFX1150-NEXT: S_SETPRIO 0
158    ; GFX1150-NEXT: S_NOP 0
159    ; GFX1150-NEXT: S_NOP 0
160    ; GFX1150-NEXT: S_ENDPGM 0
161    EXP 2, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
162    EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
163    EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
164    S_ENDPGM 0
165...
166
167---
168name: sparse_exports
169tracksRegLiveness: true
170liveins:
171  - { reg: '$vgpr0' }
172body: |
173  bb.0:
174    liveins: $vgpr0
175    ; GFX1150-LABEL: name: sparse_exports
176    ; GFX1150: liveins: $vgpr0
177    ; GFX1150-NEXT: {{  $}}
178    ; GFX1150-NEXT: S_SETPRIO 2
179    ; GFX1150-NEXT: EXP 2, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
180    ; GFX1150-NEXT: S_SETPRIO 0
181    ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0
182    ; GFX1150-NEXT: S_NOP 0
183    ; GFX1150-NEXT: S_NOP 0
184    ; GFX1150-NEXT: S_SETPRIO 2
185    ; GFX1150-NEXT: $vgpr0 = V_AND_B32_e32 1, $vgpr0, implicit $exec
186    ; GFX1150-NEXT: EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
187    ; GFX1150-NEXT: S_SETPRIO 0
188    ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0
189    ; GFX1150-NEXT: S_NOP 0
190    ; GFX1150-NEXT: S_NOP 0
191    ; GFX1150-NEXT: S_SETPRIO 2
192    ; GFX1150-NEXT: $vgpr0 = V_OR_B32_e32 2, $vgpr0, implicit $exec
193    ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
194    ; GFX1150-NEXT: S_SETPRIO 0
195    ; GFX1150-NEXT: S_NOP 0
196    ; GFX1150-NEXT: S_NOP 0
197    ; GFX1150-NEXT: S_ENDPGM 0
198    EXP 2, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
199    $vgpr0 = V_AND_B32_e32 1, $vgpr0, implicit $exec
200    EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
201    $vgpr0 = V_OR_B32_e32 2, $vgpr0, implicit $exec
202    EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
203    S_ENDPGM 0
204...
205
206---
207name: existing_setprio_1
208tracksRegLiveness: true
209liveins:
210  - { reg: '$vgpr0' }
211body: |
212  ; GFX1150-LABEL: name: existing_setprio_1
213  ; GFX1150: bb.0:
214  ; GFX1150-NEXT:   successors: %bb.1(0x80000000)
215  ; GFX1150-NEXT:   liveins: $vgpr0
216  ; GFX1150-NEXT: {{  $}}
217  ; GFX1150-NEXT:   S_SETPRIO 2
218  ; GFX1150-NEXT:   $vgpr0 = V_AND_B32_e32 1, $vgpr0, implicit $exec
219  ; GFX1150-NEXT: {{  $}}
220  ; GFX1150-NEXT: bb.1:
221  ; GFX1150-NEXT:   successors: %bb.2(0x80000000)
222  ; GFX1150-NEXT:   liveins: $vgpr0
223  ; GFX1150-NEXT: {{  $}}
224  ; GFX1150-NEXT:   S_SETPRIO 3
225  ; GFX1150-NEXT:   $vgpr0 = V_OR_B32_e32 2, $vgpr0, implicit $exec
226  ; GFX1150-NEXT:   S_SETPRIO 2
227  ; GFX1150-NEXT: {{  $}}
228  ; GFX1150-NEXT: bb.2:
229  ; GFX1150-NEXT:   successors: %bb.3(0x80000000)
230  ; GFX1150-NEXT:   liveins: $vgpr0
231  ; GFX1150-NEXT: {{  $}}
232  ; GFX1150-NEXT:   S_SETPRIO 3
233  ; GFX1150-NEXT:   $vgpr0 = V_OR_B32_e32 3, $vgpr0, implicit $exec
234  ; GFX1150-NEXT:   S_SETPRIO 2
235  ; GFX1150-NEXT: {{  $}}
236  ; GFX1150-NEXT: bb.3:
237  ; GFX1150-NEXT:   liveins: $vgpr0
238  ; GFX1150-NEXT: {{  $}}
239  ; GFX1150-NEXT:   EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
240  ; GFX1150-NEXT:   EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
241  ; GFX1150-NEXT:   S_SETPRIO 0
242  ; GFX1150-NEXT:   S_NOP 0
243  ; GFX1150-NEXT:   S_NOP 0
244  ; GFX1150-NEXT:   S_ENDPGM 0
245  bb.0:
246    liveins: $vgpr0
247    $vgpr0 = V_AND_B32_e32 1, $vgpr0, implicit $exec
248
249  bb.1:
250    liveins: $vgpr0
251    S_SETPRIO 3
252    $vgpr0 = V_OR_B32_e32 2, $vgpr0, implicit $exec
253    S_SETPRIO 0
254
255  bb.2:
256    liveins: $vgpr0
257    S_SETPRIO 1
258    $vgpr0 = V_OR_B32_e32 3, $vgpr0, implicit $exec
259    S_SETPRIO 0
260
261  bb.3:
262    liveins: $vgpr0
263    EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
264    EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
265    S_ENDPGM 0
266...
267
268---
269name: existing_setprio_2
270tracksRegLiveness: true
271liveins:
272  - { reg: '$vgpr0' }
273body: |
274  bb.0:
275    liveins: $vgpr0
276    ; GFX1150-LABEL: name: existing_setprio_2
277    ; GFX1150: liveins: $vgpr0
278    ; GFX1150-NEXT: {{  $}}
279    ; GFX1150-NEXT: S_SETPRIO 3
280    ; GFX1150-NEXT: EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
281    ; GFX1150-NEXT: EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
282    ; GFX1150-NEXT: S_SETPRIO 0
283    ; GFX1150-NEXT: S_WAITCNT_EXPCNT $sgpr_null, 0
284    ; GFX1150-NEXT: S_NOP 0
285    ; GFX1150-NEXT: S_NOP 0
286    ; GFX1150-NEXT: S_SETPRIO 2
287    ; GFX1150-NEXT: S_SETPRIO 3
288    ; GFX1150-NEXT: S_ENDPGM 0
289    S_SETPRIO 3
290    EXP 1, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
291    EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
292    S_SETPRIO 3
293    S_ENDPGM 0
294...
295