Revert rGe6ccb57bb3f6b761f2310e97fd6ca99eff42f73e "[SLP] Add cost model for `llvm...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / early-term.mir
blob60dd1289f10660059631505575ca5156684fef40
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
4 --- |
5   define amdgpu_ps void @early_term_scc0_end_block() {
6     ret void
7   }
9   define amdgpu_ps void @early_term_scc0_next_terminator() {
10     ret void
11   }
13   define amdgpu_ps void @early_term_scc0_in_block() {
14     ret void
15   }
17   define amdgpu_gs void @early_term_scc0_gs() {
18     ret void
19   }
21   define amdgpu_cs void @early_term_scc0_cs() {
22     ret void
23   }
25   define amdgpu_ps void @early_term_no_export() #0 {
26     ret void
27   }
29   define amdgpu_ps void @early_term_depth_only() #1 {
30     ret void
31   }
33   attributes #0 = { "amdgpu-color-export"="0" "amdgpu-depth-export"="0" }
34   attributes #1 = { "amdgpu-color-export"="0" "amdgpu-depth-export"="1" }
35 ...
37 ---
38 name: early_term_scc0_end_block
39 tracksRegLiveness: true
40 liveins:
41   - { reg: '$sgpr0' }
42   - { reg: '$sgpr1' }
43 body: |
44   ; GCN-LABEL: name: early_term_scc0_end_block
45   ; GCN: bb.0:
46   ; GCN:   successors: %bb.1(0x80000000), %bb.2(0x00000000)
47   ; GCN:   liveins: $sgpr0, $sgpr1
48   ; GCN:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
49   ; GCN:   dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
50   ; GCN:   S_CBRANCH_SCC0 %bb.2, implicit $scc
51   ; GCN: bb.1:
52   ; GCN:   liveins: $vgpr0
53   ; GCN:   EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
54   ; GCN:   S_ENDPGM 0
55   ; GCN: bb.2:
56   ; GCN:   $exec = S_MOV_B64 0
57   ; GCN:   EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
58   ; GCN:   S_ENDPGM 0
59   bb.0:
60     liveins: $sgpr0, $sgpr1
61     successors: %bb.1
63     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
64     dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
65     SI_EARLY_TERMINATE_SCC0 implicit $scc, implicit $exec
67   bb.1:
68     liveins: $vgpr0
69     EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
70     S_ENDPGM 0
71 ...
73 ---
74 name: early_term_scc0_next_terminator
75 tracksRegLiveness: true
76 liveins:
77   - { reg: '$sgpr0' }
78   - { reg: '$sgpr1' }
79 body: |
80   ; GCN-LABEL: name: early_term_scc0_next_terminator
81   ; GCN: bb.0:
82   ; GCN:   successors: %bb.2(0x80000000), %bb.3(0x00000000)
83   ; GCN:   liveins: $sgpr0, $sgpr1
84   ; GCN:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
85   ; GCN:   dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
86   ; GCN:   S_CBRANCH_SCC0 %bb.3, implicit $scc
87   ; GCN:   S_BRANCH %bb.2
88   ; GCN: bb.1:
89   ; GCN:   successors: %bb.2(0x80000000)
90   ; GCN:   $vgpr0 = V_MOV_B32_e32 1, implicit $exec
91   ; GCN: bb.2:
92   ; GCN:   liveins: $vgpr0
93   ; GCN:   EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
94   ; GCN:   S_ENDPGM 0
95   ; GCN: bb.3:
96   ; GCN:   $exec = S_MOV_B64 0
97   ; GCN:   EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
98   ; GCN:   S_ENDPGM 0
99   bb.0:
100     liveins: $sgpr0, $sgpr1
101     successors: %bb.2
103     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
104     dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
105     SI_EARLY_TERMINATE_SCC0 implicit $scc, implicit $exec
106     S_BRANCH %bb.2
108   bb.1:
109     successors: %bb.2
110     $vgpr0 = V_MOV_B32_e32 1, implicit $exec
111     S_BRANCH %bb.2
113   bb.2:
114     liveins: $vgpr0
115     EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
116     S_ENDPGM 0
120 name: early_term_scc0_in_block
121 tracksRegLiveness: true
122 liveins:
123   - { reg: '$sgpr0' }
124   - { reg: '$sgpr1' }
125 body: |
126   ; GCN-LABEL: name: early_term_scc0_in_block
127   ; GCN: bb.0:
128   ; GCN:   successors: %bb.3(0x40000000), %bb.2(0x40000000)
129   ; GCN:   liveins: $sgpr0, $sgpr1
130   ; GCN:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
131   ; GCN:   dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
132   ; GCN:   S_CBRANCH_SCC0 %bb.2, implicit $scc
133   ; GCN: bb.3:
134   ; GCN:   successors: %bb.1(0x80000000)
135   ; GCN:   liveins: $vgpr0, $scc
136   ; GCN:   $vgpr1 = V_MOV_B32_e32 1, implicit $exec
137   ; GCN: bb.1:
138   ; GCN:   liveins: $vgpr0, $vgpr1
139   ; GCN:   EXP 1, $vgpr1, $vgpr1, $vgpr1, $vgpr1, -1, -1, 15, implicit $exec
140   ; GCN:   EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
141   ; GCN:   S_ENDPGM 0
142   ; GCN: bb.2:
143   ; GCN:   $exec = S_MOV_B64 0
144   ; GCN:   EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
145   ; GCN:   S_ENDPGM 0
146   bb.0:
147     liveins: $sgpr0, $sgpr1
148     successors: %bb.1
150     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
151     dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
152     SI_EARLY_TERMINATE_SCC0 implicit $scc, implicit $exec
153     $vgpr1 = V_MOV_B32_e32 1, implicit $exec
155   bb.1:
156     liveins: $vgpr0, $vgpr1
157     EXP 1, $vgpr1, $vgpr1, $vgpr1, $vgpr1, -1, -1, 15, implicit $exec
158     EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
159     S_ENDPGM 0
163 name: early_term_scc0_gs
164 tracksRegLiveness: true
165 liveins:
166   - { reg: '$sgpr0' }
167   - { reg: '$sgpr1' }
168 body: |
169   ; GCN-LABEL: name: early_term_scc0_gs
170   ; GCN: bb.0:
171   ; GCN:   successors: %bb.1(0x80000000)
172   ; GCN:   liveins: $sgpr0, $sgpr1
173   ; GCN:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
174   ; GCN:   dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
175   ; GCN: bb.1:
176   ; GCN:   liveins: $vgpr0
177   ; GCN:   S_ENDPGM 0
178   ; GCN: bb.2:
179   ; GCN:   $exec = S_MOV_B64 0
180   ; GCN:   S_ENDPGM 0
181   bb.0:
182     liveins: $sgpr0, $sgpr1
183     successors: %bb.1
185     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
186     dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
187     SI_EARLY_TERMINATE_SCC0 implicit $scc, implicit $exec
189   bb.1:
190     liveins: $vgpr0
191     S_ENDPGM 0
195 name: early_term_scc0_cs
196 tracksRegLiveness: true
197 liveins:
198   - { reg: '$sgpr0' }
199   - { reg: '$sgpr1' }
200 body: |
201   ; GCN-LABEL: name: early_term_scc0_cs
202   ; GCN: bb.0:
203   ; GCN:   successors: %bb.1(0x80000000), %bb.2(0x00000000)
204   ; GCN:   liveins: $sgpr0, $sgpr1
205   ; GCN:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
206   ; GCN:   dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
207   ; GCN:   S_CBRANCH_SCC0 %bb.2, implicit $scc
208   ; GCN: bb.1:
209   ; GCN:   liveins: $vgpr0
210   ; GCN:   S_ENDPGM 0
211   ; GCN: bb.2:
212   ; GCN:   $exec = S_MOV_B64 0
213   ; GCN:   S_ENDPGM 0
214   bb.0:
215     liveins: $sgpr0, $sgpr1
216     successors: %bb.1
218     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
219     dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
220     SI_EARLY_TERMINATE_SCC0 implicit $scc, implicit $exec
222   bb.1:
223     liveins: $vgpr0
224     S_ENDPGM 0
228 name: early_term_no_export
229 tracksRegLiveness: true
230 liveins:
231   - { reg: '$sgpr0' }
232   - { reg: '$sgpr1' }
233 body: |
234   ; GCN-LABEL: name: early_term_no_export
235   ; GCN: bb.0:
236   ; GCN:   successors: %bb.1(0x80000000), %bb.2(0x00000000)
237   ; GCN:   liveins: $sgpr0, $sgpr1
238   ; GCN:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
239   ; GCN:   dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
240   ; GCN:   S_CBRANCH_SCC0 %bb.2, implicit $scc
241   ; GCN: bb.1:
242   ; GCN:   liveins: $vgpr0
243   ; GCN:   EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
244   ; GCN:   S_ENDPGM 0
245   ; GCN: bb.2:
246   ; GCN:   $exec = S_MOV_B64 0
247   ; GFX9:  EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
248   ; GFX10-NOT: EXP_DONE
249   ; GCN:   S_ENDPGM 0
250   bb.0:
251     liveins: $sgpr0, $sgpr1
252     successors: %bb.1
254     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
255     dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
256     SI_EARLY_TERMINATE_SCC0 implicit $scc, implicit $exec
258   bb.1:
259     liveins: $vgpr0
260     EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
261     S_ENDPGM 0
265 name: early_term_depth_only
266 tracksRegLiveness: true
267 liveins:
268   - { reg: '$sgpr0' }
269   - { reg: '$sgpr1' }
270 body: |
271   ; GCN-LABEL: name: early_term_depth_only
272   ; GCN: bb.0:
273   ; GCN:   successors: %bb.1(0x80000000), %bb.2(0x00000000)
274   ; GCN:   liveins: $sgpr0, $sgpr1
275   ; GCN:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
276   ; GCN:   dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
277   ; GCN:   S_CBRANCH_SCC0 %bb.2, implicit $scc
278   ; GCN: bb.1:
279   ; GCN:   liveins: $vgpr0
280   ; GCN:   EXP_DONE 8, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
281   ; GCN:   S_ENDPGM 0
282   ; GCN: bb.2:
283   ; GCN:   $exec = S_MOV_B64 0
284   ; GFX9:  EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
285   ; GFX10: EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
286   ; GFX11: EXP_DONE 8, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
287   ; GCN:   S_ENDPGM 0
288   bb.0:
289     liveins: $sgpr0, $sgpr1
290     successors: %bb.1
292     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
293     dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
294     SI_EARLY_TERMINATE_SCC0 implicit $scc, implicit $exec
296   bb.1:
297     liveins: $vgpr0
298     EXP_DONE 8, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
299     S_ENDPGM 0