1 # RUN: llc -mtriple=aarch64-unknown-unknown -verify-machineinstrs -run-pass=legalizer %s -o - | FileCheck %s
3 ; ModuleID = '/tmp/test.ll'
4 source_filename = "/tmp/test.ll"
5 target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
6 target triple = "aarch64-unknown-unknown"
8 define i32 @legalize_phi(i32 %argc) {
13 define i64* @legalize_phi_ptr(i64* %a, i64* %b, i1 %cond) {
18 define i32 @legalize_phi_empty(i32 %argc) {
23 define i32 @legalize_phi_loop(i32 %argc) {
28 define i32 @legalize_phi_cycle(i32 %argc) {
32 define i32 @legalize_phi_same_bb(i32 %argc) {
37 define i32 @legalize_phi_diff_bb(i32 %argc, i32 %argc2) {
46 exposesReturnsTwice: false
48 regBankSelected: false
50 tracksRegLiveness: true
52 - { id: 0, class: _, preferred-register: '' }
53 - { id: 1, class: _, preferred-register: '' }
54 - { id: 2, class: _, preferred-register: '' }
55 - { id: 3, class: _, preferred-register: '' }
56 - { id: 4, class: _, preferred-register: '' }
57 - { id: 5, class: _, preferred-register: '' }
58 - { id: 6, class: _, preferred-register: '' }
59 - { id: 7, class: _, preferred-register: '' }
60 - { id: 8, class: _, preferred-register: '' }
61 - { id: 9, class: _, preferred-register: '' }
62 - { id: 10, class: _, preferred-register: '' }
65 ; CHECK-LABEL: name: legalize_phi
67 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000)
69 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
70 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
71 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
72 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
73 ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]]
74 ; CHECK: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
75 ; CHECK: G_BRCOND [[TRUNC]](s1), %bb.1
78 ; CHECK: successors: %bb.3(0x80000000)
79 ; CHECK: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]]
80 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)
83 ; CHECK: successors: %bb.3(0x80000000)
84 ; CHECK: [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C2]]
85 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32)
87 ; CHECK: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC1]](s16), %bb.1, [[TRUNC2]](s16), %bb.2
88 ; CHECK: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
89 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)
90 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C3]]
91 ; CHECK: $w0 = COPY [[AND]](s32)
92 ; CHECK: RET_ReallyLR implicit $w0
94 ; Test that we insert legalization artifacts(Truncs here) into the correct BBs
95 ; while legalizing the G_PHI to s16.
98 successors: %bb.1(0x40000000), %bb.2(0x40000000)
102 %1(s32) = G_CONSTANT i32 0
103 %3(s32) = G_CONSTANT i32 1
104 %6(s32) = G_CONSTANT i32 2
105 %2(s1) = G_ICMP intpred(ugt), %0(s32), %1
106 G_BRCOND %2(s1), %bb.1
110 successors: %bb.3(0x80000000)
112 %4(s32) = G_ADD %0, %3
113 %5(s1) = G_TRUNC %4(s32)
117 successors: %bb.3(0x80000000)
119 %7(s32) = G_ADD %0, %6
120 %8(s1) = G_TRUNC %7(s32)
123 %9(s1) = G_PHI %5(s1), %bb.1, %8(s1), %bb.2
124 %10(s32) = G_ZEXT %9(s1)
126 RET_ReallyLR implicit $w0
130 name: legalize_phi_ptr
132 exposesReturnsTwice: false
134 regBankSelected: false
136 tracksRegLiveness: true
138 - { id: 0, class: _, preferred-register: '' }
139 - { id: 1, class: _, preferred-register: '' }
140 - { id: 2, class: _, preferred-register: '' }
141 - { id: 3, class: _, preferred-register: '' }
142 - { id: 4, class: _, preferred-register: '' }
143 - { id: 5, class: _, preferred-register: '' }
146 ; CHECK-LABEL: name: legalize_phi_ptr
148 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000)
149 ; CHECK: liveins: $w2, $x0, $x1
150 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
151 ; CHECK: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1
152 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
153 ; CHECK: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY2]](s32)
154 ; CHECK: G_BRCOND [[TRUNC]](s1), %bb.1
157 ; CHECK: successors: %bb.2(0x80000000)
159 ; CHECK: [[PHI:%[0-9]+]]:_(p0) = G_PHI [[COPY]](p0), %bb.0, [[COPY1]](p0), %bb.1
160 ; CHECK: $x0 = COPY [[PHI]](p0)
161 ; CHECK: RET_ReallyLR implicit $x0
164 successors: %bb.2, %bb.3
165 liveins: $w2, $x0, $x1
170 %2(s1) = G_TRUNC %4(s32)
171 G_BRCOND %2(s1), %bb.2
178 %3(p0) = G_PHI %0(p0), %bb.1, %1(p0), %bb.2
180 RET_ReallyLR implicit $x0
184 name: legalize_phi_empty
186 exposesReturnsTwice: false
188 regBankSelected: false
190 tracksRegLiveness: true
192 - { id: 0, class: _, preferred-register: '' }
193 - { id: 1, class: _, preferred-register: '' }
194 - { id: 2, class: _, preferred-register: '' }
195 - { id: 3, class: _, preferred-register: '' }
196 - { id: 4, class: _, preferred-register: '' }
197 - { id: 5, class: _, preferred-register: '' }
198 - { id: 6, class: _, preferred-register: '' }
199 - { id: 7, class: _, preferred-register: '' }
200 - { id: 8, class: _, preferred-register: '' }
201 - { id: 9, class: _, preferred-register: '' }
202 - { id: 10, class: _, preferred-register: '' }
205 ; CHECK-LABEL: name: legalize_phi_empty
207 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000)
208 ; CHECK: liveins: $w0
209 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
210 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
211 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 3
212 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
213 ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]]
214 ; CHECK: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
215 ; CHECK: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]]
216 ; CHECK: G_BRCOND [[TRUNC]](s1), %bb.1
219 ; CHECK: successors: %bb.3(0x80000000)
220 ; CHECK: [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C2]]
221 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32)
224 ; CHECK: successors: %bb.3(0x80000000)
225 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)
227 ; CHECK: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC1]](s16), %bb.1, [[TRUNC2]](s16), %bb.2
228 ; CHECK: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
229 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)
230 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C3]]
231 ; CHECK: $w0 = COPY [[AND]](s32)
232 ; CHECK: RET_ReallyLR implicit $w0
234 successors: %bb.1(0x40000000), %bb.2(0x40000000)
236 ; Test that we properly legalize a phi with a predecessor that's empty
242 %1(s32) = G_CONSTANT i32 0
243 %3(s32) = G_CONSTANT i32 3
244 %6(s32) = G_CONSTANT i32 1
245 %2(s1) = G_ICMP intpred(ugt), %0(s32), %1
246 %4(s32) = G_ADD %0, %3
247 %5(s1) = G_TRUNC %4(s32)
248 G_BRCOND %2(s1), %bb.1
252 successors: %bb.3(0x80000000)
254 %7(s32) = G_ADD %0, %6
255 %8(s1) = G_TRUNC %7(s32)
259 successors: %bb.3(0x80000000)
263 %9(s1) = G_PHI %8(s1), %bb.1, %5(s1), %bb.2
264 %10(s32) = G_ZEXT %9(s1)
266 RET_ReallyLR implicit $w0
270 name: legalize_phi_loop
272 exposesReturnsTwice: false
274 regBankSelected: false
276 tracksRegLiveness: true
278 - { id: 0, class: _, preferred-register: '' }
279 - { id: 1, class: _, preferred-register: '' }
280 - { id: 2, class: _, preferred-register: '' }
281 - { id: 3, class: _, preferred-register: '' }
282 - { id: 4, class: _, preferred-register: '' }
283 - { id: 5, class: _, preferred-register: '' }
284 - { id: 6, class: _, preferred-register: '' }
285 - { id: 7, class: _, preferred-register: '' }
288 ; CHECK-LABEL: name: legalize_phi_loop
290 ; CHECK: successors: %bb.1(0x80000000)
291 ; CHECK: liveins: $w0
292 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
293 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
294 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
295 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[C1]](s32)
297 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000)
298 ; CHECK: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC]](s16), %bb.0, [[TRUNC3:%[0-9]+]](s16), %bb.1
299 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)
300 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32)
301 ; CHECK: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ANYEXT]], [[COPY1]]
302 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[ADD]](s32)
303 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
304 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[ADD]](s32)
305 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]]
306 ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[AND]](s32), [[COPY]]
307 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
308 ; CHECK: [[TRUNC3]]:_(s16) = G_TRUNC [[ADD]](s32)
309 ; CHECK: G_BRCOND [[TRUNC2]](s1), %bb.1
311 ; CHECK: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
312 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[ADD]](s32)
313 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C3]]
314 ; CHECK: $w0 = COPY [[AND1]](s32)
315 ; CHECK: RET_ReallyLR implicit $w0
317 successors: %bb.1(0x80000000)
319 ; Test that we properly legalize a phi that uses a value from the same BB
322 %2(s8) = G_CONSTANT i8 1
323 %7(s8) = G_CONSTANT i8 0
326 successors: %bb.1(0x40000000), %bb.3(0x40000000)
328 %1(s8) = G_PHI %7(s8), %bb.0, %3(s8), %bb.1
329 %3(s8) = G_ADD %1, %2
330 %4(s32) = G_ZEXT %3(s8)
331 %5(s1) = G_ICMP intpred(ugt), %4(s32), %0
332 G_BRCOND %5(s1), %bb.1
335 %6(s32) = G_ZEXT %3(s8)
337 RET_ReallyLR implicit $w0
341 name: legalize_phi_cycle
343 exposesReturnsTwice: false
345 regBankSelected: false
347 tracksRegLiveness: true
349 - { id: 0, class: _, preferred-register: '' }
350 - { id: 1, class: _, preferred-register: '' }
351 - { id: 2, class: _, preferred-register: '' }
352 - { id: 3, class: _, preferred-register: '' }
353 - { id: 4, class: _, preferred-register: '' }
356 ; CHECK-LABEL: name: legalize_phi_cycle
358 ; CHECK: successors: %bb.1(0x80000000)
359 ; CHECK: liveins: $w0
360 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
361 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
362 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[C]](s32)
364 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000)
365 ; CHECK: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC]](s16), %bb.0, [[COPY1:%[0-9]+]](s16), %bb.1
366 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[PHI]](s16)
367 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
368 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)
369 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C1]]
370 ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[AND]](s32), [[COPY]]
371 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
372 ; CHECK: [[COPY1]]:_(s16) = COPY [[PHI]](s16)
373 ; CHECK: G_BRCOND [[TRUNC2]](s1), %bb.1
375 ; CHECK: $w0 = COPY [[AND]](s32)
376 ; CHECK: RET_ReallyLR implicit $w0
378 successors: %bb.1(0x80000000)
380 ; Test that we properly legalize a phi that uses itself
384 %4(s8) = G_CONSTANT i8 0
387 successors: %bb.1(0x40000000), %bb.3(0x40000000)
389 %1(s8) = G_PHI %4(s8), %bb.0, %1(s8), %bb.1
390 %2(s32) = G_ZEXT %1(s8)
391 %3(s1) = G_ICMP intpred(ugt), %2(s32), %0
392 G_BRCOND %3(s1), %bb.1
396 RET_ReallyLR implicit $w0
400 name: legalize_phi_same_bb
402 exposesReturnsTwice: false
404 regBankSelected: false
406 tracksRegLiveness: true
408 - { id: 0, class: _, preferred-register: '' }
409 - { id: 1, class: _, preferred-register: '' }
410 - { id: 2, class: _, preferred-register: '' }
411 - { id: 3, class: _, preferred-register: '' }
412 - { id: 4, class: _, preferred-register: '' }
413 - { id: 5, class: _, preferred-register: '' }
414 - { id: 6, class: _, preferred-register: '' }
415 - { id: 7, class: _, preferred-register: '' }
416 - { id: 8, class: _, preferred-register: '' }
417 - { id: 9, class: _, preferred-register: '' }
418 - { id: 10, class: _, preferred-register: '' }
419 - { id: 11, class: _, preferred-register: '' }
420 - { id: 12, class: _, preferred-register: '' }
421 - { id: 13, class: _, preferred-register: '' }
422 - { id: 14, class: _, preferred-register: '' }
425 ; CHECK-LABEL: name: legalize_phi_same_bb
427 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000)
428 ; CHECK: liveins: $w0
429 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
430 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
431 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 3
432 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
433 ; CHECK: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 42
434 ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]]
435 ; CHECK: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
436 ; CHECK: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]]
437 ; CHECK: G_BRCOND [[TRUNC]](s1), %bb.1
440 ; CHECK: successors: %bb.3(0x80000000)
441 ; CHECK: [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C2]]
442 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32)
443 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32)
446 ; CHECK: successors: %bb.3(0x80000000)
447 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[C3]](s32)
448 ; CHECK: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)
450 ; CHECK: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC2]](s16), %bb.1, [[TRUNC4]](s16), %bb.2
451 ; CHECK: [[PHI1:%[0-9]+]]:_(s16) = G_PHI [[TRUNC1]](s16), %bb.1, [[TRUNC3]](s16), %bb.2
452 ; CHECK: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
453 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)
454 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C4]]
455 ; CHECK: [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
456 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI1]](s16)
457 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C5]]
458 ; CHECK: [[ADD2:%[0-9]+]]:_(s32) = G_ADD [[AND]], [[AND1]]
459 ; CHECK: $w0 = COPY [[ADD2]](s32)
460 ; CHECK: RET_ReallyLR implicit $w0
462 successors: %bb.1(0x40000000), %bb.2(0x40000000)
464 ; Make sure that we correctly insert the new legalized G_PHI at the
465 ; correct location (ie make sure G_PHIs are the first insts in the BB).
471 %1(s32) = G_CONSTANT i32 0
472 %3(s32) = G_CONSTANT i32 3
473 %6(s32) = G_CONSTANT i32 1
474 %14(s8) = G_CONSTANT i8 42
475 %2(s1) = G_ICMP intpred(ugt), %0(s32), %1
476 %4(s32) = G_ADD %0, %3
477 %5(s8) = G_TRUNC %4(s32)
478 G_BRCOND %2(s1), %bb.1
482 successors: %bb.3(0x80000000)
484 %7(s32) = G_ADD %0, %6
485 %8(s8) = G_TRUNC %7(s32)
489 successors: %bb.3(0x80000000)
493 %9(s8) = G_PHI %8(s8), %bb.1, %5(s8), %bb.2
494 %10(s8) = G_PHI %8(s8), %bb.1, %14(s8), %bb.2
495 %11(s32) = G_ZEXT %9(s8)
496 %12(s32) = G_ZEXT %10(s8)
497 %13(s32) = G_ADD %11, %12
499 RET_ReallyLR implicit $w0
503 name: legalize_phi_diff_bb
505 exposesReturnsTwice: false
507 regBankSelected: false
509 tracksRegLiveness: true
511 - { id: 0, class: _, preferred-register: '' }
512 - { id: 1, class: _, preferred-register: '' }
513 - { id: 2, class: _, preferred-register: '' }
514 - { id: 3, class: _, preferred-register: '' }
515 - { id: 4, class: _, preferred-register: '' }
516 - { id: 5, class: _, preferred-register: '' }
517 - { id: 6, class: _, preferred-register: '' }
518 - { id: 7, class: _, preferred-register: '' }
519 - { id: 8, class: _, preferred-register: '' }
520 - { id: 9, class: _, preferred-register: '' }
521 - { id: 10, class: _, preferred-register: '' }
522 - { id: 11, class: _, preferred-register: '' }
523 - { id: 12, class: _, preferred-register: '' }
524 - { id: 13, class: _, preferred-register: '' }
525 - { id: 14, class: _, preferred-register: '' }
526 - { id: 15, class: _, preferred-register: '' }
529 ; CHECK-LABEL: name: legalize_phi_diff_bb
531 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000)
532 ; CHECK: liveins: $w0, $w1
533 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
534 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
535 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
536 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 3
537 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
538 ; CHECK: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 44
539 ; CHECK: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 43
540 ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]]
541 ; CHECK: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
542 ; CHECK: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]]
543 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)
544 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)
545 ; CHECK: G_BRCOND [[TRUNC]](s1), %bb.1
548 ; CHECK: successors: %bb.2(0x40000000), %bb.1(0x40000000)
549 ; CHECK: [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC2]](s16), %bb.0, [[TRUNC5:%[0-9]+]](s16), %bb.1
550 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[PHI]](s16)
551 ; CHECK: [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
552 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)
553 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C5]]
554 ; CHECK: [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[AND]], [[C2]]
555 ; CHECK: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[ADD1]](s32), [[C3]]
556 ; CHECK: [[TRUNC4:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32)
557 ; CHECK: [[COPY2:%[0-9]+]]:_(s16) = COPY [[PHI]](s16)
558 ; CHECK: [[TRUNC5]]:_(s16) = G_TRUNC [[C4]](s32)
559 ; CHECK: G_BRCOND [[TRUNC4]](s1), %bb.2
562 ; CHECK: [[PHI1:%[0-9]+]]:_(s16) = G_PHI [[COPY2]](s16), %bb.1, [[TRUNC1]](s16), %bb.0
563 ; CHECK: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
564 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI1]](s16)
565 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C6]]
566 ; CHECK: $w0 = COPY [[AND1]](s32)
567 ; CHECK: RET_ReallyLR implicit $w0
569 successors: %bb.1(0x40000000), %bb.3(0x40000000)
571 ; Make sure that we correctly legalize PHIs sharing common defs
578 %2(s32) = G_CONSTANT i32 0
579 %4(s32) = G_CONSTANT i32 3
580 %9(s32) = G_CONSTANT i32 1
581 %11(s32) = G_CONSTANT i32 44
582 %15(s8) = G_CONSTANT i8 43
583 %3(s1) = G_ICMP intpred(ugt), %0(s32), %2
584 %5(s32) = G_ADD %0, %4
585 %6(s8) = G_TRUNC %5(s32)
586 G_BRCOND %3(s1), %bb.1
590 successors: %bb.3(0x40000000), %bb.1(0x40000000)
592 %7(s8) = G_PHI %6(s8), %bb.0, %15(s8), %bb.1
593 %8(s32) = G_ZEXT %7(s8)
594 %10(s32) = G_ADD %8, %9
595 %12(s1) = G_ICMP intpred(ugt), %10(s32), %11
596 G_BRCOND %12(s1), %bb.3
600 %13(s8) = G_PHI %7(s8), %bb.1, %6(s8), %bb.0
601 %14(s32) = G_ZEXT %13(s8)
603 RET_ReallyLR implicit $w0