[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / early-term.mir
blob42814944bde266ec47e14d5ecb143f258a203367
1 # RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=si-late-branch-lowering -verify-machineinstrs  %s -o - | FileCheck -check-prefixes=GCN,GFX9 %s
2 # RUN: llc -march=amdgcn -mcpu=gfx1010 -mattr=-wavefrontsize32,+wavefrontsize64 -run-pass=si-late-branch-lowering -verify-machineinstrs  %s -o - | FileCheck -check-prefixes=GCN,GFX10 %s
3 # RUN: llc -march=amdgcn -mcpu=gfx1100 -mattr=-wavefrontsize32,+wavefrontsize64 -run-pass=si-late-branch-lowering -verify-machineinstrs  %s -o - | FileCheck -check-prefixes=GCN,GFX11 %s
5 --- |
6   define amdgpu_ps void @early_term_scc0_end_block() {
7     ret void
8   }
10   define amdgpu_ps void @early_term_scc0_next_terminator() {
11     ret void
12   }
14   define amdgpu_ps void @early_term_scc0_in_block() {
15     ret void
16   }
18   define amdgpu_gs void @early_term_scc0_gs() {
19     ret void
20   }
22   define amdgpu_cs void @early_term_scc0_cs() {
23     ret void
24   }
26   define amdgpu_ps void @early_term_no_export() #0 {
27     ret void
28   }
30   define amdgpu_ps void @early_term_depth_only() #1 {
31     ret void
32   }
34   attributes #0 = { "amdgpu-color-export"="0" "amdgpu-depth-export"="0" }
35   attributes #1 = { "amdgpu-color-export"="0" "amdgpu-depth-export"="1" }
36 ...
38 ---
39 name: early_term_scc0_end_block
40 tracksRegLiveness: true
41 liveins:
42   - { reg: '$sgpr0' }
43   - { reg: '$sgpr1' }
44 body: |
45   ; GCN-LABEL: name: early_term_scc0_end_block
46   ; GCN: bb.0:
47   ; GCN:   successors: %bb.1(0x80000000), %bb.2(0x00000000)
48   ; GCN:   liveins: $sgpr0, $sgpr1
49   ; GCN:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
50   ; GCN:   dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
51   ; GCN:   S_CBRANCH_SCC0 %bb.2, implicit $scc
52   ; GCN: bb.1:
53   ; GCN:   liveins: $vgpr0
54   ; GCN:   EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
55   ; GCN:   S_ENDPGM 0
56   ; GCN: bb.2:
57   ; GCN:   $exec = S_MOV_B64 0
58   ; GFX9:  EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
59   ; GFX10: EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
60   ; GFX11: EXP_DONE 0, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
61   ; GCN:   S_ENDPGM 0
62   bb.0:
63     liveins: $sgpr0, $sgpr1
64     successors: %bb.1
66     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
67     dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
68     SI_EARLY_TERMINATE_SCC0 implicit $scc, implicit $exec
70   bb.1:
71     liveins: $vgpr0
72     EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
73     S_ENDPGM 0
74 ...
76 ---
77 name: early_term_scc0_next_terminator
78 tracksRegLiveness: true
79 liveins:
80   - { reg: '$sgpr0' }
81   - { reg: '$sgpr1' }
82 body: |
83   ; GCN-LABEL: name: early_term_scc0_next_terminator
84   ; GCN: bb.0:
85   ; GCN:   successors: %bb.2(0x80000000), %bb.3(0x00000000)
86   ; GCN:   liveins: $sgpr0, $sgpr1
87   ; GCN:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
88   ; GCN:   dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
89   ; GCN:   S_CBRANCH_SCC0 %bb.3, implicit $scc
90   ; GCN:   S_BRANCH %bb.2
91   ; GCN: bb.1:
92   ; GCN:   successors: %bb.2(0x80000000)
93   ; GCN:   $vgpr0 = V_MOV_B32_e32 1, implicit $exec
94   ; GCN: bb.2:
95   ; GCN:   liveins: $vgpr0
96   ; GCN:   EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
97   ; GCN:   S_ENDPGM 0
98   ; GCN: bb.3:
99   ; GCN:   $exec = S_MOV_B64 0
100   ; GFX9:  EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
101   ; GFX10: EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
102   ; GFX11: EXP_DONE 0, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
103   ; GCN:   S_ENDPGM 0
104   bb.0:
105     liveins: $sgpr0, $sgpr1
106     successors: %bb.2
108     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
109     dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
110     SI_EARLY_TERMINATE_SCC0 implicit $scc, implicit $exec
111     S_BRANCH %bb.2
113   bb.1:
114     successors: %bb.2
115     $vgpr0 = V_MOV_B32_e32 1, implicit $exec
116     S_BRANCH %bb.2
118   bb.2:
119     liveins: $vgpr0
120     EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
121     S_ENDPGM 0
125 name: early_term_scc0_in_block
126 tracksRegLiveness: true
127 liveins:
128   - { reg: '$sgpr0' }
129   - { reg: '$sgpr1' }
130 body: |
131   ; GCN-LABEL: name: early_term_scc0_in_block
132   ; GCN: bb.0:
133   ; GCN:   successors: %bb.3(0x40000000), %bb.2(0x40000000)
134   ; GCN:   liveins: $sgpr0, $sgpr1
135   ; GCN:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
136   ; GCN:   dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
137   ; GCN:   S_CBRANCH_SCC0 %bb.2, implicit $scc
138   ; GCN: bb.3:
139   ; GCN:   successors: %bb.1(0x80000000)
140   ; GCN:   liveins: $vgpr0, $scc
141   ; GCN:   $vgpr1 = V_MOV_B32_e32 1, implicit $exec
142   ; GCN: bb.1:
143   ; GCN:   liveins: $vgpr0, $vgpr1
144   ; GCN:   EXP 1, $vgpr1, $vgpr1, $vgpr1, $vgpr1, -1, -1, 15, implicit $exec
145   ; GCN:   EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
146   ; GCN:   S_ENDPGM 0
147   ; GCN: bb.2:
148   ; GCN:   $exec = S_MOV_B64 0
149   ; GFX9:  EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
150   ; GFX10: EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
151   ; GFX11: EXP_DONE 0, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
152   ; GCN:   S_ENDPGM 0
153   bb.0:
154     liveins: $sgpr0, $sgpr1
155     successors: %bb.1
157     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
158     dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
159     SI_EARLY_TERMINATE_SCC0 implicit $scc, implicit $exec
160     $vgpr1 = V_MOV_B32_e32 1, implicit $exec
162   bb.1:
163     liveins: $vgpr0, $vgpr1
164     EXP 1, $vgpr1, $vgpr1, $vgpr1, $vgpr1, -1, -1, 15, implicit $exec
165     EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
166     S_ENDPGM 0
170 name: early_term_scc0_gs
171 tracksRegLiveness: true
172 liveins:
173   - { reg: '$sgpr0' }
174   - { reg: '$sgpr1' }
175 body: |
176   ; GCN-LABEL: name: early_term_scc0_gs
177   ; GCN: bb.0:
178   ; GCN:   successors: %bb.1(0x80000000)
179   ; GCN:   liveins: $sgpr0, $sgpr1
180   ; GCN:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
181   ; GCN:   dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
182   ; GCN: bb.1:
183   ; GCN:   liveins: $vgpr0
184   ; GCN:   S_ENDPGM 0
185   ; GCN: bb.2:
186   ; GCN:   $exec = S_MOV_B64 0
187   ; GCN:   S_ENDPGM 0
188   bb.0:
189     liveins: $sgpr0, $sgpr1
190     successors: %bb.1
192     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
193     dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
194     SI_EARLY_TERMINATE_SCC0 implicit $scc, implicit $exec
196   bb.1:
197     liveins: $vgpr0
198     S_ENDPGM 0
202 name: early_term_scc0_cs
203 tracksRegLiveness: true
204 liveins:
205   - { reg: '$sgpr0' }
206   - { reg: '$sgpr1' }
207 body: |
208   ; GCN-LABEL: name: early_term_scc0_cs
209   ; GCN: bb.0:
210   ; GCN:   successors: %bb.1(0x80000000), %bb.2(0x00000000)
211   ; GCN:   liveins: $sgpr0, $sgpr1
212   ; GCN:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
213   ; GCN:   dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
214   ; GCN:   S_CBRANCH_SCC0 %bb.2, implicit $scc
215   ; GCN: bb.1:
216   ; GCN:   liveins: $vgpr0
217   ; GCN:   S_ENDPGM 0
218   ; GCN: bb.2:
219   ; GCN:   $exec = S_MOV_B64 0
220   ; GCN:   S_ENDPGM 0
221   bb.0:
222     liveins: $sgpr0, $sgpr1
223     successors: %bb.1
225     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
226     dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
227     SI_EARLY_TERMINATE_SCC0 implicit $scc, implicit $exec
229   bb.1:
230     liveins: $vgpr0
231     S_ENDPGM 0
235 name: early_term_no_export
236 tracksRegLiveness: true
237 liveins:
238   - { reg: '$sgpr0' }
239   - { reg: '$sgpr1' }
240 body: |
241   ; GCN-LABEL: name: early_term_no_export
242   ; GCN: bb.0:
243   ; GCN:   successors: %bb.1(0x80000000), %bb.2(0x00000000)
244   ; GCN:   liveins: $sgpr0, $sgpr1
245   ; GCN:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
246   ; GCN:   dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
247   ; GCN:   S_CBRANCH_SCC0 %bb.2, implicit $scc
248   ; GCN: bb.1:
249   ; GCN:   liveins: $vgpr0
250   ; GCN:   EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
251   ; GCN:   S_ENDPGM 0
252   ; GCN: bb.2:
253   ; GCN:   $exec = S_MOV_B64 0
254   ; GFX9:  EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
255   ; GFX10-NOT: EXP_DONE
256   ; GFX11-NOT: EXP_DONE
257   ; GCN:   S_ENDPGM 0
258   bb.0:
259     liveins: $sgpr0, $sgpr1
260     successors: %bb.1
262     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
263     dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
264     SI_EARLY_TERMINATE_SCC0 implicit $scc, implicit $exec
266   bb.1:
267     liveins: $vgpr0
268     EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
269     S_ENDPGM 0
273 name: early_term_depth_only
274 tracksRegLiveness: true
275 liveins:
276   - { reg: '$sgpr0' }
277   - { reg: '$sgpr1' }
278 body: |
279   ; GCN-LABEL: name: early_term_depth_only
280   ; GCN: bb.0:
281   ; GCN:   successors: %bb.1(0x80000000), %bb.2(0x00000000)
282   ; GCN:   liveins: $sgpr0, $sgpr1
283   ; GCN:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
284   ; GCN:   dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
285   ; GCN:   S_CBRANCH_SCC0 %bb.2, implicit $scc
286   ; GCN: bb.1:
287   ; GCN:   liveins: $vgpr0
288   ; GCN:   EXP_DONE 8, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
289   ; GCN:   S_ENDPGM 0
290   ; GCN: bb.2:
291   ; GCN:   $exec = S_MOV_B64 0
292   ; GFX9:  EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
293   ; GFX10: EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
294   ; GFX11: EXP_DONE 8, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
295   ; GCN:   S_ENDPGM 0
296   bb.0:
297     liveins: $sgpr0, $sgpr1
298     successors: %bb.1
300     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
301     dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
302     SI_EARLY_TERMINATE_SCC0 implicit $scc, implicit $exec
304   bb.1:
305     liveins: $vgpr0
306     EXP_DONE 8, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
307     S_ENDPGM 0