• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# RUN: llc -march=amdgcn -verify-machineinstrs -run-pass si-optimize-exec-masking-pre-ra %s -o - | FileCheck -check-prefix=GCN %s
2
3# GCN-LABEL: name: kill_all
4# GCN:      bb.0:
5# GCN-NEXT: S_ENDPGM
6name: kill_all
7tracksRegLiveness: true
8registers:
9  - { id: 0, class: vreg_64 }
10  - { id: 1, class: vgpr_32 }
11  - { id: 2, class: vgpr_32 }
12  - { id: 3, class: sgpr_32 }
13  - { id: 4, class: sgpr_32 }
14body:             |
15  bb.0:
16    $vcc = IMPLICIT_DEF
17    %0 = IMPLICIT_DEF
18    %3 = IMPLICIT_DEF
19    $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
20    %1 = FLAT_LOAD_DWORD %0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (load 4)
21    %2 = V_ADD_F32_e64 0, killed %1, 0, 1, 0, 0, implicit $exec
22    %4 = S_ADD_U32 %3, 1, implicit-def $scc
23    S_ENDPGM
24...
25---
26# GCN-LABEL: name: load_without_memoperand
27# GCN:      $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
28# GCN-NEXT: dead %1:vgpr_32 = FLAT_LOAD_DWORD %0, 0, 0, 0, implicit $exec, implicit $flat_scr
29# GCN-NEXT: S_ENDPGM
30name: load_without_memoperand
31tracksRegLiveness: true
32registers:
33  - { id: 0, class: vreg_64 }
34  - { id: 1, class: vgpr_32 }
35  - { id: 2, class: vgpr_32 }
36  - { id: 3, class: sgpr_32 }
37  - { id: 4, class: sgpr_32 }
38body:             |
39  bb.0:
40    $vcc = IMPLICIT_DEF
41    %0 = IMPLICIT_DEF
42    %3 = IMPLICIT_DEF
43    $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
44    %1 = FLAT_LOAD_DWORD %0, 0, 0, 0, implicit $exec, implicit $flat_scr
45    %2 = V_ADD_F32_e64 0, killed %1, 0, 1, 0, 0, implicit $exec
46    %4 = S_ADD_U32 %3, 1, implicit-def $scc
47    S_ENDPGM
48...
49---
50# GCN-LABEL: name: load_volatile
51# GCN:      $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
52# GCN-NEXT: dead %1:vgpr_32 = FLAT_LOAD_DWORD %0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load 4)
53# GCN-NEXT: S_ENDPGM
54name: load_volatile
55tracksRegLiveness: true
56registers:
57  - { id: 0, class: vreg_64 }
58  - { id: 1, class: vgpr_32 }
59  - { id: 2, class: vgpr_32 }
60  - { id: 3, class: sgpr_32 }
61  - { id: 4, class: sgpr_32 }
62body:             |
63  bb.0:
64    $vcc = IMPLICIT_DEF
65    %0 = IMPLICIT_DEF
66    %3 = IMPLICIT_DEF
67    $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
68    %1 = FLAT_LOAD_DWORD %0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load 4)
69    %2 = V_ADD_F32_e64 0, killed %1, 0, 1, 0, 0, implicit $exec
70    %4 = S_ADD_U32 %3, 1, implicit-def $scc
71    S_ENDPGM
72...
73---
74# GCN-LABEL: name: store
75# GCN:      $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
76# GCN-NEXT: FLAT_STORE_DWORD %0, %1, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
77# GCN-NEXT: S_ENDPGM
78name: store
79tracksRegLiveness: true
80registers:
81  - { id: 0, class: vreg_64 }
82  - { id: 1, class: vgpr_32 }
83body:             |
84  bb.0:
85    $vcc = IMPLICIT_DEF
86    %0 = IMPLICIT_DEF
87    %1 = IMPLICIT_DEF
88    $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
89    FLAT_STORE_DWORD %0, %1, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
90    S_ENDPGM
91...
92---
93# GCN-LABEL: name: barrier
94# GCN:      $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
95# GCN-NEXT: S_BARRIER
96# GCN-NEXT: S_ENDPGM
97name: barrier
98tracksRegLiveness: true
99body:             |
100  bb.0:
101    $vcc = IMPLICIT_DEF
102    $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
103    S_BARRIER
104    S_ENDPGM
105...
106---
107# GCN-LABEL: name: call
108# GCN:      $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
109# GCN-NEXT: $sgpr4_sgpr5 = S_SWAPPC_B64 $sgpr2_sgpr3
110# GCN-NEXT: S_ENDPGM
111name: call
112tracksRegLiveness: true
113body:             |
114  bb.0:
115    $vcc = IMPLICIT_DEF
116    $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
117    $sgpr4_sgpr5 = S_SWAPPC_B64 $sgpr2_sgpr3
118    S_ENDPGM
119...
120---
121# GCN-LABEL: name: exp
122# GCN:      $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
123# GCN-NEXT: EXP 32, undef %0:vgpr_32, undef %1:vgpr_32, %2, undef %3:vgpr_32, 0, 0, 15, implicit $exec
124# GCN-NEXT: S_ENDPGM
125name: exp
126tracksRegLiveness: true
127registers:
128  - { id: 0, class: vgpr_32 }
129  - { id: 1, class: vgpr_32 }
130  - { id: 2, class: vgpr_32 }
131  - { id: 3, class: vgpr_32 }
132body:             |
133  bb.0:
134    $vcc = IMPLICIT_DEF
135    %2 = IMPLICIT_DEF
136    $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
137    EXP 32, undef %0, undef %1, killed %2, undef %3, 0, 0, 15, implicit $exec
138    S_ENDPGM
139...
140---
141# GCN-LABEL: name: return_to_epilog
142# GCN:      $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
143# GCN-NEXT: SI_RETURN_TO_EPILOG killed $vgpr0
144name: return_to_epilog
145tracksRegLiveness: true
146body:             |
147  bb.0:
148    $vcc = IMPLICIT_DEF
149    $vgpr0 = IMPLICIT_DEF
150    $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
151    SI_RETURN_TO_EPILOG killed $vgpr0
152...
153---
154# GCN-LABEL: name: split_block
155# GCN:      bb.0:
156# GCN-NEXT:   successors: %bb.1
157# GCN-NOT:  S_OR_B64
158# GCN:      bb.1:
159# GCN-NEXT:   S_ENDPGM
160name: split_block
161tracksRegLiveness: true
162registers:
163  - { id: 0, class: vgpr_32 }
164  - { id: 1, class: vgpr_32 }
165  - { id: 2, class: sgpr_32 }
166  - { id: 3, class: sgpr_32 }
167body:             |
168  bb.0:
169    $vcc = IMPLICIT_DEF
170    $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
171
172  bb.1:
173    %0 = IMPLICIT_DEF
174    %2 = IMPLICIT_DEF
175    %1 = V_ADD_F32_e64 0, killed %0, 0, 1, 0, 0, implicit $exec
176    %3 = S_ADD_U32 %2, 1, implicit-def $scc
177    S_ENDPGM
178...
179---
180# GCN-LABEL: name: split_block_empty_block
181# GCN:      bb.0:
182# GCN-NEXT:   successors: %bb.1
183# GCN-NOT:  S_OR_B64
184# GCN:      bb.1:
185# GCN:      bb.2:
186# GCN-NEXT:   S_ENDPGM
187name: split_block_empty_block
188tracksRegLiveness: true
189body:             |
190  bb.0:
191    $vcc = IMPLICIT_DEF
192    $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
193
194  bb.1:
195
196  bb.2:
197    S_ENDPGM
198...
199---
200# GCN-LABEL: name: split_block_uncond_branch
201# GCN:      bb.0:
202# GCN-NEXT:   successors: %bb.1
203# GCN:        S_BRANCH %bb.1
204# GCN-NOT:  S_OR_B64
205# GCN:      bb.1:
206# GCN-NEXT:   S_ENDPGM
207name: split_block_uncond_branch
208tracksRegLiveness: true
209body:             |
210  bb.0:
211    $vcc = IMPLICIT_DEF
212    $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
213    S_BRANCH %bb.1
214
215  bb.1:
216    S_ENDPGM
217...
218---
219# GCN-LABEL: name: split_block_cond_branch
220# GCN:      bb.0:
221# GCN-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
222# GCN:        $sgpr0_sgpr1 = S_OR_B64 $exec, $vcc, implicit-def $scc
223# GCN:        S_CBRANCH_VCCNZ %bb.2, implicit undef $vcc
224# GCN:      bb.1:
225# GCN:      bb.2:
226# GCN-NEXT:   S_ENDPGM
227name: split_block_cond_branch
228tracksRegLiveness: true
229body:             |
230  bb.0:
231    $vcc = IMPLICIT_DEF
232    $sgpr0_sgpr1 = S_OR_B64 $exec, $vcc, implicit-def $scc
233    S_CBRANCH_VCCNZ %bb.2, implicit undef $vcc
234
235  bb.1:
236
237  bb.2:
238    S_ENDPGM
239...
240---
241# GCN-LABEL: name: two_preds_both_dead
242# GCN:      bb.0:
243# GCN-NEXT:   successors: %bb.2
244# GCN-NOT:    S_OR
245# GCN:        S_BRANCH %bb.2
246# GCN:      bb.1:
247# GCN-NEXT:   successors: %bb.2
248# GCN-NOT:    S_AND
249# GCN:        S_BRANCH %bb.2
250# GCN:      bb.2:
251# GCN-NEXT:   S_ENDPGM
252name: two_preds_both_dead
253tracksRegLiveness: true
254body:             |
255  bb.0:
256    $vcc = IMPLICIT_DEF
257    $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
258    S_BRANCH %bb.2
259
260  bb.1:
261    $vcc = IMPLICIT_DEF
262    $sgpr0_sgpr1 = S_AND_B64 $exec, killed $vcc, implicit-def $scc
263    S_BRANCH %bb.2
264
265  bb.2:
266    S_ENDPGM
267...
268---
269# GCN-LABEL: name: two_preds_one_dead
270# GCN:      bb.0:
271# GCN-NEXT:   successors: %bb.2
272# GCN:        $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
273# GCN-NEXT:   S_BARRIER
274# GCN-NEXT:   S_BRANCH %bb.2
275# GCN:      bb.1:
276# GCN-NEXT:   successors: %bb.2
277# GCN-NOT:    S_AND
278# GCN:        S_BRANCH %bb.2
279# GCN:      bb.2:
280# GCN-NEXT:   S_ENDPGM
281name: two_preds_one_dead
282tracksRegLiveness: true
283body:             |
284  bb.0:
285    $vcc = IMPLICIT_DEF
286    $sgpr0_sgpr1 = S_OR_B64 $exec, killed $vcc, implicit-def $scc
287    S_BARRIER
288    S_BRANCH %bb.2
289
290  bb.1:
291    $vcc = IMPLICIT_DEF
292    $sgpr0_sgpr1 = S_AND_B64 $exec, killed $vcc, implicit-def $scc
293    S_BRANCH %bb.2
294
295  bb.2:
296    S_ENDPGM
297...
298