Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / Mips / GlobalISel / legalizer / phi.mir
blob261bcd63c28a6dd48b467f83aefce83f8960a958
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=MIPS32
3 --- |
5   define i1 @phi_i1(i1 %cnd, i1 %a, i1 %b) {
6   entry:
7     br i1 %cnd, label %cond.true, label %cond.false
9   cond.true:                                        ; preds = %entry
10     br label %cond.end
12   cond.false:                                       ; preds = %entry
13     br label %cond.end
15   cond.end:                                         ; preds = %cond.false, %cond.true
16     %cond = phi i1 [ %a, %cond.true ], [ %b, %cond.false ]
17     ret i1 %cond
18   }
20   define i8 @phi_i8(i1 %cnd, i8 %a, i8 %b) {
21   entry:
22     br i1 %cnd, label %cond.true, label %cond.false
24   cond.true:                                        ; preds = %entry
25     br label %cond.end
27   cond.false:                                       ; preds = %entry
28     br label %cond.end
30   cond.end:                                         ; preds = %cond.false, %cond.true
31     %cond = phi i8 [ %a, %cond.true ], [ %b, %cond.false ]
32     ret i8 %cond
33   }
35   define i16 @phi_i16(i1 %cnd, i16 %a, i16 %b) {
36   entry:
37     br i1 %cnd, label %cond.true, label %cond.false
39   cond.true:                                        ; preds = %entry
40     br label %cond.end
42   cond.false:                                       ; preds = %entry
43     br label %cond.end
45   cond.end:                                         ; preds = %cond.false, %cond.true
46     %cond = phi i16 [ %a, %cond.true ], [ %b, %cond.false ]
47     ret i16 %cond
48   }
50   define i32 @phi_i32(i1 %cnd, i32 %a, i32 %b) {
51   entry:
52     br i1 %cnd, label %cond.true, label %cond.false
54   cond.true:                                        ; preds = %entry
55     br label %cond.end
57   cond.false:                                       ; preds = %entry
58     br label %cond.end
60   cond.end:                                         ; preds = %cond.false, %cond.true
61     %cond = phi i32 [ %a, %cond.true ], [ %b, %cond.false ]
62     ret i32 %cond
63   }
65   define i64 @phi_i64(i1 %cnd, i64 %a, i64 %b) {
66   entry:
67     br i1 %cnd, label %cond.true, label %cond.false
69   cond.true:                                        ; preds = %entry
70     br label %cond.end
72   cond.false:                                       ; preds = %entry
73     br label %cond.end
75   cond.end:                                         ; preds = %cond.false, %cond.true
76     %cond = phi i64 [ %a, %cond.true ], [ %b, %cond.false ]
77     ret i64 %cond
78   }
80   define void @phi_ambiguous_i64_in_fpr(i1 %cnd, ptr %i64_ptr_a, ptr %i64_ptr_b, ptr %i64_ptr_c) {
81   entry:
82     %0 = load i64, ptr %i64_ptr_a, align 8
83     %1 = load i64, ptr %i64_ptr_b, align 8
84     br i1 %cnd, label %cond.true, label %cond.false
86   cond.true:                                        ; preds = %entry
87     br label %cond.end
89   cond.false:                                       ; preds = %entry
90     br label %cond.end
92   cond.end:                                         ; preds = %cond.false, %cond.true
93     %cond = phi i64 [ %0, %cond.true ], [ %1, %cond.false ]
94     store i64 %cond, ptr %i64_ptr_c, align 8
95     ret void
96   }
98   define float @phi_float(i1 %cnd, float %a, float %b) {
99   entry:
100     br i1 %cnd, label %cond.true, label %cond.false
102   cond.true:                                        ; preds = %entry
103     br label %cond.end
105   cond.false:                                       ; preds = %entry
106     br label %cond.end
108   cond.end:                                         ; preds = %cond.false, %cond.true
109     %cond = phi float [ %a, %cond.true ], [ %b, %cond.false ]
110     ret float %cond
111   }
113   define void @phi_ambiguous_float_in_gpr(i1 %cnd, ptr %f32_ptr_a, ptr %f32_ptr_b, ptr %f32_ptr_c) {
114   entry:
115     %0 = load float, ptr %f32_ptr_a, align 4
116     %1 = load float, ptr %f32_ptr_b, align 4
117     br i1 %cnd, label %cond.true, label %cond.false
119   cond.true:                                        ; preds = %entry
120     br label %cond.end
122   cond.false:                                       ; preds = %entry
123     br label %cond.end
125   cond.end:                                         ; preds = %cond.false, %cond.true
126     %cond = phi float [ %0, %cond.true ], [ %1, %cond.false ]
127     store float %cond, ptr %f32_ptr_c, align 4
128     ret void
129   }
131   define double @phi_double(double %a, double %b, i1 %cnd) {
132   entry:
133     br i1 %cnd, label %cond.true, label %cond.false
135   cond.true:                                        ; preds = %entry
136     br label %cond.end
138   cond.false:                                       ; preds = %entry
139     br label %cond.end
141   cond.end:                                         ; preds = %cond.false, %cond.true
142     %cond = phi double [ %a, %cond.true ], [ %b, %cond.false ]
143     ret double %cond
144   }
148 name:            phi_i1
149 alignment:       4
150 tracksRegLiveness: true
151 body:             |
152   ; MIPS32-LABEL: name: phi_i1
153   ; MIPS32: bb.0.entry:
154   ; MIPS32:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
155   ; MIPS32:   liveins: $a0, $a1, $a2
156   ; MIPS32:   [[COPY:%[0-9]+]]:_(s32) = COPY $a0
157   ; MIPS32:   [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
158   ; MIPS32:   [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
159   ; MIPS32:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
160   ; MIPS32:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
161   ; MIPS32:   G_BRCOND [[AND]](s32), %bb.1
162   ; MIPS32:   G_BR %bb.2
163   ; MIPS32: bb.1.cond.true:
164   ; MIPS32:   successors: %bb.3(0x80000000)
165   ; MIPS32:   G_BR %bb.3
166   ; MIPS32: bb.2.cond.false:
167   ; MIPS32:   successors: %bb.3(0x80000000)
168   ; MIPS32: bb.3.cond.end:
169   ; MIPS32:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY1]](s32), %bb.1, [[COPY2]](s32), %bb.2
170   ; MIPS32:   $v0 = COPY [[PHI]](s32)
171   ; MIPS32:   RetRA implicit $v0
172   bb.1.entry:
173     liveins: $a0, $a1, $a2
175     %3:_(s32) = COPY $a0
176     %0:_(s1) = G_TRUNC %3(s32)
177     %4:_(s32) = COPY $a1
178     %1:_(s1) = G_TRUNC %4(s32)
179     %5:_(s32) = COPY $a2
180     %2:_(s1) = G_TRUNC %5(s32)
181     G_BRCOND %0(s1), %bb.2
182     G_BR %bb.3
184   bb.2.cond.true:
185     G_BR %bb.4
187   bb.3.cond.false:
189   bb.4.cond.end:
190     %6:_(s1) = G_PHI %1(s1), %bb.2, %2(s1), %bb.3
191     %7:_(s32) = G_ANYEXT %6(s1)
192     $v0 = COPY %7(s32)
193     RetRA implicit $v0
197 name:            phi_i8
198 alignment:       4
199 tracksRegLiveness: true
200 body:             |
201   ; MIPS32-LABEL: name: phi_i8
202   ; MIPS32: bb.0.entry:
203   ; MIPS32:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
204   ; MIPS32:   liveins: $a0, $a1, $a2
205   ; MIPS32:   [[COPY:%[0-9]+]]:_(s32) = COPY $a0
206   ; MIPS32:   [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
207   ; MIPS32:   [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
208   ; MIPS32:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
209   ; MIPS32:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
210   ; MIPS32:   G_BRCOND [[AND]](s32), %bb.1
211   ; MIPS32:   G_BR %bb.2
212   ; MIPS32: bb.1.cond.true:
213   ; MIPS32:   successors: %bb.3(0x80000000)
214   ; MIPS32:   G_BR %bb.3
215   ; MIPS32: bb.2.cond.false:
216   ; MIPS32:   successors: %bb.3(0x80000000)
217   ; MIPS32: bb.3.cond.end:
218   ; MIPS32:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY1]](s32), %bb.1, [[COPY2]](s32), %bb.2
219   ; MIPS32:   $v0 = COPY [[PHI]](s32)
220   ; MIPS32:   RetRA implicit $v0
221   bb.1.entry:
222     liveins: $a0, $a1, $a2
224     %3:_(s32) = COPY $a0
225     %0:_(s1) = G_TRUNC %3(s32)
226     %4:_(s32) = COPY $a1
227     %1:_(s8) = G_TRUNC %4(s32)
228     %5:_(s32) = COPY $a2
229     %2:_(s8) = G_TRUNC %5(s32)
230     G_BRCOND %0(s1), %bb.2
231     G_BR %bb.3
233   bb.2.cond.true:
234     G_BR %bb.4
236   bb.3.cond.false:
238   bb.4.cond.end:
239     %6:_(s8) = G_PHI %1(s8), %bb.2, %2(s8), %bb.3
240     %7:_(s32) = G_ANYEXT %6(s8)
241     $v0 = COPY %7(s32)
242     RetRA implicit $v0
246 name:            phi_i16
247 alignment:       4
248 tracksRegLiveness: true
249 body:             |
250   ; MIPS32-LABEL: name: phi_i16
251   ; MIPS32: bb.0.entry:
252   ; MIPS32:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
253   ; MIPS32:   liveins: $a0, $a1, $a2
254   ; MIPS32:   [[COPY:%[0-9]+]]:_(s32) = COPY $a0
255   ; MIPS32:   [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
256   ; MIPS32:   [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
257   ; MIPS32:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
258   ; MIPS32:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
259   ; MIPS32:   G_BRCOND [[AND]](s32), %bb.1
260   ; MIPS32:   G_BR %bb.2
261   ; MIPS32: bb.1.cond.true:
262   ; MIPS32:   successors: %bb.3(0x80000000)
263   ; MIPS32:   G_BR %bb.3
264   ; MIPS32: bb.2.cond.false:
265   ; MIPS32:   successors: %bb.3(0x80000000)
266   ; MIPS32: bb.3.cond.end:
267   ; MIPS32:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY1]](s32), %bb.1, [[COPY2]](s32), %bb.2
268   ; MIPS32:   $v0 = COPY [[PHI]](s32)
269   ; MIPS32:   RetRA implicit $v0
270   bb.1.entry:
271     liveins: $a0, $a1, $a2
273     %3:_(s32) = COPY $a0
274     %0:_(s1) = G_TRUNC %3(s32)
275     %4:_(s32) = COPY $a1
276     %1:_(s16) = G_TRUNC %4(s32)
277     %5:_(s32) = COPY $a2
278     %2:_(s16) = G_TRUNC %5(s32)
279     G_BRCOND %0(s1), %bb.2
280     G_BR %bb.3
282   bb.2.cond.true:
283     G_BR %bb.4
285   bb.3.cond.false:
287   bb.4.cond.end:
288     %6:_(s16) = G_PHI %1(s16), %bb.2, %2(s16), %bb.3
289     %7:_(s32) = G_ANYEXT %6(s16)
290     $v0 = COPY %7(s32)
291     RetRA implicit $v0
295 name:            phi_i32
296 alignment:       4
297 tracksRegLiveness: true
298 body:             |
299   ; MIPS32-LABEL: name: phi_i32
300   ; MIPS32: bb.0.entry:
301   ; MIPS32:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
302   ; MIPS32:   liveins: $a0, $a1, $a2
303   ; MIPS32:   [[COPY:%[0-9]+]]:_(s32) = COPY $a0
304   ; MIPS32:   [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
305   ; MIPS32:   [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
306   ; MIPS32:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
307   ; MIPS32:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
308   ; MIPS32:   G_BRCOND [[AND]](s32), %bb.1
309   ; MIPS32:   G_BR %bb.2
310   ; MIPS32: bb.1.cond.true:
311   ; MIPS32:   successors: %bb.3(0x80000000)
312   ; MIPS32:   G_BR %bb.3
313   ; MIPS32: bb.2.cond.false:
314   ; MIPS32:   successors: %bb.3(0x80000000)
315   ; MIPS32: bb.3.cond.end:
316   ; MIPS32:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY1]](s32), %bb.1, [[COPY2]](s32), %bb.2
317   ; MIPS32:   $v0 = COPY [[PHI]](s32)
318   ; MIPS32:   RetRA implicit $v0
319   bb.1.entry:
320     liveins: $a0, $a1, $a2
322     %3:_(s32) = COPY $a0
323     %0:_(s1) = G_TRUNC %3(s32)
324     %1:_(s32) = COPY $a1
325     %2:_(s32) = COPY $a2
326     G_BRCOND %0(s1), %bb.2
327     G_BR %bb.3
329   bb.2.cond.true:
330     G_BR %bb.4
332   bb.3.cond.false:
334   bb.4.cond.end:
335     %4:_(s32) = G_PHI %1(s32), %bb.2, %2(s32), %bb.3
336     $v0 = COPY %4(s32)
337     RetRA implicit $v0
341 name:            phi_i64
342 alignment:       4
343 tracksRegLiveness: true
344 fixedStack:
345   - { id: 0, offset: 20, size: 4, alignment: 4, isImmutable: true }
346   - { id: 1, offset: 16, size: 4, alignment: 8, isImmutable: true }
347 body:             |
348   ; MIPS32-LABEL: name: phi_i64
349   ; MIPS32: bb.0.entry:
350   ; MIPS32:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
351   ; MIPS32:   liveins: $a0, $a2, $a3
352   ; MIPS32:   [[COPY:%[0-9]+]]:_(s32) = COPY $a0
353   ; MIPS32:   [[COPY1:%[0-9]+]]:_(s32) = COPY $a2
354   ; MIPS32:   [[COPY2:%[0-9]+]]:_(s32) = COPY $a3
355   ; MIPS32:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY1]](s32), [[COPY2]](s32)
356   ; MIPS32:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
357   ; MIPS32:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %fixed-stack.0, align 8)
358   ; MIPS32:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1
359   ; MIPS32:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p0) :: (load (s32) from %fixed-stack.1)
360   ; MIPS32:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD]](s32), [[LOAD1]](s32)
361   ; MIPS32:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
362   ; MIPS32:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
363   ; MIPS32:   G_BRCOND [[AND]](s32), %bb.1
364   ; MIPS32:   G_BR %bb.2
365   ; MIPS32: bb.1.cond.true:
366   ; MIPS32:   successors: %bb.3(0x80000000)
367   ; MIPS32:   G_BR %bb.3
368   ; MIPS32: bb.2.cond.false:
369   ; MIPS32:   successors: %bb.3(0x80000000)
370   ; MIPS32: bb.3.cond.end:
371   ; MIPS32:   [[PHI:%[0-9]+]]:_(s64) = G_PHI [[MV]](s64), %bb.1, [[MV1]](s64), %bb.2
372   ; MIPS32:   [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[PHI]](s64)
373   ; MIPS32:   $v0 = COPY [[UV]](s32)
374   ; MIPS32:   $v1 = COPY [[UV1]](s32)
375   ; MIPS32:   RetRA implicit $v0, implicit $v1
376   bb.1.entry:
377     liveins: $a0, $a2, $a3
379     %3:_(s32) = COPY $a0
380     %0:_(s1) = G_TRUNC %3(s32)
381     %4:_(s32) = COPY $a2
382     %5:_(s32) = COPY $a3
383     %1:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)
384     %8:_(p0) = G_FRAME_INDEX %fixed-stack.1
385     %6:_(s32) = G_LOAD %8(p0) :: (load (s32) from %fixed-stack.1, align 8)
386     %9:_(p0) = G_FRAME_INDEX %fixed-stack.0
387     %7:_(s32) = G_LOAD %9(p0) :: (load (s32) from %fixed-stack.0)
388     %2:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)
389     G_BRCOND %0(s1), %bb.2
390     G_BR %bb.3
392   bb.2.cond.true:
393     G_BR %bb.4
395   bb.3.cond.false:
397   bb.4.cond.end:
398     %10:_(s64) = G_PHI %1(s64), %bb.2, %2(s64), %bb.3
399     %11:_(s32), %12:_(s32) = G_UNMERGE_VALUES %10(s64)
400     $v0 = COPY %11(s32)
401     $v1 = COPY %12(s32)
402     RetRA implicit $v0, implicit $v1
406 name:            phi_ambiguous_i64_in_fpr
407 alignment:       4
408 tracksRegLiveness: true
409 body:             |
410   ; MIPS32-LABEL: name: phi_ambiguous_i64_in_fpr
411   ; MIPS32: bb.0.entry:
412   ; MIPS32:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
413   ; MIPS32:   liveins: $a0, $a1, $a2, $a3
414   ; MIPS32:   [[COPY:%[0-9]+]]:_(s32) = COPY $a0
415   ; MIPS32:   [[COPY1:%[0-9]+]]:_(p0) = COPY $a1
416   ; MIPS32:   [[COPY2:%[0-9]+]]:_(p0) = COPY $a2
417   ; MIPS32:   [[COPY3:%[0-9]+]]:_(p0) = COPY $a3
418   ; MIPS32:   [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[COPY1]](p0) :: (load (s64) from %ir.i64_ptr_a)
419   ; MIPS32:   [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[COPY2]](p0) :: (load (s64) from %ir.i64_ptr_b)
420   ; MIPS32:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
421   ; MIPS32:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
422   ; MIPS32:   G_BRCOND [[AND]](s32), %bb.1
423   ; MIPS32:   G_BR %bb.2
424   ; MIPS32: bb.1.cond.true:
425   ; MIPS32:   successors: %bb.3(0x80000000)
426   ; MIPS32:   G_BR %bb.3
427   ; MIPS32: bb.2.cond.false:
428   ; MIPS32:   successors: %bb.3(0x80000000)
429   ; MIPS32: bb.3.cond.end:
430   ; MIPS32:   [[PHI:%[0-9]+]]:_(s64) = G_PHI [[LOAD]](s64), %bb.1, [[LOAD1]](s64), %bb.2
431   ; MIPS32:   G_STORE [[PHI]](s64), [[COPY3]](p0) :: (store (s64) into %ir.i64_ptr_c)
432   ; MIPS32:   RetRA
433   bb.1.entry:
434     liveins: $a0, $a1, $a2, $a3
436     %4:_(s32) = COPY $a0
437     %0:_(s1) = G_TRUNC %4(s32)
438     %1:_(p0) = COPY $a1
439     %2:_(p0) = COPY $a2
440     %3:_(p0) = COPY $a3
441     %5:_(s64) = G_LOAD %1(p0) :: (load (s64) from %ir.i64_ptr_a)
442     %6:_(s64) = G_LOAD %2(p0) :: (load (s64) from %ir.i64_ptr_b)
443     G_BRCOND %0(s1), %bb.2
444     G_BR %bb.3
446   bb.2.cond.true:
447     G_BR %bb.4
449   bb.3.cond.false:
451   bb.4.cond.end:
452     %7:_(s64) = G_PHI %5(s64), %bb.2, %6(s64), %bb.3
453     G_STORE %7(s64), %3(p0) :: (store (s64) into %ir.i64_ptr_c)
454     RetRA
458 name:            phi_float
459 alignment:       4
460 tracksRegLiveness: true
461 body:             |
462   ; MIPS32-LABEL: name: phi_float
463   ; MIPS32: bb.0.entry:
464   ; MIPS32:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
465   ; MIPS32:   liveins: $a0, $a1, $a2
466   ; MIPS32:   [[COPY:%[0-9]+]]:_(s32) = COPY $a0
467   ; MIPS32:   [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
468   ; MIPS32:   [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
469   ; MIPS32:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
470   ; MIPS32:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
471   ; MIPS32:   G_BRCOND [[AND]](s32), %bb.1
472   ; MIPS32:   G_BR %bb.2
473   ; MIPS32: bb.1.cond.true:
474   ; MIPS32:   successors: %bb.3(0x80000000)
475   ; MIPS32:   G_BR %bb.3
476   ; MIPS32: bb.2.cond.false:
477   ; MIPS32:   successors: %bb.3(0x80000000)
478   ; MIPS32: bb.3.cond.end:
479   ; MIPS32:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY1]](s32), %bb.1, [[COPY2]](s32), %bb.2
480   ; MIPS32:   $f0 = COPY [[PHI]](s32)
481   ; MIPS32:   RetRA implicit $f0
482   bb.1.entry:
483     liveins: $a0, $a1, $a2
485     %3:_(s32) = COPY $a0
486     %0:_(s1) = G_TRUNC %3(s32)
487     %1:_(s32) = COPY $a1
488     %2:_(s32) = COPY $a2
489     G_BRCOND %0(s1), %bb.2
490     G_BR %bb.3
492   bb.2.cond.true:
493     G_BR %bb.4
495   bb.3.cond.false:
497   bb.4.cond.end:
498     %4:_(s32) = G_PHI %1(s32), %bb.2, %2(s32), %bb.3
499     $f0 = COPY %4(s32)
500     RetRA implicit $f0
504 name:            phi_ambiguous_float_in_gpr
505 alignment:       4
506 tracksRegLiveness: true
507 body:             |
508   ; MIPS32-LABEL: name: phi_ambiguous_float_in_gpr
509   ; MIPS32: bb.0.entry:
510   ; MIPS32:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
511   ; MIPS32:   liveins: $a0, $a1, $a2, $a3
512   ; MIPS32:   [[COPY:%[0-9]+]]:_(s32) = COPY $a0
513   ; MIPS32:   [[COPY1:%[0-9]+]]:_(p0) = COPY $a1
514   ; MIPS32:   [[COPY2:%[0-9]+]]:_(p0) = COPY $a2
515   ; MIPS32:   [[COPY3:%[0-9]+]]:_(p0) = COPY $a3
516   ; MIPS32:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY1]](p0) :: (load (s32) from %ir.f32_ptr_a)
517   ; MIPS32:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[COPY2]](p0) :: (load (s32) from %ir.f32_ptr_b)
518   ; MIPS32:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
519   ; MIPS32:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
520   ; MIPS32:   G_BRCOND [[AND]](s32), %bb.1
521   ; MIPS32:   G_BR %bb.2
522   ; MIPS32: bb.1.cond.true:
523   ; MIPS32:   successors: %bb.3(0x80000000)
524   ; MIPS32:   G_BR %bb.3
525   ; MIPS32: bb.2.cond.false:
526   ; MIPS32:   successors: %bb.3(0x80000000)
527   ; MIPS32: bb.3.cond.end:
528   ; MIPS32:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[LOAD]](s32), %bb.1, [[LOAD1]](s32), %bb.2
529   ; MIPS32:   G_STORE [[PHI]](s32), [[COPY3]](p0) :: (store (s32) into %ir.f32_ptr_c)
530   ; MIPS32:   RetRA
531   bb.1.entry:
532     liveins: $a0, $a1, $a2, $a3
534     %4:_(s32) = COPY $a0
535     %0:_(s1) = G_TRUNC %4(s32)
536     %1:_(p0) = COPY $a1
537     %2:_(p0) = COPY $a2
538     %3:_(p0) = COPY $a3
539     %5:_(s32) = G_LOAD %1(p0) :: (load (s32) from %ir.f32_ptr_a)
540     %6:_(s32) = G_LOAD %2(p0) :: (load (s32) from %ir.f32_ptr_b)
541     G_BRCOND %0(s1), %bb.2
542     G_BR %bb.3
544   bb.2.cond.true:
545     G_BR %bb.4
547   bb.3.cond.false:
549   bb.4.cond.end:
550     %7:_(s32) = G_PHI %5(s32), %bb.2, %6(s32), %bb.3
551     G_STORE %7(s32), %3(p0) :: (store (s32) into %ir.f32_ptr_c)
552     RetRA
556 name:            phi_double
557 alignment:       4
558 tracksRegLiveness: true
559 fixedStack:
560   - { id: 0, offset: 16, size: 4, alignment: 8, isImmutable: true }
561 body:             |
562   ; MIPS32-LABEL: name: phi_double
563   ; MIPS32: bb.0.entry:
564   ; MIPS32:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
565   ; MIPS32:   liveins: $d6, $d7
566   ; MIPS32:   [[COPY:%[0-9]+]]:_(s64) = COPY $d6
567   ; MIPS32:   [[COPY1:%[0-9]+]]:_(s64) = COPY $d7
568   ; MIPS32:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
569   ; MIPS32:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %fixed-stack.0, align 8)
570   ; MIPS32:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
571   ; MIPS32:   [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], [[C]]
572   ; MIPS32:   G_BRCOND [[AND]](s32), %bb.1
573   ; MIPS32:   G_BR %bb.2
574   ; MIPS32: bb.1.cond.true:
575   ; MIPS32:   successors: %bb.3(0x80000000)
576   ; MIPS32:   G_BR %bb.3
577   ; MIPS32: bb.2.cond.false:
578   ; MIPS32:   successors: %bb.3(0x80000000)
579   ; MIPS32: bb.3.cond.end:
580   ; MIPS32:   [[PHI:%[0-9]+]]:_(s64) = G_PHI [[COPY]](s64), %bb.1, [[COPY1]](s64), %bb.2
581   ; MIPS32:   $d0 = COPY [[PHI]](s64)
582   ; MIPS32:   RetRA implicit $d0
583   bb.1.entry:
584     liveins: $d6, $d7
586     %0:_(s64) = COPY $d6
587     %1:_(s64) = COPY $d7
588     %4:_(p0) = G_FRAME_INDEX %fixed-stack.0
589     %3:_(s32) = G_LOAD %4(p0) :: (load (s32) from %fixed-stack.0, align 8)
590     %2:_(s1) = G_TRUNC %3(s32)
591     G_BRCOND %2(s1), %bb.2
592     G_BR %bb.3
594   bb.2.cond.true:
595     G_BR %bb.4
597   bb.3.cond.false:
599   bb.4.cond.end:
600     %5:_(s64) = G_PHI %0(s64), %bb.2, %1(s64), %bb.3
601     $d0 = COPY %5(s64)
602     RetRA implicit $d0