[llvm-objdump] - Remove one overload of reportError. NFCI.
[llvm-complete.git] / test / CodeGen / AArch64 / GlobalISel / legalize-phi.mir
blob51f61ea773c3660415d1f4761b7cf1e77f3abaf1
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=aarch64-unknown-unknown -verify-machineinstrs -run-pass=legalizer %s -o - | FileCheck %s
3 --- |
4   ; ModuleID = '/tmp/test.ll'
5   source_filename = "/tmp/test.ll"
6   target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
7   target triple = "aarch64-unknown-unknown"
9   define i32 @legalize_phi(i32 %argc) {
10   entry:
11     ret i32 0
12   }
14   define i64* @legalize_phi_ptr(i64* %a, i64* %b, i1 %cond) {
15   entry:
16     ret i64* null
17   }
19   define i32 @legalize_phi_empty(i32 %argc) {
20   entry:
21     ret i32 0
22   }
24   define i32 @legalize_phi_loop(i32 %argc) {
25   entry:
26     ret i32 0
27   }
29   define i32 @legalize_phi_cycle(i32 %argc) {
30   entry:
31     ret i32 0
32   }
33   define i32 @legalize_phi_same_bb(i32 %argc) {
34   entry:
35     ret i32 0
36   }
38   define i32 @legalize_phi_diff_bb(i32 %argc, i32 %argc2) {
39   entry:
40     ret i32 0
41   }
43 ...
44 ---
45 name:            legalize_phi
46 alignment:       2
47 exposesReturnsTwice: false
48 legalized:       false
49 regBankSelected: false
50 selected:        false
51 tracksRegLiveness: true
52 registers:
53   - { id: 0, class: _, preferred-register: '' }
54   - { id: 1, class: _, preferred-register: '' }
55   - { id: 2, class: _, preferred-register: '' }
56   - { id: 3, class: _, preferred-register: '' }
57   - { id: 4, class: _, preferred-register: '' }
58   - { id: 5, class: _, preferred-register: '' }
59   - { id: 6, class: _, preferred-register: '' }
60   - { id: 7, class: _, preferred-register: '' }
61   - { id: 8, class: _, preferred-register: '' }
62   - { id: 9, class: _, preferred-register: '' }
63   - { id: 10, class: _, preferred-register: '' }
64 liveins:
65 body:             |
66   ; CHECK-LABEL: name: legalize_phi
67   ; CHECK: bb.0:
68   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
69   ; CHECK:   liveins: $w0
70   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
71   ; CHECK:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
72   ; CHECK:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
73   ; CHECK:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
74   ; CHECK:   [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]]
75   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
76   ; CHECK:   G_BRCOND [[TRUNC]](s1), %bb.1
77   ; CHECK:   G_BR %bb.2
78   ; CHECK: bb.1:
79   ; CHECK:   successors: %bb.3(0x80000000)
80   ; CHECK:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]]
81   ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)
82   ; CHECK:   G_BR %bb.3
83   ; CHECK: bb.2:
84   ; CHECK:   successors: %bb.3(0x80000000)
85   ; CHECK:   [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C2]]
86   ; CHECK:   [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32)
87   ; CHECK: bb.3:
88   ; CHECK:   [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC1]](s16), %bb.1, [[TRUNC2]](s16), %bb.2
89   ; CHECK:   [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
90   ; CHECK:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)
91   ; CHECK:   [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C3]]
92   ; CHECK:   $w0 = COPY [[AND]](s32)
93   ; CHECK:   RET_ReallyLR implicit $w0
94   bb.0:
95    ; Test that we insert legalization artifacts(Truncs here) into the correct BBs
96    ; while legalizing the G_PHI to s16.
99     successors: %bb.1(0x40000000), %bb.2(0x40000000)
100     liveins: $w0
102     %0(s32) = COPY $w0
103     %1(s32) = G_CONSTANT i32 0
104     %3(s32) = G_CONSTANT i32 1
105     %6(s32) = G_CONSTANT i32 2
106     %2(s1) = G_ICMP intpred(ugt), %0(s32), %1
107     G_BRCOND %2(s1), %bb.1
108     G_BR %bb.2
110   bb.1:
111     successors: %bb.3(0x80000000)
113     %4(s32) = G_ADD %0, %3
114     %5(s1) = G_TRUNC %4(s32)
115     G_BR %bb.3
117   bb.2:
118     successors: %bb.3(0x80000000)
120     %7(s32) = G_ADD %0, %6
121     %8(s1) = G_TRUNC %7(s32)
123   bb.3:
124     %9(s1) = G_PHI %5(s1), %bb.1, %8(s1), %bb.2
125     %11:_(s1) = G_PHI %5(s1), %bb.1, %8(s1), %bb.2
126     %10(s32) = G_ZEXT %9(s1)
127     $w0 = COPY %10(s32)
128     RET_ReallyLR implicit $w0
132 name:            legalize_phi_ptr
133 alignment:       2
134 exposesReturnsTwice: false
135 legalized:       false
136 regBankSelected: false
137 selected:        false
138 tracksRegLiveness: true
139 registers:
140   - { id: 0, class: _, preferred-register: '' }
141   - { id: 1, class: _, preferred-register: '' }
142   - { id: 2, class: _, preferred-register: '' }
143   - { id: 3, class: _, preferred-register: '' }
144   - { id: 4, class: _, preferred-register: '' }
145   - { id: 5, class: _, preferred-register: '' }
146 liveins:
147 body:             |
148   ; CHECK-LABEL: name: legalize_phi_ptr
149   ; CHECK: bb.0:
150   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
151   ; CHECK:   liveins: $w2, $x0, $x1
152   ; CHECK:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0
153   ; CHECK:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x1
154   ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
155   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY2]](s32)
156   ; CHECK:   G_BRCOND [[TRUNC]](s1), %bb.1
157   ; CHECK:   G_BR %bb.2
158   ; CHECK: bb.1:
159   ; CHECK:   successors: %bb.2(0x80000000)
160   ; CHECK: bb.2:
161   ; CHECK:   [[PHI:%[0-9]+]]:_(p0) = G_PHI [[COPY]](p0), %bb.0, [[COPY1]](p0), %bb.1
162   ; CHECK:   $x0 = COPY [[PHI]](p0)
163   ; CHECK:   RET_ReallyLR implicit $x0
164   bb.1:
166     successors: %bb.2, %bb.3
167     liveins: $w2, $x0, $x1
169     %0(p0) = COPY $x0
170     %1(p0) = COPY $x1
171     %4(s32) = COPY $w2
172     %2(s1) = G_TRUNC %4(s32)
173     G_BRCOND %2(s1), %bb.2
174     G_BR %bb.3
176   bb.2:
177     successors: %bb.3
179   bb.3:
180     %3(p0) = G_PHI %0(p0), %bb.1, %1(p0), %bb.2
181     $x0 = COPY %3(p0)
182     RET_ReallyLR implicit $x0
186 name:            legalize_phi_empty
187 alignment:       2
188 exposesReturnsTwice: false
189 legalized:       false
190 regBankSelected: false
191 selected:        false
192 tracksRegLiveness: true
193 registers:
194   - { id: 0, class: _, preferred-register: '' }
195   - { id: 1, class: _, preferred-register: '' }
196   - { id: 2, class: _, preferred-register: '' }
197   - { id: 3, class: _, preferred-register: '' }
198   - { id: 4, class: _, preferred-register: '' }
199   - { id: 5, class: _, preferred-register: '' }
200   - { id: 6, class: _, preferred-register: '' }
201   - { id: 7, class: _, preferred-register: '' }
202   - { id: 8, class: _, preferred-register: '' }
203   - { id: 9, class: _, preferred-register: '' }
204   - { id: 10, class: _, preferred-register: '' }
205 liveins:
206 body:             |
207   ; CHECK-LABEL: name: legalize_phi_empty
208   ; CHECK: bb.0:
209   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
210   ; CHECK:   liveins: $w0
211   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
212   ; CHECK:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
213   ; CHECK:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 3
214   ; CHECK:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
215   ; CHECK:   [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]]
216   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
217   ; CHECK:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]]
218   ; CHECK:   G_BRCOND [[TRUNC]](s1), %bb.1
219   ; CHECK:   G_BR %bb.2
220   ; CHECK: bb.1:
221   ; CHECK:   successors: %bb.3(0x80000000)
222   ; CHECK:   [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C2]]
223   ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32)
224   ; CHECK:   G_BR %bb.3
225   ; CHECK: bb.2:
226   ; CHECK:   successors: %bb.3(0x80000000)
227   ; CHECK:   [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)
228   ; CHECK: bb.3:
229   ; CHECK:   [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC1]](s16), %bb.1, [[TRUNC2]](s16), %bb.2
230   ; CHECK:   [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
231   ; CHECK:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)
232   ; CHECK:   [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C3]]
233   ; CHECK:   $w0 = COPY [[AND]](s32)
234   ; CHECK:   RET_ReallyLR implicit $w0
235   bb.0:
236     successors: %bb.1(0x40000000), %bb.2(0x40000000)
237     liveins: $w0
238    ; Test that we properly legalize a phi with a predecessor that's empty
243     %0(s32) = COPY $w0
244     %1(s32) = G_CONSTANT i32 0
245     %3(s32) = G_CONSTANT i32 3
246     %6(s32) = G_CONSTANT i32 1
247     %2(s1) = G_ICMP intpred(ugt), %0(s32), %1
248     %4(s32) = G_ADD %0, %3
249     %5(s1) = G_TRUNC %4(s32)
250     G_BRCOND %2(s1), %bb.1
251     G_BR %bb.2
253   bb.1:
254     successors: %bb.3(0x80000000)
256     %7(s32) = G_ADD %0, %6
257     %8(s1) = G_TRUNC %7(s32)
258     G_BR %bb.3
260   bb.2:
261     successors: %bb.3(0x80000000)
264   bb.3:
265     %9(s1) = G_PHI %8(s1), %bb.1, %5(s1), %bb.2
266     %10(s32) = G_ZEXT %9(s1)
267     $w0 = COPY %10(s32)
268     RET_ReallyLR implicit $w0
272 name:            legalize_phi_loop
273 alignment:       2
274 exposesReturnsTwice: false
275 legalized:       false
276 regBankSelected: false
277 selected:        false
278 tracksRegLiveness: true
279 registers:
280   - { id: 0, class: _, preferred-register: '' }
281   - { id: 1, class: _, preferred-register: '' }
282   - { id: 2, class: _, preferred-register: '' }
283   - { id: 3, class: _, preferred-register: '' }
284   - { id: 4, class: _, preferred-register: '' }
285   - { id: 5, class: _, preferred-register: '' }
286   - { id: 6, class: _, preferred-register: '' }
287   - { id: 7, class: _, preferred-register: '' }
288 liveins:
289 body:             |
290   ; CHECK-LABEL: name: legalize_phi_loop
291   ; CHECK: bb.0:
292   ; CHECK:   successors: %bb.1(0x80000000)
293   ; CHECK:   liveins: $w0
294   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
295   ; CHECK:   [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0
296   ; CHECK: bb.1:
297   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
298   ; CHECK:   [[PHI:%[0-9]+]]:_(s16) = G_PHI [[C]](s16), %bb.0, %13(s16), %bb.1
299   ; CHECK:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)
300   ; CHECK:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
301   ; CHECK:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[ANYEXT]], [[C1]]
302   ; CHECK:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
303   ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY [[ADD]](s32)
304   ; CHECK:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]]
305   ; CHECK:   [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[AND]](s32), [[COPY]]
306   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
307   ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)
308   ; CHECK:   G_BRCOND [[TRUNC]](s1), %bb.1
309   ; CHECK: bb.2:
310   ; CHECK:   [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
311   ; CHECK:   [[COPY2:%[0-9]+]]:_(s32) = COPY [[ADD]](s32)
312   ; CHECK:   [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]]
313   ; CHECK:   $w0 = COPY [[AND1]](s32)
314   ; CHECK:   RET_ReallyLR implicit $w0
315   bb.0:
316     successors: %bb.1(0x80000000)
317     liveins: $w0
318    ; Test that we properly legalize a phi that uses a value from the same BB
320     %0(s32) = COPY $w0
321     %2(s8) = G_CONSTANT i8 1
322     %7(s8) = G_CONSTANT i8 0
324   bb.1:
325     successors: %bb.1(0x40000000), %bb.3(0x40000000)
327     %1(s8) = G_PHI %7(s8), %bb.0, %3(s8), %bb.1
328     %3(s8) = G_ADD %1, %2
329     %4(s32) = G_ZEXT %3(s8)
330     %5(s1) = G_ICMP intpred(ugt), %4(s32), %0
331     G_BRCOND %5(s1), %bb.1
333   bb.3:
334     %6(s32) = G_ZEXT %3(s8)
335     $w0 = COPY %6(s32)
336     RET_ReallyLR implicit $w0
340 name:            legalize_phi_cycle
341 alignment:       2
342 exposesReturnsTwice: false
343 legalized:       false
344 regBankSelected: false
345 selected:        false
346 tracksRegLiveness: true
347 registers:
348   - { id: 0, class: _, preferred-register: '' }
349   - { id: 1, class: _, preferred-register: '' }
350   - { id: 2, class: _, preferred-register: '' }
351   - { id: 3, class: _, preferred-register: '' }
352   - { id: 4, class: _, preferred-register: '' }
353 liveins:
354 body:             |
355   ; CHECK-LABEL: name: legalize_phi_cycle
356   ; CHECK: bb.0:
357   ; CHECK:   successors: %bb.1(0x80000000)
358   ; CHECK:   liveins: $w0
359   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
360   ; CHECK:   [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0
361   ; CHECK: bb.1:
362   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
363   ; CHECK:   [[PHI:%[0-9]+]]:_(s16) = G_PHI [[C]](s16), %bb.0, %7(s16), %bb.1
364   ; CHECK:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
365   ; CHECK:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)
366   ; CHECK:   [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C1]]
367   ; CHECK:   [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[AND]](s32), [[COPY]]
368   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
369   ; CHECK:   [[COPY1:%[0-9]+]]:_(s16) = COPY [[PHI]](s16)
370   ; CHECK:   G_BRCOND [[TRUNC]](s1), %bb.1
371   ; CHECK: bb.2:
372   ; CHECK:   $w0 = COPY [[AND]](s32)
373   ; CHECK:   RET_ReallyLR implicit $w0
374   bb.0:
375     successors: %bb.1(0x80000000)
376     liveins: $w0
377    ; Test that we properly legalize a phi that uses itself
380     %0(s32) = COPY $w0
381     %4(s8) = G_CONSTANT i8 0
383   bb.1:
384     successors: %bb.1(0x40000000), %bb.3(0x40000000)
386     %1(s8) = G_PHI %4(s8), %bb.0, %1(s8), %bb.1
387     %2(s32) = G_ZEXT %1(s8)
388     %3(s1) = G_ICMP intpred(ugt), %2(s32), %0
389     G_BRCOND %3(s1), %bb.1
391   bb.3:
392     $w0 = COPY %2(s32)
393     RET_ReallyLR implicit $w0
397 name:            legalize_phi_same_bb
398 alignment:       2
399 exposesReturnsTwice: false
400 legalized:       false
401 regBankSelected: false
402 selected:        false
403 tracksRegLiveness: true
404 registers:
405   - { id: 0, class: _, preferred-register: '' }
406   - { id: 1, class: _, preferred-register: '' }
407   - { id: 2, class: _, preferred-register: '' }
408   - { id: 3, class: _, preferred-register: '' }
409   - { id: 4, class: _, preferred-register: '' }
410   - { id: 5, class: _, preferred-register: '' }
411   - { id: 6, class: _, preferred-register: '' }
412   - { id: 7, class: _, preferred-register: '' }
413   - { id: 8, class: _, preferred-register: '' }
414   - { id: 9, class: _, preferred-register: '' }
415   - { id: 10, class: _, preferred-register: '' }
416   - { id: 11, class: _, preferred-register: '' }
417   - { id: 12, class: _, preferred-register: '' }
418   - { id: 13, class: _, preferred-register: '' }
419   - { id: 14, class: _, preferred-register: '' }
420 liveins:
421 body:             |
422   ; CHECK-LABEL: name: legalize_phi_same_bb
423   ; CHECK: bb.0:
424   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
425   ; CHECK:   liveins: $w0
426   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
427   ; CHECK:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
428   ; CHECK:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 3
429   ; CHECK:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
430   ; CHECK:   [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]]
431   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
432   ; CHECK:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]]
433   ; CHECK:   G_BRCOND [[TRUNC]](s1), %bb.1
434   ; CHECK:   G_BR %bb.2
435   ; CHECK: bb.1:
436   ; CHECK:   successors: %bb.3(0x80000000)
437   ; CHECK:   [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C2]]
438   ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32)
439   ; CHECK:   [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[ADD1]](s32)
440   ; CHECK:   G_BR %bb.3
441   ; CHECK: bb.2:
442   ; CHECK:   successors: %bb.3(0x80000000)
443   ; CHECK:   [[C3:%[0-9]+]]:_(s16) = G_CONSTANT i16 42
444   ; CHECK:   [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)
445   ; CHECK: bb.3:
446   ; CHECK:   [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC2]](s16), %bb.1, [[TRUNC3]](s16), %bb.2
447   ; CHECK:   [[PHI1:%[0-9]+]]:_(s16) = G_PHI [[TRUNC1]](s16), %bb.1, [[C3]](s16), %bb.2
448   ; CHECK:   [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
449   ; CHECK:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)
450   ; CHECK:   [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C4]]
451   ; CHECK:   [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI1]](s16)
452   ; CHECK:   [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C4]]
453   ; CHECK:   [[ADD2:%[0-9]+]]:_(s32) = G_ADD [[AND]], [[AND1]]
454   ; CHECK:   $w0 = COPY [[ADD2]](s32)
455   ; CHECK:   RET_ReallyLR implicit $w0
456   bb.0:
457     successors: %bb.1(0x40000000), %bb.2(0x40000000)
458     liveins: $w0
459    ; Make sure that we correctly insert the new legalized G_PHI at the
460    ; correct location (ie make sure G_PHIs are the first insts in the BB).
465     %0(s32) = COPY $w0
466     %1(s32) = G_CONSTANT i32 0
467     %3(s32) = G_CONSTANT i32 3
468     %6(s32) = G_CONSTANT i32 1
469     %14(s8) = G_CONSTANT i8 42
470     %2(s1) = G_ICMP intpred(ugt), %0(s32), %1
471     %4(s32) = G_ADD %0, %3
472     %5(s8) = G_TRUNC %4(s32)
473     G_BRCOND %2(s1), %bb.1
474     G_BR %bb.2
476   bb.1:
477     successors: %bb.3(0x80000000)
479     %7(s32) = G_ADD %0, %6
480     %8(s8) = G_TRUNC %7(s32)
481     G_BR %bb.3
483   bb.2:
484     successors: %bb.3(0x80000000)
487   bb.3:
488     %9(s8) = G_PHI %8(s8), %bb.1, %5(s8), %bb.2
489     %10(s8) = G_PHI %8(s8), %bb.1, %14(s8), %bb.2
490     %11(s32) = G_ZEXT %9(s8)
491     %12(s32) = G_ZEXT %10(s8)
492     %13(s32) = G_ADD %11, %12
493     $w0 = COPY %13(s32)
494     RET_ReallyLR implicit $w0
498 name:            legalize_phi_diff_bb
499 alignment:       2
500 exposesReturnsTwice: false
501 legalized:       false
502 regBankSelected: false
503 selected:        false
504 tracksRegLiveness: true
505 registers:
506   - { id: 0, class: _, preferred-register: '' }
507   - { id: 1, class: _, preferred-register: '' }
508   - { id: 2, class: _, preferred-register: '' }
509   - { id: 3, class: _, preferred-register: '' }
510   - { id: 4, class: _, preferred-register: '' }
511   - { id: 5, class: _, preferred-register: '' }
512   - { id: 6, class: _, preferred-register: '' }
513   - { id: 7, class: _, preferred-register: '' }
514   - { id: 8, class: _, preferred-register: '' }
515   - { id: 9, class: _, preferred-register: '' }
516   - { id: 10, class: _, preferred-register: '' }
517   - { id: 11, class: _, preferred-register: '' }
518   - { id: 12, class: _, preferred-register: '' }
519   - { id: 13, class: _, preferred-register: '' }
520   - { id: 14, class: _, preferred-register: '' }
521   - { id: 15, class: _, preferred-register: '' }
522 liveins:
523 body:             |
524   ; CHECK-LABEL: name: legalize_phi_diff_bb
525   ; CHECK: bb.0:
526   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
527   ; CHECK:   liveins: $w0, $w1
528   ; CHECK:   [[COPY:%[0-9]+]]:_(s32) = COPY $w0
529   ; CHECK:   [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
530   ; CHECK:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
531   ; CHECK:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 3
532   ; CHECK:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
533   ; CHECK:   [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 44
534   ; CHECK:   [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[C]]
535   ; CHECK:   [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32)
536   ; CHECK:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[C1]]
537   ; CHECK:   [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)
538   ; CHECK:   [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[ADD]](s32)
539   ; CHECK:   G_BRCOND [[TRUNC]](s1), %bb.1
540   ; CHECK:   G_BR %bb.2
541   ; CHECK: bb.1:
542   ; CHECK:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
543   ; CHECK:   [[PHI:%[0-9]+]]:_(s16) = G_PHI [[TRUNC2]](s16), %bb.0, %21(s16), %bb.1
544   ; CHECK:   [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
545   ; CHECK:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI]](s16)
546   ; CHECK:   [[AND:%[0-9]+]]:_(s32) = G_AND [[ANYEXT]], [[C4]]
547   ; CHECK:   [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[AND]], [[C2]]
548   ; CHECK:   [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[ADD1]](s32), [[C3]]
549   ; CHECK:   [[TRUNC3:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32)
550   ; CHECK:   [[COPY2:%[0-9]+]]:_(s16) = COPY [[PHI]](s16)
551   ; CHECK:   [[C5:%[0-9]+]]:_(s16) = G_CONSTANT i16 43
552   ; CHECK:   G_BRCOND [[TRUNC3]](s1), %bb.2
553   ; CHECK:   G_BR %bb.1
554   ; CHECK: bb.2:
555   ; CHECK:   [[PHI1:%[0-9]+]]:_(s16) = G_PHI [[COPY2]](s16), %bb.1, [[TRUNC1]](s16), %bb.0
556   ; CHECK:   [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
557   ; CHECK:   [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[PHI1]](s16)
558   ; CHECK:   [[AND1:%[0-9]+]]:_(s32) = G_AND [[ANYEXT1]], [[C6]]
559   ; CHECK:   $w0 = COPY [[AND1]](s32)
560   ; CHECK:   RET_ReallyLR implicit $w0
561   bb.0:
562     successors: %bb.1(0x40000000), %bb.3(0x40000000)
563     liveins: $w0, $w1
564    ; Make sure that we correctly legalize PHIs sharing common defs
565    ; in different BBs.
569     %0(s32) = COPY $w0
570     %1(s32) = COPY $w1
571     %2(s32) = G_CONSTANT i32 0
572     %4(s32) = G_CONSTANT i32 3
573     %9(s32) = G_CONSTANT i32 1
574     %11(s32) = G_CONSTANT i32 44
575     %15(s8) = G_CONSTANT i8 43
576     %3(s1) = G_ICMP intpred(ugt), %0(s32), %2
577     %5(s32) = G_ADD %0, %4
578     %6(s8) = G_TRUNC %5(s32)
579     G_BRCOND %3(s1), %bb.1
580     G_BR %bb.3
582   bb.1:
583     successors: %bb.3(0x40000000), %bb.1(0x40000000)
585     %7(s8) = G_PHI %6(s8), %bb.0, %15(s8), %bb.1
586     %8(s32) = G_ZEXT %7(s8)
587     %10(s32) = G_ADD %8, %9
588     %12(s1) = G_ICMP intpred(ugt), %10(s32), %11
589     G_BRCOND %12(s1), %bb.3
590     G_BR %bb.1
592   bb.3:
593     %13(s8) = G_PHI %7(s8), %bb.1, %6(s8), %bb.0
594     %14(s32) = G_ZEXT %13(s8)
595     $w0 = COPY %14(s32)
596     RET_ReallyLR implicit $w0