221
|
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
|
2 # RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx906 -verify-coalescing -verify-machineinstrs -start-before=simple-register-coalescing -stop-after=machine-scheduler -o - %s | FileCheck %s
|
|
3
|
|
4 # Tests that break due to the handling of partially undef registers
|
|
5 # when whole register identity copies are erased.
|
|
6
|
|
7 # Make sure there is no verifier error after
|
|
8 # RenameIndepependentSubregs processes this. The coalescer would
|
|
9 # remove the identity copy in %bb.1, and leave behind a dummy interval
|
|
10 # across bb.1 with no corresponding value anywhere in the function.
|
|
11
|
|
12 ---
|
|
13 name: identity_copy_undef_subrange
|
|
14 tracksRegLiveness: true
|
|
15 body: |
|
|
16 ; CHECK-LABEL: name: identity_copy_undef_subrange
|
|
17 ; CHECK: bb.0:
|
236
|
18 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
19 ; CHECK-NEXT: liveins: $vgpr0
|
|
20 ; CHECK-NEXT: {{ $}}
|
|
21 ; CHECK-NEXT: undef %0.sub1:vreg_64 = COPY $vgpr0
|
|
22 ; CHECK-NEXT: {{ $}}
|
|
23 ; CHECK-NEXT: bb.1:
|
|
24 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
|
|
25 ; CHECK-NEXT: {{ $}}
|
|
26 ; CHECK-NEXT: S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
27 ; CHECK-NEXT: S_BRANCH %bb.2
|
|
28 ; CHECK-NEXT: {{ $}}
|
|
29 ; CHECK-NEXT: bb.2:
|
|
30 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
31 ; CHECK-NEXT: {{ $}}
|
|
32 ; CHECK-NEXT: undef %0.sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 %0.sub1, implicit $mode, implicit $exec
|
|
33 ; CHECK-NEXT: S_BRANCH %bb.1
|
221
|
34 bb.0:
|
|
35 liveins: $vgpr0
|
|
36
|
|
37 undef %0.sub1:vreg_64 = COPY killed $vgpr0
|
|
38
|
|
39 bb.1:
|
|
40 successors: %bb.2, %bb.1
|
|
41
|
|
42 %0:vreg_64 = COPY %0
|
|
43 S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
44 S_BRANCH %bb.2
|
|
45
|
|
46 bb.2:
|
|
47 undef %0.sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 killed %0.sub1, implicit $mode, implicit $exec
|
|
48 S_BRANCH %bb.1
|
|
49
|
|
50 ...
|
|
51
|
|
52 # Test another use of the register inside the block.
|
|
53 ---
|
|
54 name: identity_copy_undef_subrange_other_uses0
|
|
55 tracksRegLiveness: true
|
|
56 body: |
|
|
57 ; CHECK-LABEL: name: identity_copy_undef_subrange_other_uses0
|
|
58 ; CHECK: bb.0:
|
236
|
59 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
60 ; CHECK-NEXT: liveins: $vgpr0
|
|
61 ; CHECK-NEXT: {{ $}}
|
|
62 ; CHECK-NEXT: undef %0.sub1:vreg_64 = COPY $vgpr0
|
|
63 ; CHECK-NEXT: {{ $}}
|
|
64 ; CHECK-NEXT: bb.1:
|
|
65 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
|
|
66 ; CHECK-NEXT: {{ $}}
|
|
67 ; CHECK-NEXT: S_NOP 0, implicit undef %0.sub0
|
|
68 ; CHECK-NEXT: S_NOP 0, implicit undef %0.sub0
|
|
69 ; CHECK-NEXT: S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
70 ; CHECK-NEXT: S_BRANCH %bb.2
|
|
71 ; CHECK-NEXT: {{ $}}
|
|
72 ; CHECK-NEXT: bb.2:
|
|
73 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
74 ; CHECK-NEXT: {{ $}}
|
|
75 ; CHECK-NEXT: undef %0.sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 %0.sub1, implicit $mode, implicit $exec
|
|
76 ; CHECK-NEXT: S_BRANCH %bb.1
|
221
|
77 bb.0:
|
|
78 liveins: $vgpr0
|
|
79 undef %0.sub1:vreg_64 = COPY killed $vgpr0
|
|
80
|
|
81 bb.1:
|
|
82 successors: %bb.2, %bb.1
|
|
83
|
|
84 %0:vreg_64 = COPY %0
|
|
85 S_NOP 0, implicit %0.sub0
|
|
86 S_NOP 0, implicit %0.sub0
|
|
87 S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
88 S_BRANCH %bb.2
|
|
89
|
|
90 bb.2:
|
|
91 undef %0.sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 killed %0.sub1, implicit $mode, implicit $exec
|
|
92 S_BRANCH %bb.1
|
|
93
|
|
94 ...
|
|
95
|
|
96 ---
|
|
97 name: second_identity_copy
|
|
98 tracksRegLiveness: true
|
|
99 body: |
|
|
100 ; CHECK-LABEL: name: second_identity_copy
|
|
101 ; CHECK: bb.0:
|
236
|
102 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
103 ; CHECK-NEXT: liveins: $vgpr0
|
|
104 ; CHECK-NEXT: {{ $}}
|
|
105 ; CHECK-NEXT: undef %0.sub1:vreg_64 = COPY $vgpr0
|
|
106 ; CHECK-NEXT: {{ $}}
|
|
107 ; CHECK-NEXT: bb.1:
|
|
108 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
|
|
109 ; CHECK-NEXT: {{ $}}
|
|
110 ; CHECK-NEXT: S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
111 ; CHECK-NEXT: S_BRANCH %bb.2
|
|
112 ; CHECK-NEXT: {{ $}}
|
|
113 ; CHECK-NEXT: bb.2:
|
|
114 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
115 ; CHECK-NEXT: {{ $}}
|
|
116 ; CHECK-NEXT: undef %0.sub1:vreg_64 = nofpexcept V_MUL_F32_e32 0, %0.sub1, implicit $mode, implicit $exec
|
|
117 ; CHECK-NEXT: S_BRANCH %bb.1
|
221
|
118 bb.0:
|
|
119 liveins: $vgpr0
|
|
120
|
|
121 undef %0.sub1:vreg_64 = COPY killed $vgpr0
|
|
122
|
|
123 bb.1:
|
|
124 successors: %bb.2, %bb.1
|
|
125
|
|
126 %0:vreg_64 = COPY killed %0
|
|
127 %0:vreg_64 = COPY %0
|
|
128 S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
129 S_BRANCH %bb.2
|
|
130
|
|
131 bb.2:
|
|
132 undef %0.sub1:vreg_64 = nofpexcept V_MUL_F32_e32 0, killed %0.sub1, implicit $mode, implicit $exec
|
|
133 S_BRANCH %bb.1
|
|
134
|
|
135 ...
|
|
136
|
|
137 ---
|
|
138 name: second_identity_copy_undef_lane_outblock
|
|
139 tracksRegLiveness: true
|
|
140 body: |
|
|
141 ; CHECK-LABEL: name: second_identity_copy_undef_lane_outblock
|
|
142 ; CHECK: bb.0:
|
236
|
143 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
144 ; CHECK-NEXT: liveins: $vgpr0
|
|
145 ; CHECK-NEXT: {{ $}}
|
|
146 ; CHECK-NEXT: undef %0.sub1:vreg_64 = COPY $vgpr0
|
|
147 ; CHECK-NEXT: {{ $}}
|
|
148 ; CHECK-NEXT: bb.1:
|
|
149 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
|
|
150 ; CHECK-NEXT: {{ $}}
|
|
151 ; CHECK-NEXT: S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
152 ; CHECK-NEXT: S_BRANCH %bb.2
|
|
153 ; CHECK-NEXT: {{ $}}
|
|
154 ; CHECK-NEXT: bb.2:
|
|
155 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
156 ; CHECK-NEXT: {{ $}}
|
|
157 ; CHECK-NEXT: %0.sub1:vreg_64 = nofpexcept V_MUL_F32_e32 0, %0.sub1, implicit $mode, implicit $exec
|
|
158 ; CHECK-NEXT: S_BRANCH %bb.1
|
221
|
159 bb.0:
|
|
160 liveins: $vgpr0
|
|
161
|
|
162 undef %0.sub1:vreg_64 = COPY killed $vgpr0
|
|
163
|
|
164 bb.1:
|
|
165 successors: %bb.2, %bb.1
|
|
166
|
|
167 %0:vreg_64 = COPY killed %0
|
|
168 %0:vreg_64 = COPY %0
|
|
169 S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
170 S_BRANCH %bb.2
|
|
171
|
|
172 bb.2:
|
|
173 %0.sub1:vreg_64 = nofpexcept V_MUL_F32_e32 0, killed %0.sub1, implicit $mode, implicit $exec
|
|
174 S_BRANCH %bb.1
|
|
175
|
|
176 ...
|
|
177
|
|
178 # The same value number appears in multiple blocks
|
|
179 ---
|
|
180 name: identity_copy_undef_subrange_null_vninfo_to_remove
|
|
181 tracksRegLiveness: true
|
|
182 body: |
|
|
183 ; CHECK-LABEL: name: identity_copy_undef_subrange_null_vninfo_to_remove
|
|
184 ; CHECK: bb.0:
|
236
|
185 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
186 ; CHECK-NEXT: liveins: $vgpr0
|
|
187 ; CHECK-NEXT: {{ $}}
|
|
188 ; CHECK-NEXT: undef %0.sub1:vreg_64 = COPY $vgpr0
|
|
189 ; CHECK-NEXT: {{ $}}
|
|
190 ; CHECK-NEXT: bb.1:
|
|
191 ; CHECK-NEXT: successors: %bb.3(0x40000000), %bb.2(0x40000000)
|
|
192 ; CHECK-NEXT: {{ $}}
|
|
193 ; CHECK-NEXT: S_CBRANCH_EXECNZ %bb.3, implicit $exec
|
|
194 ; CHECK-NEXT: {{ $}}
|
|
195 ; CHECK-NEXT: bb.2:
|
|
196 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
197 ; CHECK-NEXT: {{ $}}
|
|
198 ; CHECK-NEXT: S_NOP 0, implicit undef %0.sub0
|
|
199 ; CHECK-NEXT: undef %0.sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 %0.sub1, implicit $mode, implicit $exec
|
|
200 ; CHECK-NEXT: S_BRANCH %bb.1
|
|
201 ; CHECK-NEXT: {{ $}}
|
|
202 ; CHECK-NEXT: bb.3:
|
|
203 ; CHECK-NEXT: S_NOP 0, implicit undef %0.sub0
|
221
|
204 bb.0:
|
|
205 liveins: $vgpr0
|
|
206
|
|
207 undef %0.sub1:vreg_64 = COPY killed $vgpr0
|
|
208
|
|
209 bb.1:
|
|
210 %0:vreg_64 = COPY %0
|
|
211 S_CBRANCH_EXECNZ %bb.3, implicit $exec
|
|
212
|
|
213 bb.2:
|
|
214 S_NOP 0, implicit %0.sub0
|
|
215 undef %0.sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 killed %0.sub1, implicit $mode, implicit $exec
|
|
216 S_BRANCH %bb.1
|
|
217
|
|
218 bb.3:
|
|
219 S_NOP 0, implicit %0.sub0
|
|
220
|
|
221 ...
|
|
222
|
|
223 ---
|
|
224 name: undef_copy_self_loop0
|
|
225 tracksRegLiveness: true
|
|
226 body: |
|
|
227 ; CHECK-LABEL: name: undef_copy_self_loop0
|
|
228 ; CHECK: bb.0:
|
236
|
229 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
230 ; CHECK-NEXT: liveins: $vgpr0
|
|
231 ; CHECK-NEXT: {{ $}}
|
|
232 ; CHECK-NEXT: undef %0.sub1:vreg_64 = COPY $vgpr0
|
|
233 ; CHECK-NEXT: {{ $}}
|
|
234 ; CHECK-NEXT: bb.1:
|
|
235 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
|
|
236 ; CHECK-NEXT: {{ $}}
|
|
237 ; CHECK-NEXT: S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
238 ; CHECK-NEXT: {{ $}}
|
|
239 ; CHECK-NEXT: bb.2:
|
|
240 ; CHECK-NEXT: S_NOP 0, implicit undef %0.sub0
|
221
|
241 bb.0:
|
|
242 liveins: $vgpr0
|
|
243
|
|
244 undef %0.sub1:vreg_64 = COPY killed $vgpr0
|
|
245
|
|
246 bb.1:
|
|
247 %0:vreg_64 = COPY %0
|
|
248 S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
249
|
|
250 bb.2:
|
|
251 S_NOP 0, implicit %0.sub0
|
|
252
|
|
253 ...
|
|
254
|
|
255 ---
|
|
256 name: undef_copy_self_loop1
|
|
257 tracksRegLiveness: true
|
|
258 body: |
|
|
259 ; CHECK-LABEL: name: undef_copy_self_loop1
|
|
260 ; CHECK: bb.0:
|
236
|
261 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
262 ; CHECK-NEXT: liveins: $vgpr0
|
|
263 ; CHECK-NEXT: {{ $}}
|
|
264 ; CHECK-NEXT: undef %0.sub1:vreg_64 = COPY $vgpr0
|
|
265 ; CHECK-NEXT: {{ $}}
|
|
266 ; CHECK-NEXT: bb.1:
|
|
267 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
|
|
268 ; CHECK-NEXT: {{ $}}
|
|
269 ; CHECK-NEXT: S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
270 ; CHECK-NEXT: {{ $}}
|
|
271 ; CHECK-NEXT: bb.2:
|
|
272 ; CHECK-NEXT: S_NOP 0, implicit %0.sub1
|
221
|
273 bb.0:
|
|
274 liveins: $vgpr0
|
|
275
|
|
276 undef %0.sub1:vreg_64 = COPY killed $vgpr0
|
|
277
|
|
278 bb.1:
|
|
279 %0:vreg_64 = COPY %0
|
|
280 S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
281
|
|
282 bb.2:
|
|
283 S_NOP 0, implicit %0.sub1
|
|
284
|
|
285 ...
|
|
286
|
|
287 # The coalescing of the %0 = %2 COPY in %bb.2 needs to prune the dead
|
|
288 # phi range across %bb.1 after it is erased.
|
|
289 ---
|
|
290 name: prune_subrange_phi_value_0
|
|
291 tracksRegLiveness: true
|
|
292 body: |
|
|
293 ; CHECK-LABEL: name: prune_subrange_phi_value_0
|
|
294 ; CHECK: bb.0:
|
236
|
295 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
296 ; CHECK-NEXT: liveins: $vgpr0
|
|
297 ; CHECK-NEXT: {{ $}}
|
|
298 ; CHECK-NEXT: undef %2.sub1:vreg_64 = COPY $vgpr0
|
|
299 ; CHECK-NEXT: {{ $}}
|
|
300 ; CHECK-NEXT: bb.1:
|
|
301 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
|
|
302 ; CHECK-NEXT: {{ $}}
|
|
303 ; CHECK-NEXT: S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
304 ; CHECK-NEXT: S_BRANCH %bb.2
|
|
305 ; CHECK-NEXT: {{ $}}
|
|
306 ; CHECK-NEXT: bb.2:
|
|
307 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
308 ; CHECK-NEXT: {{ $}}
|
|
309 ; CHECK-NEXT: S_BRANCH %bb.1
|
221
|
310 bb.0:
|
|
311 liveins: $vgpr0
|
|
312
|
|
313 undef %0.sub1:vreg_64 = COPY killed $vgpr0
|
|
314
|
|
315 bb.1:
|
|
316 successors: %bb.2, %bb.1
|
|
317
|
|
318 %1:vreg_64 = COPY killed %0
|
|
319 %0:vreg_64 = COPY %1
|
|
320 S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
321 S_BRANCH %bb.2
|
|
322
|
|
323 bb.2:
|
|
324 undef %2.sub1:vreg_64 = COPY %0.sub1
|
|
325 %0:vreg_64 = COPY killed %2
|
|
326 S_BRANCH %bb.1
|
|
327
|
|
328 ...
|
|
329
|
|
330 ---
|
|
331 name: prune_subrange_phi_value_0_0
|
|
332 tracksRegLiveness: true
|
|
333 body: |
|
|
334 ; CHECK-LABEL: name: prune_subrange_phi_value_0_0
|
|
335 ; CHECK: bb.0:
|
236
|
336 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
337 ; CHECK-NEXT: liveins: $vgpr0
|
|
338 ; CHECK-NEXT: {{ $}}
|
|
339 ; CHECK-NEXT: undef %0.sub1:vreg_64 = COPY $vgpr0
|
|
340 ; CHECK-NEXT: {{ $}}
|
|
341 ; CHECK-NEXT: bb.1:
|
|
342 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
|
|
343 ; CHECK-NEXT: {{ $}}
|
|
344 ; CHECK-NEXT: S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
345 ; CHECK-NEXT: S_BRANCH %bb.2
|
|
346 ; CHECK-NEXT: {{ $}}
|
|
347 ; CHECK-NEXT: bb.2:
|
|
348 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
349 ; CHECK-NEXT: {{ $}}
|
|
350 ; CHECK-NEXT: S_BRANCH %bb.1
|
221
|
351 bb.0:
|
|
352 liveins: $vgpr0
|
|
353
|
|
354 undef %0.sub1:vreg_64 = COPY killed $vgpr0
|
|
355
|
|
356 bb.1:
|
|
357 successors: %bb.2, %bb.1
|
|
358
|
|
359 %1:vreg_64 = COPY killed %0
|
|
360 %0:vreg_64 = COPY %1
|
|
361 S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
362 S_BRANCH %bb.2
|
|
363
|
|
364 bb.2:
|
|
365 undef %0.sub1:vreg_64 = COPY %0.sub1
|
|
366 S_BRANCH %bb.1
|
|
367
|
|
368 ...
|
|
369
|
|
370 ---
|
|
371 name: prune_subrange_phi_value_0_1
|
|
372 tracksRegLiveness: true
|
|
373 body: |
|
|
374 ; CHECK-LABEL: name: prune_subrange_phi_value_0_1
|
|
375 ; CHECK: bb.0:
|
236
|
376 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
377 ; CHECK-NEXT: liveins: $vgpr0
|
|
378 ; CHECK-NEXT: {{ $}}
|
|
379 ; CHECK-NEXT: undef %0.sub1:vreg_64 = COPY $vgpr0
|
|
380 ; CHECK-NEXT: {{ $}}
|
|
381 ; CHECK-NEXT: bb.1:
|
|
382 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
|
|
383 ; CHECK-NEXT: {{ $}}
|
|
384 ; CHECK-NEXT: S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
385 ; CHECK-NEXT: S_BRANCH %bb.2
|
|
386 ; CHECK-NEXT: {{ $}}
|
|
387 ; CHECK-NEXT: bb.2:
|
|
388 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
389 ; CHECK-NEXT: {{ $}}
|
|
390 ; CHECK-NEXT: S_BRANCH %bb.1
|
221
|
391 bb.0:
|
|
392 liveins: $vgpr0
|
|
393
|
|
394 undef %0.sub1:vreg_64 = COPY killed $vgpr0
|
|
395
|
|
396 bb.1:
|
|
397 successors: %bb.2, %bb.1
|
|
398
|
|
399 %1:vreg_64 = COPY killed %0
|
|
400 %0:vreg_64 = COPY %1
|
|
401 S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
402 S_BRANCH %bb.2
|
|
403
|
|
404 bb.2:
|
|
405 S_BRANCH %bb.1
|
|
406
|
|
407 ...
|
|
408
|
|
409 # Variant of testcase that asserts since there wasn't already an
|
|
410 # incoming segment at the erased copy, and no valid end point.
|
|
411 ---
|
|
412 name: prune_subrange_phi_value_1
|
|
413 tracksRegLiveness: true
|
|
414 body: |
|
|
415 ; CHECK-LABEL: name: prune_subrange_phi_value_1
|
|
416 ; CHECK: bb.0:
|
236
|
417 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
418 ; CHECK-NEXT: liveins: $vgpr0
|
|
419 ; CHECK-NEXT: {{ $}}
|
|
420 ; CHECK-NEXT: undef %0.sub1:vreg_64 = COPY $vgpr0
|
|
421 ; CHECK-NEXT: {{ $}}
|
|
422 ; CHECK-NEXT: bb.1:
|
|
423 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
|
|
424 ; CHECK-NEXT: {{ $}}
|
|
425 ; CHECK-NEXT: S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
426 ; CHECK-NEXT: S_BRANCH %bb.2
|
|
427 ; CHECK-NEXT: {{ $}}
|
|
428 ; CHECK-NEXT: bb.2:
|
|
429 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
430 ; CHECK-NEXT: {{ $}}
|
|
431 ; CHECK-NEXT: undef %0.sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 %0.sub1, implicit $mode, implicit $exec
|
|
432 ; CHECK-NEXT: S_BRANCH %bb.1
|
221
|
433 bb.0:
|
|
434 liveins: $vgpr0
|
|
435
|
|
436 undef %0.sub1:vreg_64 = COPY killed $vgpr0
|
|
437
|
|
438 bb.1:
|
|
439 successors: %bb.2, %bb.1
|
|
440
|
|
441 %0:vreg_64 = COPY killed %0
|
|
442 S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
443 S_BRANCH %bb.2
|
|
444
|
|
445 bb.2:
|
|
446 undef %1.sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 killed %0.sub1, implicit $mode, implicit $exec
|
|
447 %0:vreg_64 = COPY killed %1
|
|
448 S_BRANCH %bb.1
|
|
449
|
|
450 ...
|
|
451
|
|
452 ---
|
|
453 name: prune_subrange_phi_value_2
|
|
454 tracksRegLiveness: true
|
|
455 body: |
|
|
456 ; CHECK-LABEL: name: prune_subrange_phi_value_2
|
|
457 ; CHECK: bb.0:
|
236
|
458 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
459 ; CHECK-NEXT: liveins: $vgpr0
|
|
460 ; CHECK-NEXT: {{ $}}
|
|
461 ; CHECK-NEXT: undef %0.sub1:vreg_64 = COPY $vgpr0
|
|
462 ; CHECK-NEXT: {{ $}}
|
|
463 ; CHECK-NEXT: bb.1:
|
|
464 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
|
|
465 ; CHECK-NEXT: {{ $}}
|
|
466 ; CHECK-NEXT: S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
467 ; CHECK-NEXT: S_BRANCH %bb.2
|
|
468 ; CHECK-NEXT: {{ $}}
|
|
469 ; CHECK-NEXT: bb.2:
|
|
470 ; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
471 ; CHECK-NEXT: {{ $}}
|
|
472 ; CHECK-NEXT: %0.sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 %0.sub1, implicit $mode, implicit $exec
|
|
473 ; CHECK-NEXT: S_BRANCH %bb.1
|
221
|
474 bb.0:
|
|
475 liveins: $vgpr0
|
|
476
|
|
477 undef %0.sub1:vreg_64 = COPY killed $vgpr0
|
|
478
|
|
479 bb.1:
|
|
480 successors: %bb.2, %bb.1
|
|
481
|
|
482 %0:vreg_64 = COPY killed %0
|
|
483 S_CBRANCH_EXECNZ %bb.1, implicit $exec
|
|
484 S_BRANCH %bb.2
|
|
485
|
|
486 bb.2:
|
|
487 %0.sub1:vreg_64 = nofpexcept V_CEIL_F32_e32 %0.sub1, implicit $mode, implicit $exec
|
|
488 S_BRANCH %bb.1
|
|
489
|
|
490 ...
|