[libc++] Add a test to make sure the type traits derive from integral_constant (...
[llvm-project.git] / llvm / test / CodeGen / RISCV / GlobalISel / legalizer / legalize-phi-rv32.mir
blobc8f73afc0ac7c7c3a457e6e703b6f7bca0e91422
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2
2 # RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - \
3 # RUN:   | FileCheck %s
5 --- |
6   define i1 @phi_i1(i1 %cnd, i1 %a, i1 %b) {
7   entry:
8     br i1 %cnd, label %cond.end, label %cond.false
10   cond.false:                                       ; preds = %entry
11     br label %cond.end
13   cond.end:                                         ; preds = %entry, %cond.false
14     %cond = phi i1 [ %b, %cond.false ], [ %a, %entry ]
15     ret i1 %cond
16   }
18   define i8 @phi_i8(i1 %cnd, i8 %a, i8 %b) {
19   entry:
20     br i1 %cnd, label %cond.end, label %cond.false
22   cond.false:                                       ; preds = %entry
23     br label %cond.end
25   cond.end:                                         ; preds = %entry, %cond.false
26     %cond = phi i8 [ %b, %cond.false ], [ %a, %entry ]
27     ret i8 %cond
28   }
30   define i16 @phi_i16(i1 %cnd, i16 %a, i16 %b) {
31   entry:
32     br i1 %cnd, label %cond.end, label %cond.false
34   cond.false:                                       ; preds = %entry
35     br label %cond.end
37   cond.end:                                         ; preds = %entry, %cond.false
38     %cond = phi i16 [ %b, %cond.false ], [ %a, %entry ]
39     ret i16 %cond
40   }
42   define i32 @phi_i32(i1 %cnd, i32 %a, i32 %b) {
43   entry:
44     br i1 %cnd, label %cond.end, label %cond.false
46   cond.false:                                       ; preds = %entry
47     br label %cond.end
49   cond.end:                                         ; preds = %entry, %cond.false
50     %cond = phi i32 [ %b, %cond.false ], [ %a, %entry ]
51     ret i32 %cond
52   }
54   define ptr @phi_ptr(i1 %cnd, ptr %a, ptr %b) {
55   entry:
56     br i1 %cnd, label %cond.end, label %cond.false
58   cond.false:                                       ; preds = %entry
59     br label %cond.end
61   cond.end:                                         ; preds = %entry, %cond.false
62     %cond = phi ptr [ %b, %cond.false ], [ %a, %entry ]
63     ret ptr %cond
64   }
66   define i48 @phi_i48(i1 %cnd, i48 %a, i48 %b) {
67   entry:
68     br i1 %cnd, label %cond.end, label %cond.false
70   cond.false:                                       ; preds = %entry
71     br label %cond.end
73   cond.end:                                         ; preds = %entry, %cond.false
74     %cond = phi i48 [ %b, %cond.false ], [ %a, %entry ]
75     ret i48 %cond
76   }
78   define i64 @phi_i64(i1 %cnd, i64 %a, i64 %b) {
79   entry:
80     br i1 %cnd, label %cond.end, label %cond.false
82   cond.false:                                       ; preds = %entry
83     br label %cond.end
85   cond.end:                                         ; preds = %entry, %cond.false
86     %cond = phi i64 [ %b, %cond.false ], [ %a, %entry ]
87     ret i64 %cond
88   }
90   define i72 @phi_i72(i1 %cnd, i72 %a, i72 %b) {
91   entry:
92     br i1 %cnd, label %cond.end, label %cond.false
94   cond.false:                                       ; preds = %entry
95     br label %cond.end
97   cond.end:                                         ; preds = %entry, %cond.false
98     %cond = phi i72 [ %b, %cond.false ], [ %a, %entry ]
99     ret i72 %cond
100   }
104 name:            phi_i1
105 alignment:       4
106 tracksRegLiveness: true
107 registers:
108   - { id: 0, class: _ }
109   - { id: 1, class: _ }
110   - { id: 2, class: _ }
111   - { id: 3, class: _ }
112   - { id: 4, class: _ }
113   - { id: 5, class: _ }
114   - { id: 6, class: _ }
115   - { id: 7, class: _ }
116 frameInfo:
117   maxAlignment:    1
118 machineFunctionInfo:
119   varArgsFrameIndex: 0
120   varArgsSaveSize: 0
121 body:             |
122   ; CHECK-LABEL: name: phi_i1
123   ; CHECK: bb.0.entry:
124   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
125   ; CHECK-NEXT:   liveins: $x10, $x11, $x12
126   ; CHECK-NEXT: {{  $}}
127   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
128   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
129   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $x12
130   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
131   ; CHECK-NEXT:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
132   ; CHECK-NEXT:   G_BRCOND [[AND]](s32), %bb.2
133   ; CHECK-NEXT:   G_BR %bb.1
134   ; CHECK-NEXT: {{  $}}
135   ; CHECK-NEXT: bb.1.cond.false:
136   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
137   ; CHECK-NEXT: {{  $}}
138   ; CHECK-NEXT: bb.2.cond.end:
139   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY2]](s32), %bb.1, [[COPY1]](s32), %bb.0
140   ; CHECK-NEXT:   $x10 = COPY [[PHI]](s32)
141   ; CHECK-NEXT:   PseudoRET implicit $x10
142   bb.1.entry:
143     liveins: $x10, $x11, $x12
145     %3:_(s32) = COPY $x10
146     %0:_(s1) = G_TRUNC %3(s32)
147     %4:_(s32) = COPY $x11
148     %1:_(s1) = G_TRUNC %4(s32)
149     %5:_(s32) = COPY $x12
150     %2:_(s1) = G_TRUNC %5(s32)
151     G_BRCOND %0(s1), %bb.3
152     G_BR %bb.2
154   bb.2.cond.false:
156   bb.3.cond.end:
157     %6:_(s1) = G_PHI %2(s1), %bb.2, %1(s1), %bb.1
158     %7:_(s32) = G_ANYEXT %6(s1)
159     $x10 = COPY %7(s32)
160     PseudoRET implicit $x10
164 name:            phi_i8
165 alignment:       4
166 tracksRegLiveness: true
167 registers:
168   - { id: 0, class: _ }
169   - { id: 1, class: _ }
170   - { id: 2, class: _ }
171   - { id: 3, class: _ }
172   - { id: 4, class: _ }
173   - { id: 5, class: _ }
174   - { id: 6, class: _ }
175   - { id: 7, class: _ }
176 frameInfo:
177   maxAlignment:    1
178 machineFunctionInfo:
179   varArgsFrameIndex: 0
180   varArgsSaveSize: 0
181 body:             |
182   ; CHECK-LABEL: name: phi_i8
183   ; CHECK: bb.0.entry:
184   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
185   ; CHECK-NEXT:   liveins: $x10, $x11, $x12
186   ; CHECK-NEXT: {{  $}}
187   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
188   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
189   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $x12
190   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
191   ; CHECK-NEXT:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
192   ; CHECK-NEXT:   G_BRCOND [[AND]](s32), %bb.2
193   ; CHECK-NEXT:   G_BR %bb.1
194   ; CHECK-NEXT: {{  $}}
195   ; CHECK-NEXT: bb.1.cond.false:
196   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
197   ; CHECK-NEXT: {{  $}}
198   ; CHECK-NEXT: bb.2.cond.end:
199   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY2]](s32), %bb.1, [[COPY1]](s32), %bb.0
200   ; CHECK-NEXT:   $x10 = COPY [[PHI]](s32)
201   ; CHECK-NEXT:   PseudoRET implicit $x10
202   bb.1.entry:
203     liveins: $x10, $x11, $x12
205     %3:_(s32) = COPY $x10
206     %0:_(s1) = G_TRUNC %3(s32)
207     %4:_(s32) = COPY $x11
208     %1:_(s8) = G_TRUNC %4(s32)
209     %5:_(s32) = COPY $x12
210     %2:_(s8) = G_TRUNC %5(s32)
211     G_BRCOND %0(s1), %bb.3
212     G_BR %bb.2
214   bb.2.cond.false:
216   bb.3.cond.end:
217     %6:_(s8) = G_PHI %2(s8), %bb.2, %1(s8), %bb.1
218     %7:_(s32) = G_ANYEXT %6(s8)
219     $x10 = COPY %7(s32)
220     PseudoRET implicit $x10
224 name:            phi_i16
225 alignment:       4
226 tracksRegLiveness: true
227 registers:
228   - { id: 0, class: _ }
229   - { id: 1, class: _ }
230   - { id: 2, class: _ }
231   - { id: 3, class: _ }
232   - { id: 4, class: _ }
233   - { id: 5, class: _ }
234   - { id: 6, class: _ }
235   - { id: 7, class: _ }
236 frameInfo:
237   maxAlignment:    1
238 machineFunctionInfo:
239   varArgsFrameIndex: 0
240   varArgsSaveSize: 0
241 body:             |
242   ; CHECK-LABEL: name: phi_i16
243   ; CHECK: bb.0.entry:
244   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
245   ; CHECK-NEXT:   liveins: $x10, $x11, $x12
246   ; CHECK-NEXT: {{  $}}
247   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
248   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
249   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $x12
250   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
251   ; CHECK-NEXT:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
252   ; CHECK-NEXT:   G_BRCOND [[AND]](s32), %bb.2
253   ; CHECK-NEXT:   G_BR %bb.1
254   ; CHECK-NEXT: {{  $}}
255   ; CHECK-NEXT: bb.1.cond.false:
256   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
257   ; CHECK-NEXT: {{  $}}
258   ; CHECK-NEXT: bb.2.cond.end:
259   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY2]](s32), %bb.1, [[COPY1]](s32), %bb.0
260   ; CHECK-NEXT:   $x10 = COPY [[PHI]](s32)
261   ; CHECK-NEXT:   PseudoRET implicit $x10
262   bb.1.entry:
263     liveins: $x10, $x11, $x12
265     %3:_(s32) = COPY $x10
266     %0:_(s1) = G_TRUNC %3(s32)
267     %4:_(s32) = COPY $x11
268     %1:_(s16) = G_TRUNC %4(s32)
269     %5:_(s32) = COPY $x12
270     %2:_(s16) = G_TRUNC %5(s32)
271     G_BRCOND %0(s1), %bb.3
272     G_BR %bb.2
274   bb.2.cond.false:
276   bb.3.cond.end:
277     %6:_(s16) = G_PHI %2(s16), %bb.2, %1(s16), %bb.1
278     %7:_(s32) = G_ANYEXT %6(s16)
279     $x10 = COPY %7(s32)
280     PseudoRET implicit $x10
284 name:            phi_i32
285 alignment:       4
286 tracksRegLiveness: true
287 registers:
288   - { id: 0, class: _ }
289   - { id: 1, class: _ }
290   - { id: 2, class: _ }
291   - { id: 3, class: _ }
292   - { id: 4, class: _ }
293 frameInfo:
294   maxAlignment:    1
295 machineFunctionInfo:
296   varArgsFrameIndex: 0
297   varArgsSaveSize: 0
298 body:             |
299   ; CHECK-LABEL: name: phi_i32
300   ; CHECK: bb.0.entry:
301   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
302   ; CHECK-NEXT:   liveins: $x10, $x11, $x12
303   ; CHECK-NEXT: {{  $}}
304   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
305   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
306   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $x12
307   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
308   ; CHECK-NEXT:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
309   ; CHECK-NEXT:   G_BRCOND [[AND]](s32), %bb.2
310   ; CHECK-NEXT:   G_BR %bb.1
311   ; CHECK-NEXT: {{  $}}
312   ; CHECK-NEXT: bb.1.cond.false:
313   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
314   ; CHECK-NEXT: {{  $}}
315   ; CHECK-NEXT: bb.2.cond.end:
316   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY2]](s32), %bb.1, [[COPY1]](s32), %bb.0
317   ; CHECK-NEXT:   $x10 = COPY [[PHI]](s32)
318   ; CHECK-NEXT:   PseudoRET implicit $x10
319   bb.1.entry:
320     liveins: $x10, $x11, $x12
322     %3:_(s32) = COPY $x10
323     %0:_(s1) = G_TRUNC %3(s32)
324     %1:_(s32) = COPY $x11
325     %2:_(s32) = COPY $x12
326     G_BRCOND %0(s1), %bb.3
327     G_BR %bb.2
329   bb.2.cond.false:
331   bb.3.cond.end:
332     %4:_(s32) = G_PHI %2(s32), %bb.2, %1(s32), %bb.1
333     $x10 = COPY %4(s32)
334     PseudoRET implicit $x10
338 name:            phi_ptr
339 alignment:       4
340 tracksRegLiveness: true
341 registers:
342   - { id: 0, class: _ }
343   - { id: 1, class: _ }
344   - { id: 2, class: _ }
345   - { id: 3, class: _ }
346   - { id: 4, class: _ }
347 frameInfo:
348   maxAlignment:    1
349 machineFunctionInfo:
350   varArgsFrameIndex: 0
351   varArgsSaveSize: 0
352 body:             |
353   ; CHECK-LABEL: name: phi_ptr
354   ; CHECK: bb.0.entry:
355   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
356   ; CHECK-NEXT:   liveins: $x10, $x11, $x12
357   ; CHECK-NEXT: {{  $}}
358   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
359   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
360   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $x12
361   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
362   ; CHECK-NEXT:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
363   ; CHECK-NEXT:   G_BRCOND [[AND]](s32), %bb.2
364   ; CHECK-NEXT:   G_BR %bb.1
365   ; CHECK-NEXT: {{  $}}
366   ; CHECK-NEXT: bb.1.cond.false:
367   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
368   ; CHECK-NEXT: {{  $}}
369   ; CHECK-NEXT: bb.2.cond.end:
370   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:_(p0) = G_PHI [[COPY2]](p0), %bb.1, [[COPY1]](p0), %bb.0
371   ; CHECK-NEXT:   $x10 = COPY [[PHI]](p0)
372   ; CHECK-NEXT:   PseudoRET implicit $x10
373   bb.1.entry:
374     liveins: $x10, $x11, $x12
376     %3:_(s32) = COPY $x10
377     %0:_(s1) = G_TRUNC %3(s32)
378     %1:_(p0) = COPY $x11
379     %2:_(p0) = COPY $x12
380     G_BRCOND %0(s1), %bb.3
381     G_BR %bb.2
383   bb.2.cond.false:
385   bb.3.cond.end:
386     %4:_(p0) = G_PHI %2(p0), %bb.2, %1(p0), %bb.1
387     $x10 = COPY %4(p0)
388     PseudoRET implicit $x10
392 name:            phi_i48
393 alignment:       4
394 tracksRegLiveness: true
395 registers:
396   - { id: 0, class: _ }
397   - { id: 1, class: _ }
398   - { id: 2, class: _ }
399   - { id: 3, class: _ }
400   - { id: 4, class: _ }
401   - { id: 5, class: _ }
402   - { id: 6, class: _ }
403   - { id: 7, class: _ }
404   - { id: 8, class: _ }
405   - { id: 9, class: _ }
406   - { id: 10, class: _ }
407   - { id: 11, class: _ }
408   - { id: 12, class: _ }
409   - { id: 13, class: _ }
410 frameInfo:
411   maxAlignment:    1
412 machineFunctionInfo:
413   varArgsFrameIndex: 0
414   varArgsSaveSize: 0
415 body:             |
416   ; CHECK-LABEL: name: phi_i48
417   ; CHECK: bb.0.entry:
418   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
419   ; CHECK-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14
420   ; CHECK-NEXT: {{  $}}
421   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
422   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
423   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $x12
424   ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $x13
425   ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $x14
426   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
427   ; CHECK-NEXT:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
428   ; CHECK-NEXT:   G_BRCOND [[AND]](s32), %bb.2
429   ; CHECK-NEXT:   G_BR %bb.1
430   ; CHECK-NEXT: {{  $}}
431   ; CHECK-NEXT: bb.1.cond.false:
432   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
433   ; CHECK-NEXT: {{  $}}
434   ; CHECK-NEXT: bb.2.cond.end:
435   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY3]](s32), %bb.1, [[COPY1]](s32), %bb.0
436   ; CHECK-NEXT:   [[PHI1:%[0-9]+]]:_(s32) = G_PHI [[COPY4]](s32), %bb.1, [[COPY2]](s32), %bb.0
437   ; CHECK-NEXT:   $x10 = COPY [[PHI]](s32)
438   ; CHECK-NEXT:   $x11 = COPY [[PHI1]](s32)
439   ; CHECK-NEXT:   PseudoRET implicit $x10, implicit $x11
440   bb.1.entry:
441     liveins: $x10, $x11, $x12, $x13, $x14
443     %3:_(s32) = COPY $x10
444     %0:_(s1) = G_TRUNC %3(s32)
445     %4:_(s32) = COPY $x11
446     %5:_(s32) = COPY $x12
447     %6:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)
448     %1:_(s48) = G_TRUNC %6(s64)
449     %7:_(s32) = COPY $x13
450     %8:_(s32) = COPY $x14
451     %9:_(s64) = G_MERGE_VALUES %7(s32), %8(s32)
452     %2:_(s48) = G_TRUNC %9(s64)
453     G_BRCOND %0(s1), %bb.3
454     G_BR %bb.2
456   bb.2.cond.false:
458   bb.3.cond.end:
459     %10:_(s48) = G_PHI %2(s48), %bb.2, %1(s48), %bb.1
460     %13:_(s64) = G_ANYEXT %10(s48)
461     %11:_(s32), %12:_(s32) = G_UNMERGE_VALUES %13(s64)
462     $x10 = COPY %11(s32)
463     $x11 = COPY %12(s32)
464     PseudoRET implicit $x10, implicit $x11
468 name:            phi_i64
469 alignment:       4
470 tracksRegLiveness: true
471 registers:
472   - { id: 0, class: _ }
473   - { id: 1, class: _ }
474   - { id: 2, class: _ }
475   - { id: 3, class: _ }
476   - { id: 4, class: _ }
477   - { id: 5, class: _ }
478   - { id: 6, class: _ }
479   - { id: 7, class: _ }
480   - { id: 8, class: _ }
481   - { id: 9, class: _ }
482   - { id: 10, class: _ }
483 frameInfo:
484   maxAlignment:    1
485 machineFunctionInfo:
486   varArgsFrameIndex: 0
487   varArgsSaveSize: 0
488 body:             |
489   ; CHECK-LABEL: name: phi_i64
490   ; CHECK: bb.0.entry:
491   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
492   ; CHECK-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14
493   ; CHECK-NEXT: {{  $}}
494   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
495   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
496   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $x12
497   ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $x13
498   ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $x14
499   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
500   ; CHECK-NEXT:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
501   ; CHECK-NEXT:   G_BRCOND [[AND]](s32), %bb.2
502   ; CHECK-NEXT:   G_BR %bb.1
503   ; CHECK-NEXT: {{  $}}
504   ; CHECK-NEXT: bb.1.cond.false:
505   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
506   ; CHECK-NEXT: {{  $}}
507   ; CHECK-NEXT: bb.2.cond.end:
508   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY3]](s32), %bb.1, [[COPY1]](s32), %bb.0
509   ; CHECK-NEXT:   [[PHI1:%[0-9]+]]:_(s32) = G_PHI [[COPY4]](s32), %bb.1, [[COPY2]](s32), %bb.0
510   ; CHECK-NEXT:   $x10 = COPY [[PHI]](s32)
511   ; CHECK-NEXT:   $x11 = COPY [[PHI1]](s32)
512   ; CHECK-NEXT:   PseudoRET implicit $x10, implicit $x11
513   bb.1.entry:
514     liveins: $x10, $x11, $x12, $x13, $x14
516     %3:_(s32) = COPY $x10
517     %0:_(s1) = G_TRUNC %3(s32)
518     %4:_(s32) = COPY $x11
519     %5:_(s32) = COPY $x12
520     %1:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)
521     %6:_(s32) = COPY $x13
522     %7:_(s32) = COPY $x14
523     %2:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)
524     G_BRCOND %0(s1), %bb.3
525     G_BR %bb.2
527   bb.2.cond.false:
529   bb.3.cond.end:
530     %8:_(s64) = G_PHI %2(s64), %bb.2, %1(s64), %bb.1
531     %9:_(s32), %10:_(s32) = G_UNMERGE_VALUES %8(s64)
532     $x10 = COPY %9(s32)
533     $x11 = COPY %10(s32)
534     PseudoRET implicit $x10, implicit $x11
538 name:            phi_i72
539 alignment:       4
540 tracksRegLiveness: true
541 registers:
542   - { id: 0, class: _ }
543   - { id: 1, class: _ }
544   - { id: 2, class: _ }
545   - { id: 3, class: _ }
546   - { id: 4, class: _ }
547   - { id: 5, class: _ }
548   - { id: 6, class: _ }
549   - { id: 7, class: _ }
550   - { id: 8, class: _ }
551   - { id: 9, class: _ }
552   - { id: 10, class: _ }
553   - { id: 11, class: _ }
554   - { id: 12, class: _ }
555   - { id: 13, class: _ }
556   - { id: 14, class: _ }
557   - { id: 15, class: _ }
558   - { id: 16, class: _ }
559 frameInfo:
560   maxAlignment:    1
561 machineFunctionInfo:
562   varArgsFrameIndex: 0
563   varArgsSaveSize: 0
564 body:             |
565   ; CHECK-LABEL: name: phi_i72
566   ; CHECK: bb.0.entry:
567   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
568   ; CHECK-NEXT:   liveins: $x10, $x11, $x12
569   ; CHECK-NEXT: {{  $}}
570   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
571   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
572   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $x11
573   ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $x11
574   ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $x12
575   ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $x12
576   ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:_(s32) = COPY $x12
577   ; CHECK-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
578   ; CHECK-NEXT:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
579   ; CHECK-NEXT:   G_BRCOND [[AND]](s32), %bb.2
580   ; CHECK-NEXT:   G_BR %bb.1
581   ; CHECK-NEXT: {{  $}}
582   ; CHECK-NEXT: bb.1.cond.false:
583   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
584   ; CHECK-NEXT: {{  $}}
585   ; CHECK-NEXT: bb.2.cond.end:
586   ; CHECK-NEXT:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY4]](s32), %bb.1, [[COPY1]](s32), %bb.0
587   ; CHECK-NEXT:   [[PHI1:%[0-9]+]]:_(s32) = G_PHI [[COPY5]](s32), %bb.1, [[COPY2]](s32), %bb.0
588   ; CHECK-NEXT:   [[PHI2:%[0-9]+]]:_(s32) = G_PHI [[COPY6]](s32), %bb.1, [[COPY3]](s32), %bb.0
589   ; CHECK-NEXT:   $x10 = COPY [[PHI]](s32)
590   ; CHECK-NEXT:   $x10 = COPY [[PHI1]](s32)
591   ; CHECK-NEXT:   $x10 = COPY [[PHI2]](s32)
592   ; CHECK-NEXT:   PseudoRET implicit $x10, implicit $x10, implicit $x10
593   bb.1.entry:
594     liveins: $x10, $x11, $x12
596     %3:_(s32) = COPY $x10
597     %0:_(s1) = G_TRUNC %3(s32)
598     %4:_(s32) = COPY $x11
599     %5:_(s32) = COPY $x11
600     %6:_(s32) = COPY $x11
601     %7:_(s96) = G_MERGE_VALUES %4(s32), %5(s32), %6(s32)
602     %1:_(s72) = G_TRUNC %7(s96)
603     %8:_(s32) = COPY $x12
604     %9:_(s32) = COPY $x12
605     %10:_(s32) = COPY $x12
606     %11:_(s96) = G_MERGE_VALUES %8(s32), %9(s32), %10(s32)
607     %2:_(s72) = G_TRUNC %11(s96)
608     G_BRCOND %0(s1), %bb.3
609     G_BR %bb.2
611   bb.2.cond.false:
613   bb.3.cond.end:
614     %12:_(s72) = G_PHI %2(s72), %bb.2, %1(s72), %bb.1
615     %16:_(s96) = G_ANYEXT %12(s72)
616     %13:_(s32), %14:_(s32), %15:_(s32) = G_UNMERGE_VALUES %16(s96)
617     $x10 = COPY %13(s32)
618     $x10 = COPY %14(s32)
619     $x10 = COPY %15(s32)
620     PseudoRET implicit $x10, implicit $x10, implicit $x10