# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=regbankselect -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=MIPS32
--- |
define void @long_chain_ambiguous_i64_in_fpr(i1 %cnd0, i1 %cnd1, i1 %cnd2, ptr %a, ptr %b, ptr %c, ptr %result) {
entry:
br i1 %cnd0, label %pre.PHI.2, label %pre.PHI.1
pre.PHI.1: ; preds = %entry
br i1 %cnd1, label %b.PHI.1.1, label %pre.PHI.1.0
pre.PHI.1.0: ; preds = %pre.PHI.1
br i1 %cnd2, label %b.PHI.1.2, label %b.PHI.1.0
b.PHI.1.0: ; preds = %pre.PHI.1.0
%phi1.0 = load i64, ptr %a
br label %b.PHI.1
b.PHI.1.1: ; preds = %pre.PHI.1
%phi1.1 = load i64, ptr %b
br label %b.PHI.1
b.PHI.1.2: ; preds = %pre.PHI.1.0
%phi1.2 = load i64, ptr %c
br label %b.PHI.1
b.PHI.1: ; preds = %b.PHI.1.2, %b.PHI.1.1, %b.PHI.1.0
%phi1 = phi i64 [ %phi1.0, %b.PHI.1.0 ], [ %phi1.1, %b.PHI.1.1 ], [ %phi1.2, %b.PHI.1.2 ]
br i1 %cnd2, label %b.PHI.1.end, label %b.PHI.3
b.PHI.1.end: ; preds = %b.PHI.1
store i64 %phi1, ptr %result
ret void
pre.PHI.2: ; preds = %entry
br i1 %cnd0, label %b.PHI.2.0, label %b.PHI.2.1
b.PHI.2.0: ; preds = %pre.PHI.2
%phi2.0 = load i64, ptr %a
br label %b.PHI.2
b.PHI.2.1: ; preds = %pre.PHI.2
%phi2.1 = load i64, ptr %b
br label %b.PHI.2
b.PHI.2: ; preds = %b.PHI.2.1, %b.PHI.2.0
%phi2 = phi i64 [ %phi2.0, %b.PHI.2.0 ], [ %phi2.1, %b.PHI.2.1 ]
br i1 %cnd1, label %b.PHI.3, label %b.PHI.2.end
b.PHI.2.end: ; preds = %b.PHI.2
store i64 %phi2, ptr %result
ret void
b.PHI.3: ; preds = %b.PHI.2, %b.PHI.1
%phi3 = phi i64 [ %phi2, %b.PHI.2 ], [ %phi1, %b.PHI.1 ]
%phi4 = phi i64 [ %phi2, %b.PHI.2 ], [ %phi1, %b.PHI.1 ]
%sel_1.2 = select i1 %cnd2, i64 %phi3, i64 %phi4
%sel_3_1.2 = select i1 %cnd1, i64 %sel_1.2, i64 %phi3
store i64 %sel_3_1.2, ptr %result
store i64 %phi3, ptr %result
ret void
}
define void @long_chain_i64_in_gpr(i1 %cnd0, i1 %cnd1, i1 %cnd2, ptr %a, ptr %b, ptr %c, ptr %result) {
entry:
br i1 %cnd0, label %pre.PHI.2, label %pre.PHI.1
pre.PHI.1: ; preds = %entry
br i1 %cnd1, label %b.PHI.1.1, label %pre.PHI.1.0
pre.PHI.1.0: ; preds = %pre.PHI.1
br i1 %cnd2, label %b.PHI.1.2, label %b.PHI.1.0
b.PHI.1.0: ; preds = %pre.PHI.1.0
%phi1.0 = load i64, ptr %a
br label %b.PHI.1
b.PHI.1.1: ; preds = %pre.PHI.1
%phi1.1 = load i64, ptr %b
br label %b.PHI.1
b.PHI.1.2: ; preds = %pre.PHI.1.0
%phi1.2 = load i64, ptr %c
br label %b.PHI.1
b.PHI.1: ; preds = %b.PHI.1.2, %b.PHI.1.1, %b.PHI.1.0
%phi1 = phi i64 [ %phi1.0, %b.PHI.1.0 ], [ %phi1.1, %b.PHI.1.1 ], [ %phi1.2, %b.PHI.1.2 ]
br i1 %cnd2, label %b.PHI.1.end, label %b.PHI.3
b.PHI.1.end: ; preds = %b.PHI.1
store i64 %phi1, ptr %result
ret void
pre.PHI.2: ; preds = %entry
br i1 %cnd0, label %b.PHI.2.0, label %b.PHI.2.1
b.PHI.2.0: ; preds = %pre.PHI.2
%phi2.0 = load i64, ptr %a
br label %b.PHI.2
b.PHI.2.1: ; preds = %pre.PHI.2
%phi2.1 = load i64, ptr %b
br label %b.PHI.2
b.PHI.2: ; preds = %b.PHI.2.1, %b.PHI.2.0
%phi2 = phi i64 [ %phi2.0, %b.PHI.2.0 ], [ %phi2.1, %b.PHI.2.1 ]
br i1 %cnd1, label %b.PHI.3, label %b.PHI.2.end
b.PHI.2.end: ; preds = %b.PHI.2
store i64 %phi2, ptr %result
ret void
b.PHI.3: ; preds = %b.PHI.2, %b.PHI.1
%phi3 = phi i64 [ %phi2, %b.PHI.2 ], [ %phi1, %b.PHI.1 ]
%phi4 = phi i64 [ %phi2, %b.PHI.2 ], [ 0, %b.PHI.1 ]
%sel_1.2 = select i1 %cnd2, i64 %phi3, i64 %phi4
%sel_3_1.2 = select i1 %cnd1, i64 %sel_1.2, i64 %phi3
store i64 %sel_3_1.2, ptr %result
store i64 %phi3, ptr %result
ret void
}
define void @long_chain_ambiguous_double_in_fpr(i1 %cnd0, i1 %cnd1, i1 %cnd2, ptr %a, ptr %b, ptr %c, ptr %result) {
entry:
br i1 %cnd0, label %pre.PHI.2, label %pre.PHI.1
pre.PHI.1: ; preds = %entry
br i1 %cnd1, label %b.PHI.1.1, label %pre.PHI.1.0
pre.PHI.1.0: ; preds = %pre.PHI.1
br i1 %cnd2, label %b.PHI.1.2, label %b.PHI.1.0
b.PHI.1.0: ; preds = %pre.PHI.1.0
%phi1.0 = load double, ptr %a
br label %b.PHI.1
b.PHI.1.1: ; preds = %pre.PHI.1
%phi1.1 = load double, ptr %b
br label %b.PHI.1
b.PHI.1.2: ; preds = %pre.PHI.1.0
%phi1.2 = load double, ptr %c
br label %b.PHI.1
b.PHI.1: ; preds = %b.PHI.1.2, %b.PHI.1.1, %b.PHI.1.0
%phi1 = phi double [ %phi1.0, %b.PHI.1.0 ], [ %phi1.1, %b.PHI.1.1 ], [ %phi1.2, %b.PHI.1.2 ]
br i1 %cnd2, label %b.PHI.1.end, label %b.PHI.3
b.PHI.1.end: ; preds = %b.PHI.1
store double %phi1, ptr %result
ret void
pre.PHI.2: ; preds = %entry
br i1 %cnd0, label %b.PHI.2.0, label %b.PHI.2.1
b.PHI.2.0: ; preds = %pre.PHI.2
%phi2.0 = load double, ptr %a
br label %b.PHI.2
b.PHI.2.1: ; preds = %pre.PHI.2
%phi2.1 = load double, ptr %b
br label %b.PHI.2
b.PHI.2: ; preds = %b.PHI.2.1, %b.PHI.2.0
%phi2 = phi double [ %phi2.0, %b.PHI.2.0 ], [ %phi2.1, %b.PHI.2.1 ]
br i1 %cnd1, label %b.PHI.3, label %b.PHI.2.end
b.PHI.2.end: ; preds = %b.PHI.2
store double %phi2, ptr %result
ret void
b.PHI.3: ; preds = %b.PHI.2, %b.PHI.1
%phi3 = phi double [ %phi2, %b.PHI.2 ], [ %phi1, %b.PHI.1 ]
%phi4 = phi double [ %phi2, %b.PHI.2 ], [ %phi1, %b.PHI.1 ]
%sel_1.2 = select i1 %cnd2, double %phi3, double %phi4
%sel_3_1.2 = select i1 %cnd1, double %sel_1.2, double %phi3
store double %sel_3_1.2, ptr %result
store double %phi3, ptr %result
ret void
}
define void @long_chain_double_in_fpr(i1 %cnd0, i1 %cnd1, i1 %cnd2, ptr %a, ptr %b, ptr %c, ptr %result) {
entry:
br i1 %cnd0, label %pre.PHI.2, label %pre.PHI.1
pre.PHI.1: ; preds = %entry
br i1 %cnd1, label %b.PHI.1.1, label %pre.PHI.1.0
pre.PHI.1.0: ; preds = %pre.PHI.1
br i1 %cnd2, label %b.PHI.1.2, label %b.PHI.1.0
b.PHI.1.0: ; preds = %pre.PHI.1.0
%phi1.0 = load double, ptr %a
br label %b.PHI.1
b.PHI.1.1: ; preds = %pre.PHI.1
%phi1.1 = load double, ptr %b
br label %b.PHI.1
b.PHI.1.2: ; preds = %pre.PHI.1.0
%phi1.2 = load double, ptr %c
br label %b.PHI.1
b.PHI.1: ; preds = %b.PHI.1.2, %b.PHI.1.1, %b.PHI.1.0
%phi1 = phi double [ %phi1.0, %b.PHI.1.0 ], [ %phi1.1, %b.PHI.1.1 ], [ %phi1.2, %b.PHI.1.2 ]
br i1 %cnd2, label %b.PHI.1.end, label %b.PHI.3
b.PHI.1.end: ; preds = %b.PHI.1
store double %phi1, ptr %result
ret void
pre.PHI.2: ; preds = %entry
br i1 %cnd0, label %b.PHI.2.0, label %b.PHI.2.1
b.PHI.2.0: ; preds = %pre.PHI.2
%phi2.0 = load double, ptr %a
br label %b.PHI.2
b.PHI.2.1: ; preds = %pre.PHI.2
%phi2.1 = load double, ptr %b
br label %b.PHI.2
b.PHI.2: ; preds = %b.PHI.2.1, %b.PHI.2.0
%phi2 = phi double [ %phi2.0, %b.PHI.2.0 ], [ %phi2.1, %b.PHI.2.1 ]
br i1 %cnd1, label %b.PHI.3, label %b.PHI.2.end
b.PHI.2.end: ; preds = %b.PHI.2
store double %phi2, ptr %result
ret void
b.PHI.3: ; preds = %b.PHI.2, %b.PHI.1
%phi3 = phi double [ %phi2, %b.PHI.2 ], [ %phi1, %b.PHI.1 ]
%phi4 = phi double [ %phi2, %b.PHI.2 ], [ 0.000000e+00, %b.PHI.1 ]
%sel_1.2 = select i1 %cnd2, double %phi3, double %phi4
%sel_3_1.2 = select i1 %cnd1, double %sel_1.2, double %phi3
store double %sel_3_1.2, ptr %result
store double %phi3, ptr %result
ret void
}
...
---
name: long_chain_ambiguous_i64_in_fpr
alignment: 4
legalized: true
tracksRegLiveness: true
fixedStack:
- { id: 0, offset: 24, size: 4, alignment: 8, isImmutable: true }
- { id: 1, offset: 20, size: 4, alignment: 4, isImmutable: true }
- { id: 2, offset: 16, size: 4, alignment: 8, isImmutable: true }
body: |
; MIPS32-LABEL: name: long_chain_ambiguous_i64_in_fpr
; MIPS32: bb.0.entry:
; MIPS32: successors: %bb.8(0x40000000), %bb.1(0x40000000)
; MIPS32: liveins: $a0, $a1, $a2, $a3
; MIPS32: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a0
; MIPS32: [[COPY1:%[0-9]+]]:gprb(s32) = COPY $a1
; MIPS32: [[COPY2:%[0-9]+]]:gprb(s32) = COPY $a2
; MIPS32: [[COPY3:%[0-9]+]]:gprb(p0) = COPY $a3
; MIPS32: [[FRAME_INDEX:%[0-9]+]]:gprb(p0) = G_FRAME_INDEX %fixed-stack.0
; MIPS32: [[LOAD:%[0-9]+]]:gprb(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (load (p0) from %fixed-stack.0, align 8)
; MIPS32: [[FRAME_INDEX1:%[0-9]+]]:gprb(p0) = G_FRAME_INDEX %fixed-stack.1
; MIPS32: [[LOAD1:%[0-9]+]]:gprb(p0) = G_LOAD [[FRAME_INDEX1]](p0) :: (load (p0) from %fixed-stack.1)
; MIPS32: [[FRAME_INDEX2:%[0-9]+]]:gprb(p0) = G_FRAME_INDEX %fixed-stack.2
; MIPS32: [[LOAD2:%[0-9]+]]:gprb(p0) = G_LOAD [[FRAME_INDEX2]](p0) :: (load (p0) from %fixed-stack.2, align 8)
; MIPS32: [[C:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY4:%[0-9]+]]:gprb(s32) = COPY [[COPY]](s32)
; MIPS32: [[AND:%[0-9]+]]:gprb(s32) = G_AND [[COPY4]], [[C]]
; MIPS32: G_BRCOND [[AND]](s32), %bb.8
; MIPS32: bb.1.pre.PHI.1:
; MIPS32: successors: %bb.4(0x40000000), %bb.2(0x40000000)
; MIPS32: [[C1:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY5:%[0-9]+]]:gprb(s32) = COPY [[COPY1]](s32)
; MIPS32: [[AND1:%[0-9]+]]:gprb(s32) = G_AND [[COPY5]], [[C1]]
; MIPS32: G_BRCOND [[AND1]](s32), %bb.4
; MIPS32: bb.2.pre.PHI.1.0:
; MIPS32: successors: %bb.5(0x40000000), %bb.3(0x40000000)
; MIPS32: [[C2:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY6:%[0-9]+]]:gprb(s32) = COPY [[COPY2]](s32)
; MIPS32: [[AND2:%[0-9]+]]:gprb(s32) = G_AND [[COPY6]], [[C2]]
; MIPS32: G_BRCOND [[AND2]](s32), %bb.5
; MIPS32: bb.3.b.PHI.1.0:
; MIPS32: successors: %bb.6(0x80000000)
; MIPS32: [[LOAD3:%[0-9]+]]:fprb(s64) = G_LOAD [[COPY3]](p0) :: (load (s64) from %ir.a)
; MIPS32: G_BR %bb.6
; MIPS32: bb.4.b.PHI.1.1:
; MIPS32: successors: %bb.6(0x80000000)
; MIPS32: [[LOAD4:%[0-9]+]]:fprb(s64) = G_LOAD [[LOAD]](p0) :: (load (s64) from %ir.b)
; MIPS32: G_BR %bb.6
; MIPS32: bb.5.b.PHI.1.2:
; MIPS32: successors: %bb.6(0x80000000)
; MIPS32: [[LOAD5:%[0-9]+]]:fprb(s64) = G_LOAD [[LOAD1]](p0) :: (load (s64) from %ir.c)
; MIPS32: bb.6.b.PHI.1:
; MIPS32: successors: %bb.7(0x40000000), %bb.13(0x40000000)
; MIPS32: [[PHI:%[0-9]+]]:fprb(s64) = G_PHI [[LOAD3]](s64), %bb.3, [[LOAD4]](s64), %bb.4, [[LOAD5]](s64), %bb.5
; MIPS32: [[C3:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY7:%[0-9]+]]:gprb(s32) = COPY [[COPY2]](s32)
; MIPS32: [[AND3:%[0-9]+]]:gprb(s32) = G_AND [[COPY7]], [[C3]]
; MIPS32: G_BRCOND [[AND3]](s32), %bb.7
; MIPS32: G_BR %bb.13
; MIPS32: bb.7.b.PHI.1.end:
; MIPS32: G_STORE [[PHI]](s64), [[LOAD2]](p0) :: (store (s64) into %ir.result)
; MIPS32: RetRA
; MIPS32: bb.8.pre.PHI.2:
; MIPS32: successors: %bb.9(0x40000000), %bb.10(0x40000000)
; MIPS32: [[C4:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY8:%[0-9]+]]:gprb(s32) = COPY [[COPY]](s32)
; MIPS32: [[AND4:%[0-9]+]]:gprb(s32) = G_AND [[COPY8]], [[C4]]
; MIPS32: G_BRCOND [[AND4]](s32), %bb.9
; MIPS32: G_BR %bb.10
; MIPS32: bb.9.b.PHI.2.0:
; MIPS32: successors: %bb.11(0x80000000)
; MIPS32: [[LOAD6:%[0-9]+]]:fprb(s64) = G_LOAD [[COPY3]](p0) :: (load (s64) from %ir.a)
; MIPS32: G_BR %bb.11
; MIPS32: bb.10.b.PHI.2.1:
; MIPS32: successors: %bb.11(0x80000000)
; MIPS32: [[LOAD7:%[0-9]+]]:fprb(s64) = G_LOAD [[LOAD]](p0) :: (load (s64) from %ir.b)
; MIPS32: bb.11.b.PHI.2:
; MIPS32: successors: %bb.13(0x40000000), %bb.12(0x40000000)
; MIPS32: [[PHI1:%[0-9]+]]:fprb(s64) = G_PHI [[LOAD6]](s64), %bb.9, [[LOAD7]](s64), %bb.10
; MIPS32: [[C5:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY9:%[0-9]+]]:gprb(s32) = COPY [[COPY1]](s32)
; MIPS32: [[AND5:%[0-9]+]]:gprb(s32) = G_AND [[COPY9]], [[C5]]
; MIPS32: G_BRCOND [[AND5]](s32), %bb.13
; MIPS32: bb.12.b.PHI.2.end:
; MIPS32: G_STORE [[PHI1]](s64), [[LOAD2]](p0) :: (store (s64) into %ir.result)
; MIPS32: RetRA
; MIPS32: bb.13.b.PHI.3:
; MIPS32: [[PHI2:%[0-9]+]]:fprb(s64) = G_PHI [[PHI1]](s64), %bb.11, [[PHI]](s64), %bb.6
; MIPS32: [[PHI3:%[0-9]+]]:fprb(s64) = G_PHI [[PHI1]](s64), %bb.11, [[PHI]](s64), %bb.6
; MIPS32: [[C6:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY10:%[0-9]+]]:gprb(s32) = COPY [[COPY2]](s32)
; MIPS32: [[AND6:%[0-9]+]]:gprb(s32) = G_AND [[COPY10]], [[C6]]
; MIPS32: [[SELECT:%[0-9]+]]:fprb(s64) = G_SELECT [[AND6]](s32), [[PHI2]], [[PHI3]]
; MIPS32: [[COPY11:%[0-9]+]]:gprb(s32) = COPY [[COPY1]](s32)
; MIPS32: [[AND7:%[0-9]+]]:gprb(s32) = G_AND [[COPY11]], [[C6]]
; MIPS32: [[SELECT1:%[0-9]+]]:fprb(s64) = G_SELECT [[AND7]](s32), [[SELECT]], [[PHI2]]
; MIPS32: G_STORE [[SELECT1]](s64), [[LOAD2]](p0) :: (store (s64) into %ir.result)
; MIPS32: G_STORE [[PHI2]](s64), [[LOAD2]](p0) :: (store (s64) into %ir.result)
; MIPS32: RetRA
bb.1.entry:
liveins: $a0, $a1, $a2, $a3
%7:_(s32) = COPY $a0
%8:_(s32) = COPY $a1
%9:_(s32) = COPY $a2
%3:_(p0) = COPY $a3
%10:_(p0) = G_FRAME_INDEX %fixed-stack.2
%4:_(p0) = G_LOAD %10(p0) :: (load (p0) from %fixed-stack.2, align 8)
%11:_(p0) = G_FRAME_INDEX %fixed-stack.1
%5:_(p0) = G_LOAD %11(p0) :: (load (p0) from %fixed-stack.1)
%12:_(p0) = G_FRAME_INDEX %fixed-stack.0
%6:_(p0) = G_LOAD %12(p0) :: (load (p0) from %fixed-stack.0, align 8)
%32:_(s32) = G_CONSTANT i32 1
%33:_(s32) = COPY %7(s32)
%31:_(s32) = G_AND %33, %32
G_BRCOND %31(s32), %bb.9
bb.2.pre.PHI.1:
%34:_(s32) = G_CONSTANT i32 1
%35:_(s32) = COPY %8(s32)
%30:_(s32) = G_AND %35, %34
G_BRCOND %30(s32), %bb.5
bb.3.pre.PHI.1.0:
%36:_(s32) = G_CONSTANT i32 1
%37:_(s32) = COPY %9(s32)
%29:_(s32) = G_AND %37, %36
G_BRCOND %29(s32), %bb.6
bb.4.b.PHI.1.0:
%13:_(s64) = G_LOAD %3(p0) :: (load (s64) from %ir.a)
G_BR %bb.7
bb.5.b.PHI.1.1:
%15:_(s64) = G_LOAD %4(p0) :: (load (s64) from %ir.b)
G_BR %bb.7
bb.6.b.PHI.1.2:
%14:_(s64) = G_LOAD %5(p0) :: (load (s64) from %ir.c)
bb.7.b.PHI.1:
%16:_(s64) = G_PHI %13(s64), %bb.4, %15(s64), %bb.5, %14(s64), %bb.6
%38:_(s32) = G_CONSTANT i32 1
%39:_(s32) = COPY %9(s32)
%28:_(s32) = G_AND %39, %38
G_BRCOND %28(s32), %bb.8
G_BR %bb.14
bb.8.b.PHI.1.end:
G_STORE %16(s64), %6(p0) :: (store (s64) into %ir.result)
RetRA
bb.9.pre.PHI.2:
%40:_(s32) = G_CONSTANT i32 1
%41:_(s32) = COPY %7(s32)
%27:_(s32) = G_AND %41, %40
G_BRCOND %27(s32), %bb.10
G_BR %bb.11
bb.10.b.PHI.2.0:
%18:_(s64) = G_LOAD %3(p0) :: (load (s64) from %ir.a)
G_BR %bb.12
bb.11.b.PHI.2.1:
%17:_(s64) = G_LOAD %4(p0) :: (load (s64) from %ir.b)
bb.12.b.PHI.2:
%19:_(s64) = G_PHI %18(s64), %bb.10, %17(s64), %bb.11
%42:_(s32) = G_CONSTANT i32 1
%43:_(s32) = COPY %8(s32)
%26:_(s32) = G_AND %43, %42
G_BRCOND %26(s32), %bb.14
bb.13.b.PHI.2.end:
G_STORE %19(s64), %6(p0) :: (store (s64) into %ir.result)
RetRA
bb.14.b.PHI.3:
%20:_(s64) = G_PHI %19(s64), %bb.12, %16(s64), %bb.7
%21:_(s64) = G_PHI %19(s64), %bb.12, %16(s64), %bb.7
%44:_(s32) = G_CONSTANT i32 1
%45:_(s32) = COPY %9(s32)
%25:_(s32) = G_AND %45, %44
%22:_(s64) = G_SELECT %25(s32), %20, %21
%46:_(s32) = COPY %8(s32)
%24:_(s32) = G_AND %46, %44
%23:_(s64) = G_SELECT %24(s32), %22, %20
G_STORE %23(s64), %6(p0) :: (store (s64) into %ir.result)
G_STORE %20(s64), %6(p0) :: (store (s64) into %ir.result)
RetRA
...
---
name: long_chain_i64_in_gpr
alignment: 4
legalized: true
tracksRegLiveness: true
fixedStack:
- { id: 0, offset: 24, size: 4, alignment: 8, isImmutable: true }
- { id: 1, offset: 20, size: 4, alignment: 4, isImmutable: true }
- { id: 2, offset: 16, size: 4, alignment: 8, isImmutable: true }
body: |
; MIPS32-LABEL: name: long_chain_i64_in_gpr
; MIPS32: bb.0.entry:
; MIPS32: successors: %bb.8(0x40000000), %bb.1(0x40000000)
; MIPS32: liveins: $a0, $a1, $a2, $a3
; MIPS32: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a0
; MIPS32: [[COPY1:%[0-9]+]]:gprb(s32) = COPY $a1
; MIPS32: [[COPY2:%[0-9]+]]:gprb(s32) = COPY $a2
; MIPS32: [[COPY3:%[0-9]+]]:gprb(p0) = COPY $a3
; MIPS32: [[FRAME_INDEX:%[0-9]+]]:gprb(p0) = G_FRAME_INDEX %fixed-stack.0
; MIPS32: [[LOAD:%[0-9]+]]:gprb(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (load (p0) from %fixed-stack.0, align 8)
; MIPS32: [[FRAME_INDEX1:%[0-9]+]]:gprb(p0) = G_FRAME_INDEX %fixed-stack.1
; MIPS32: [[LOAD1:%[0-9]+]]:gprb(p0) = G_LOAD [[FRAME_INDEX1]](p0) :: (load (p0) from %fixed-stack.1)
; MIPS32: [[FRAME_INDEX2:%[0-9]+]]:gprb(p0) = G_FRAME_INDEX %fixed-stack.2
; MIPS32: [[LOAD2:%[0-9]+]]:gprb(p0) = G_LOAD [[FRAME_INDEX2]](p0) :: (load (p0) from %fixed-stack.2, align 8)
; MIPS32: [[C:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 0
; MIPS32: [[C1:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY4:%[0-9]+]]:gprb(s32) = COPY [[COPY]](s32)
; MIPS32: [[AND:%[0-9]+]]:gprb(s32) = G_AND [[COPY4]], [[C1]]
; MIPS32: G_BRCOND [[AND]](s32), %bb.8
; MIPS32: bb.1.pre.PHI.1:
; MIPS32: successors: %bb.4(0x40000000), %bb.2(0x40000000)
; MIPS32: [[C2:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY5:%[0-9]+]]:gprb(s32) = COPY [[COPY1]](s32)
; MIPS32: [[AND1:%[0-9]+]]:gprb(s32) = G_AND [[COPY5]], [[C2]]
; MIPS32: G_BRCOND [[AND1]](s32), %bb.4
; MIPS32: bb.2.pre.PHI.1.0:
; MIPS32: successors: %bb.5(0x40000000), %bb.3(0x40000000)
; MIPS32: [[C3:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY6:%[0-9]+]]:gprb(s32) = COPY [[COPY2]](s32)
; MIPS32: [[AND2:%[0-9]+]]:gprb(s32) = G_AND [[COPY6]], [[C3]]
; MIPS32: G_BRCOND [[AND2]](s32), %bb.5
; MIPS32: bb.3.b.PHI.1.0:
; MIPS32: successors: %bb.6(0x80000000)
; MIPS32: [[LOAD3:%[0-9]+]]:gprb(s32) = G_LOAD [[COPY3]](p0) :: (load (s32) from %ir.a, align 8)
; MIPS32: [[C4:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 4
; MIPS32: [[PTR_ADD:%[0-9]+]]:gprb(p0) = G_PTR_ADD [[COPY3]], [[C4]](s32)
; MIPS32: [[LOAD4:%[0-9]+]]:gprb(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s32) from %ir.a + 4, basealign 8)
; MIPS32: G_BR %bb.6
; MIPS32: bb.4.b.PHI.1.1:
; MIPS32: successors: %bb.6(0x80000000)
; MIPS32: [[LOAD5:%[0-9]+]]:gprb(s32) = G_LOAD [[LOAD]](p0) :: (load (s32) from %ir.b, align 8)
; MIPS32: [[C5:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 4
; MIPS32: [[PTR_ADD1:%[0-9]+]]:gprb(p0) = G_PTR_ADD [[LOAD]], [[C5]](s32)
; MIPS32: [[LOAD6:%[0-9]+]]:gprb(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s32) from %ir.b + 4, basealign 8)
; MIPS32: G_BR %bb.6
; MIPS32: bb.5.b.PHI.1.2:
; MIPS32: successors: %bb.6(0x80000000)
; MIPS32: [[LOAD7:%[0-9]+]]:gprb(s32) = G_LOAD [[LOAD1]](p0) :: (load (s32) from %ir.c, align 8)
; MIPS32: [[C6:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 4
; MIPS32: [[PTR_ADD2:%[0-9]+]]:gprb(p0) = G_PTR_ADD [[LOAD1]], [[C6]](s32)
; MIPS32: [[LOAD8:%[0-9]+]]:gprb(s32) = G_LOAD [[PTR_ADD2]](p0) :: (load (s32) from %ir.c + 4, basealign 8)
; MIPS32: bb.6.b.PHI.1:
; MIPS32: successors: %bb.7(0x40000000), %bb.13(0x40000000)
; MIPS32: [[PHI:%[0-9]+]]:gprb(s32) = G_PHI [[LOAD3]](s32), %bb.3, [[LOAD5]](s32), %bb.4, [[LOAD7]](s32), %bb.5
; MIPS32: [[PHI1:%[0-9]+]]:gprb(s32) = G_PHI [[LOAD4]](s32), %bb.3, [[LOAD6]](s32), %bb.4, [[LOAD8]](s32), %bb.5
; MIPS32: [[C7:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY7:%[0-9]+]]:gprb(s32) = COPY [[COPY2]](s32)
; MIPS32: [[AND3:%[0-9]+]]:gprb(s32) = G_AND [[COPY7]], [[C7]]
; MIPS32: G_BRCOND [[AND3]](s32), %bb.7
; MIPS32: G_BR %bb.13
; MIPS32: bb.7.b.PHI.1.end:
; MIPS32: G_STORE [[PHI]](s32), [[LOAD2]](p0) :: (store (s32) into %ir.result, align 8)
; MIPS32: [[C8:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 4
; MIPS32: [[PTR_ADD3:%[0-9]+]]:gprb(p0) = G_PTR_ADD [[LOAD2]], [[C8]](s32)
; MIPS32: G_STORE [[PHI1]](s32), [[PTR_ADD3]](p0) :: (store (s32) into %ir.result + 4, basealign 8)
; MIPS32: RetRA
; MIPS32: bb.8.pre.PHI.2:
; MIPS32: successors: %bb.9(0x40000000), %bb.10(0x40000000)
; MIPS32: [[C9:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY8:%[0-9]+]]:gprb(s32) = COPY [[COPY]](s32)
; MIPS32: [[AND4:%[0-9]+]]:gprb(s32) = G_AND [[COPY8]], [[C9]]
; MIPS32: G_BRCOND [[AND4]](s32), %bb.9
; MIPS32: G_BR %bb.10
; MIPS32: bb.9.b.PHI.2.0:
; MIPS32: successors: %bb.11(0x80000000)
; MIPS32: [[LOAD9:%[0-9]+]]:gprb(s32) = G_LOAD [[COPY3]](p0) :: (load (s32) from %ir.a, align 8)
; MIPS32: [[C10:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 4
; MIPS32: [[PTR_ADD4:%[0-9]+]]:gprb(p0) = G_PTR_ADD [[COPY3]], [[C10]](s32)
; MIPS32: [[LOAD10:%[0-9]+]]:gprb(s32) = G_LOAD [[PTR_ADD4]](p0) :: (load (s32) from %ir.a + 4, basealign 8)
; MIPS32: G_BR %bb.11
; MIPS32: bb.10.b.PHI.2.1:
; MIPS32: successors: %bb.11(0x80000000)
; MIPS32: [[LOAD11:%[0-9]+]]:gprb(s32) = G_LOAD [[LOAD]](p0) :: (load (s32) from %ir.b, align 8)
; MIPS32: [[C11:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 4
; MIPS32: [[PTR_ADD5:%[0-9]+]]:gprb(p0) = G_PTR_ADD [[LOAD]], [[C11]](s32)
; MIPS32: [[LOAD12:%[0-9]+]]:gprb(s32) = G_LOAD [[PTR_ADD5]](p0) :: (load (s32) from %ir.b + 4, basealign 8)
; MIPS32: bb.11.b.PHI.2:
; MIPS32: successors: %bb.13(0x40000000), %bb.12(0x40000000)
; MIPS32: [[PHI2:%[0-9]+]]:gprb(s32) = G_PHI [[LOAD9]](s32), %bb.9, [[LOAD11]](s32), %bb.10
; MIPS32: [[PHI3:%[0-9]+]]:gprb(s32) = G_PHI [[LOAD10]](s32), %bb.9, [[LOAD12]](s32), %bb.10
; MIPS32: [[C12:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY9:%[0-9]+]]:gprb(s32) = COPY [[COPY1]](s32)
; MIPS32: [[AND5:%[0-9]+]]:gprb(s32) = G_AND [[COPY9]], [[C12]]
; MIPS32: G_BRCOND [[AND5]](s32), %bb.13
; MIPS32: bb.12.b.PHI.2.end:
; MIPS32: G_STORE [[PHI2]](s32), [[LOAD2]](p0) :: (store (s32) into %ir.result, align 8)
; MIPS32: [[C13:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 4
; MIPS32: [[PTR_ADD6:%[0-9]+]]:gprb(p0) = G_PTR_ADD [[LOAD2]], [[C13]](s32)
; MIPS32: G_STORE [[PHI3]](s32), [[PTR_ADD6]](p0) :: (store (s32) into %ir.result + 4, basealign 8)
; MIPS32: RetRA
; MIPS32: bb.13.b.PHI.3:
; MIPS32: [[PHI4:%[0-9]+]]:gprb(s32) = G_PHI [[PHI2]](s32), %bb.11, [[PHI]](s32), %bb.6
; MIPS32: [[PHI5:%[0-9]+]]:gprb(s32) = G_PHI [[PHI3]](s32), %bb.11, [[PHI1]](s32), %bb.6
; MIPS32: [[PHI6:%[0-9]+]]:gprb(s32) = G_PHI [[PHI2]](s32), %bb.11, [[C]](s32), %bb.6
; MIPS32: [[PHI7:%[0-9]+]]:gprb(s32) = G_PHI [[PHI3]](s32), %bb.11, [[C]](s32), %bb.6
; MIPS32: [[C14:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY10:%[0-9]+]]:gprb(s32) = COPY [[COPY2]](s32)
; MIPS32: [[AND6:%[0-9]+]]:gprb(s32) = G_AND [[COPY10]], [[C14]]
; MIPS32: [[SELECT:%[0-9]+]]:gprb(s32) = G_SELECT [[AND6]](s32), [[PHI4]], [[PHI6]]
; MIPS32: [[SELECT1:%[0-9]+]]:gprb(s32) = G_SELECT [[AND6]](s32), [[PHI5]], [[PHI7]]
; MIPS32: [[COPY11:%[0-9]+]]:gprb(s32) = COPY [[COPY1]](s32)
; MIPS32: [[AND7:%[0-9]+]]:gprb(s32) = G_AND [[COPY11]], [[C14]]
; MIPS32: [[SELECT2:%[0-9]+]]:gprb(s32) = G_SELECT [[AND7]](s32), [[SELECT]], [[PHI4]]
; MIPS32: [[SELECT3:%[0-9]+]]:gprb(s32) = G_SELECT [[AND7]](s32), [[SELECT1]], [[PHI5]]
; MIPS32: G_STORE [[SELECT2]](s32), [[LOAD2]](p0) :: (store (s32) into %ir.result, align 8)
; MIPS32: [[C15:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 4
; MIPS32: [[PTR_ADD7:%[0-9]+]]:gprb(p0) = G_PTR_ADD [[LOAD2]], [[C15]](s32)
; MIPS32: G_STORE [[SELECT3]](s32), [[PTR_ADD7]](p0) :: (store (s32) into %ir.result + 4, basealign 8)
; MIPS32: G_STORE [[PHI4]](s32), [[LOAD2]](p0) :: (store (s32) into %ir.result, align 8)
; MIPS32: [[C16:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 4
; MIPS32: [[PTR_ADD8:%[0-9]+]]:gprb(p0) = G_PTR_ADD [[LOAD2]], [[C16]](s32)
; MIPS32: G_STORE [[PHI5]](s32), [[PTR_ADD8]](p0) :: (store (s32) into %ir.result + 4, basealign 8)
; MIPS32: RetRA
bb.1.entry:
liveins: $a0, $a1, $a2, $a3
%7:_(s32) = COPY $a0
%8:_(s32) = COPY $a1
%9:_(s32) = COPY $a2
%3:_(p0) = COPY $a3
%10:_(p0) = G_FRAME_INDEX %fixed-stack.2
%4:_(p0) = G_LOAD %10(p0) :: (load (p0) from %fixed-stack.2, align 8)
%11:_(p0) = G_FRAME_INDEX %fixed-stack.1
%5:_(p0) = G_LOAD %11(p0) :: (load (p0) from %fixed-stack.1)
%12:_(p0) = G_FRAME_INDEX %fixed-stack.0
%6:_(p0) = G_LOAD %12(p0) :: (load (p0) from %fixed-stack.0, align 8)
%33:_(s32) = G_CONSTANT i32 0
%24:_(s64) = G_MERGE_VALUES %33(s32), %33(s32)
%34:_(s32) = G_CONSTANT i32 1
%35:_(s32) = COPY %7(s32)
%32:_(s32) = G_AND %35, %34
G_BRCOND %32(s32), %bb.9
bb.2.pre.PHI.1:
%36:_(s32) = G_CONSTANT i32 1
%37:_(s32) = COPY %8(s32)
%31:_(s32) = G_AND %37, %36
G_BRCOND %31(s32), %bb.5
bb.3.pre.PHI.1.0:
%38:_(s32) = G_CONSTANT i32 1
%39:_(s32) = COPY %9(s32)
%30:_(s32) = G_AND %39, %38
G_BRCOND %30(s32), %bb.6
bb.4.b.PHI.1.0:
%13:_(s64) = G_LOAD %3(p0) :: (load (s64) from %ir.a)
G_BR %bb.7
bb.5.b.PHI.1.1:
%15:_(s64) = G_LOAD %4(p0) :: (load (s64) from %ir.b)
G_BR %bb.7
bb.6.b.PHI.1.2:
%14:_(s64) = G_LOAD %5(p0) :: (load (s64) from %ir.c)
bb.7.b.PHI.1:
%16:_(s64) = G_PHI %13(s64), %bb.4, %15(s64), %bb.5, %14(s64), %bb.6
%40:_(s32) = G_CONSTANT i32 1
%41:_(s32) = COPY %9(s32)
%29:_(s32) = G_AND %41, %40
G_BRCOND %29(s32), %bb.8
G_BR %bb.14
bb.8.b.PHI.1.end:
G_STORE %16(s64), %6(p0) :: (store (s64) into %ir.result)
RetRA
bb.9.pre.PHI.2:
%42:_(s32) = G_CONSTANT i32 1
%43:_(s32) = COPY %7(s32)
%28:_(s32) = G_AND %43, %42
G_BRCOND %28(s32), %bb.10
G_BR %bb.11
bb.10.b.PHI.2.0:
%18:_(s64) = G_LOAD %3(p0) :: (load (s64) from %ir.a)
G_BR %bb.12
bb.11.b.PHI.2.1:
%17:_(s64) = G_LOAD %4(p0) :: (load (s64) from %ir.b)
bb.12.b.PHI.2:
%19:_(s64) = G_PHI %18(s64), %bb.10, %17(s64), %bb.11
%44:_(s32) = G_CONSTANT i32 1
%45:_(s32) = COPY %8(s32)
%27:_(s32) = G_AND %45, %44
G_BRCOND %27(s32), %bb.14
bb.13.b.PHI.2.end:
G_STORE %19(s64), %6(p0) :: (store (s64) into %ir.result)
RetRA
bb.14.b.PHI.3:
%20:_(s64) = G_PHI %19(s64), %bb.12, %16(s64), %bb.7
%21:_(s64) = G_PHI %19(s64), %bb.12, %24(s64), %bb.7
%46:_(s32) = G_CONSTANT i32 1
%47:_(s32) = COPY %9(s32)
%26:_(s32) = G_AND %47, %46
%22:_(s64) = G_SELECT %26(s32), %20, %21
%48:_(s32) = COPY %8(s32)
%25:_(s32) = G_AND %48, %46
%23:_(s64) = G_SELECT %25(s32), %22, %20
G_STORE %23(s64), %6(p0) :: (store (s64) into %ir.result)
G_STORE %20(s64), %6(p0) :: (store (s64) into %ir.result)
RetRA
...
---
name: long_chain_ambiguous_double_in_fpr
alignment: 4
legalized: true
tracksRegLiveness: true
fixedStack:
- { id: 0, offset: 24, size: 4, alignment: 8, isImmutable: true }
- { id: 1, offset: 20, size: 4, alignment: 4, isImmutable: true }
- { id: 2, offset: 16, size: 4, alignment: 8, isImmutable: true }
body: |
; MIPS32-LABEL: name: long_chain_ambiguous_double_in_fpr
; MIPS32: bb.0.entry:
; MIPS32: successors: %bb.8(0x40000000), %bb.1(0x40000000)
; MIPS32: liveins: $a0, $a1, $a2, $a3
; MIPS32: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a0
; MIPS32: [[COPY1:%[0-9]+]]:gprb(s32) = COPY $a1
; MIPS32: [[COPY2:%[0-9]+]]:gprb(s32) = COPY $a2
; MIPS32: [[COPY3:%[0-9]+]]:gprb(p0) = COPY $a3
; MIPS32: [[FRAME_INDEX:%[0-9]+]]:gprb(p0) = G_FRAME_INDEX %fixed-stack.0
; MIPS32: [[LOAD:%[0-9]+]]:gprb(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (load (p0) from %fixed-stack.0, align 8)
; MIPS32: [[FRAME_INDEX1:%[0-9]+]]:gprb(p0) = G_FRAME_INDEX %fixed-stack.1
; MIPS32: [[LOAD1:%[0-9]+]]:gprb(p0) = G_LOAD [[FRAME_INDEX1]](p0) :: (load (p0) from %fixed-stack.1)
; MIPS32: [[FRAME_INDEX2:%[0-9]+]]:gprb(p0) = G_FRAME_INDEX %fixed-stack.2
; MIPS32: [[LOAD2:%[0-9]+]]:gprb(p0) = G_LOAD [[FRAME_INDEX2]](p0) :: (load (p0) from %fixed-stack.2, align 8)
; MIPS32: [[C:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY4:%[0-9]+]]:gprb(s32) = COPY [[COPY]](s32)
; MIPS32: [[AND:%[0-9]+]]:gprb(s32) = G_AND [[COPY4]], [[C]]
; MIPS32: G_BRCOND [[AND]](s32), %bb.8
; MIPS32: bb.1.pre.PHI.1:
; MIPS32: successors: %bb.4(0x40000000), %bb.2(0x40000000)
; MIPS32: [[C1:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY5:%[0-9]+]]:gprb(s32) = COPY [[COPY1]](s32)
; MIPS32: [[AND1:%[0-9]+]]:gprb(s32) = G_AND [[COPY5]], [[C1]]
; MIPS32: G_BRCOND [[AND1]](s32), %bb.4
; MIPS32: bb.2.pre.PHI.1.0:
; MIPS32: successors: %bb.5(0x40000000), %bb.3(0x40000000)
; MIPS32: [[C2:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY6:%[0-9]+]]:gprb(s32) = COPY [[COPY2]](s32)
; MIPS32: [[AND2:%[0-9]+]]:gprb(s32) = G_AND [[COPY6]], [[C2]]
; MIPS32: G_BRCOND [[AND2]](s32), %bb.5
; MIPS32: bb.3.b.PHI.1.0:
; MIPS32: successors: %bb.6(0x80000000)
; MIPS32: [[LOAD3:%[0-9]+]]:fprb(s64) = G_LOAD [[COPY3]](p0) :: (load (s64) from %ir.a)
; MIPS32: G_BR %bb.6
; MIPS32: bb.4.b.PHI.1.1:
; MIPS32: successors: %bb.6(0x80000000)
; MIPS32: [[LOAD4:%[0-9]+]]:fprb(s64) = G_LOAD [[LOAD]](p0) :: (load (s64) from %ir.b)
; MIPS32: G_BR %bb.6
; MIPS32: bb.5.b.PHI.1.2:
; MIPS32: successors: %bb.6(0x80000000)
; MIPS32: [[LOAD5:%[0-9]+]]:fprb(s64) = G_LOAD [[LOAD1]](p0) :: (load (s64) from %ir.c)
; MIPS32: bb.6.b.PHI.1:
; MIPS32: successors: %bb.7(0x40000000), %bb.13(0x40000000)
; MIPS32: [[PHI:%[0-9]+]]:fprb(s64) = G_PHI [[LOAD3]](s64), %bb.3, [[LOAD4]](s64), %bb.4, [[LOAD5]](s64), %bb.5
; MIPS32: [[C3:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY7:%[0-9]+]]:gprb(s32) = COPY [[COPY2]](s32)
; MIPS32: [[AND3:%[0-9]+]]:gprb(s32) = G_AND [[COPY7]], [[C3]]
; MIPS32: G_BRCOND [[AND3]](s32), %bb.7
; MIPS32: G_BR %bb.13
; MIPS32: bb.7.b.PHI.1.end:
; MIPS32: G_STORE [[PHI]](s64), [[LOAD2]](p0) :: (store (s64) into %ir.result)
; MIPS32: RetRA
; MIPS32: bb.8.pre.PHI.2:
; MIPS32: successors: %bb.9(0x40000000), %bb.10(0x40000000)
; MIPS32: [[C4:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY8:%[0-9]+]]:gprb(s32) = COPY [[COPY]](s32)
; MIPS32: [[AND4:%[0-9]+]]:gprb(s32) = G_AND [[COPY8]], [[C4]]
; MIPS32: G_BRCOND [[AND4]](s32), %bb.9
; MIPS32: G_BR %bb.10
; MIPS32: bb.9.b.PHI.2.0:
; MIPS32: successors: %bb.11(0x80000000)
; MIPS32: [[LOAD6:%[0-9]+]]:fprb(s64) = G_LOAD [[COPY3]](p0) :: (load (s64) from %ir.a)
; MIPS32: G_BR %bb.11
; MIPS32: bb.10.b.PHI.2.1:
; MIPS32: successors: %bb.11(0x80000000)
; MIPS32: [[LOAD7:%[0-9]+]]:fprb(s64) = G_LOAD [[LOAD]](p0) :: (load (s64) from %ir.b)
; MIPS32: bb.11.b.PHI.2:
; MIPS32: successors: %bb.13(0x40000000), %bb.12(0x40000000)
; MIPS32: [[PHI1:%[0-9]+]]:fprb(s64) = G_PHI [[LOAD6]](s64), %bb.9, [[LOAD7]](s64), %bb.10
; MIPS32: [[C5:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY9:%[0-9]+]]:gprb(s32) = COPY [[COPY1]](s32)
; MIPS32: [[AND5:%[0-9]+]]:gprb(s32) = G_AND [[COPY9]], [[C5]]
; MIPS32: G_BRCOND [[AND5]](s32), %bb.13
; MIPS32: bb.12.b.PHI.2.end:
; MIPS32: G_STORE [[PHI1]](s64), [[LOAD2]](p0) :: (store (s64) into %ir.result)
; MIPS32: RetRA
; MIPS32: bb.13.b.PHI.3:
; MIPS32: [[PHI2:%[0-9]+]]:fprb(s64) = G_PHI [[PHI1]](s64), %bb.11, [[PHI]](s64), %bb.6
; MIPS32: [[PHI3:%[0-9]+]]:fprb(s64) = G_PHI [[PHI1]](s64), %bb.11, [[PHI]](s64), %bb.6
; MIPS32: [[C6:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY10:%[0-9]+]]:gprb(s32) = COPY [[COPY2]](s32)
; MIPS32: [[AND6:%[0-9]+]]:gprb(s32) = G_AND [[COPY10]], [[C6]]
; MIPS32: [[SELECT:%[0-9]+]]:fprb(s64) = G_SELECT [[AND6]](s32), [[PHI2]], [[PHI3]]
; MIPS32: [[COPY11:%[0-9]+]]:gprb(s32) = COPY [[COPY1]](s32)
; MIPS32: [[AND7:%[0-9]+]]:gprb(s32) = G_AND [[COPY11]], [[C6]]
; MIPS32: [[SELECT1:%[0-9]+]]:fprb(s64) = G_SELECT [[AND7]](s32), [[SELECT]], [[PHI2]]
; MIPS32: G_STORE [[SELECT1]](s64), [[LOAD2]](p0) :: (store (s64) into %ir.result)
; MIPS32: G_STORE [[PHI2]](s64), [[LOAD2]](p0) :: (store (s64) into %ir.result)
; MIPS32: RetRA
bb.1.entry:
liveins: $a0, $a1, $a2, $a3
%7:_(s32) = COPY $a0
%8:_(s32) = COPY $a1
%9:_(s32) = COPY $a2
%3:_(p0) = COPY $a3
%10:_(p0) = G_FRAME_INDEX %fixed-stack.2
%4:_(p0) = G_LOAD %10(p0) :: (load (p0) from %fixed-stack.2, align 8)
%11:_(p0) = G_FRAME_INDEX %fixed-stack.1
%5:_(p0) = G_LOAD %11(p0) :: (load (p0) from %fixed-stack.1)
%12:_(p0) = G_FRAME_INDEX %fixed-stack.0
%6:_(p0) = G_LOAD %12(p0) :: (load (p0) from %fixed-stack.0, align 8)
%32:_(s32) = G_CONSTANT i32 1
%33:_(s32) = COPY %7(s32)
%31:_(s32) = G_AND %33, %32
G_BRCOND %31(s32), %bb.9
bb.2.pre.PHI.1:
%34:_(s32) = G_CONSTANT i32 1
%35:_(s32) = COPY %8(s32)
%30:_(s32) = G_AND %35, %34
G_BRCOND %30(s32), %bb.5
bb.3.pre.PHI.1.0:
%36:_(s32) = G_CONSTANT i32 1
%37:_(s32) = COPY %9(s32)
%29:_(s32) = G_AND %37, %36
G_BRCOND %29(s32), %bb.6
bb.4.b.PHI.1.0:
%13:_(s64) = G_LOAD %3(p0) :: (load (s64) from %ir.a)
G_BR %bb.7
bb.5.b.PHI.1.1:
%15:_(s64) = G_LOAD %4(p0) :: (load (s64) from %ir.b)
G_BR %bb.7
bb.6.b.PHI.1.2:
%14:_(s64) = G_LOAD %5(p0) :: (load (s64) from %ir.c)
bb.7.b.PHI.1:
%16:_(s64) = G_PHI %13(s64), %bb.4, %15(s64), %bb.5, %14(s64), %bb.6
%38:_(s32) = G_CONSTANT i32 1
%39:_(s32) = COPY %9(s32)
%28:_(s32) = G_AND %39, %38
G_BRCOND %28(s32), %bb.8
G_BR %bb.14
bb.8.b.PHI.1.end:
G_STORE %16(s64), %6(p0) :: (store (s64) into %ir.result)
RetRA
bb.9.pre.PHI.2:
%40:_(s32) = G_CONSTANT i32 1
%41:_(s32) = COPY %7(s32)
%27:_(s32) = G_AND %41, %40
G_BRCOND %27(s32), %bb.10
G_BR %bb.11
bb.10.b.PHI.2.0:
%18:_(s64) = G_LOAD %3(p0) :: (load (s64) from %ir.a)
G_BR %bb.12
bb.11.b.PHI.2.1:
%17:_(s64) = G_LOAD %4(p0) :: (load (s64) from %ir.b)
bb.12.b.PHI.2:
%19:_(s64) = G_PHI %18(s64), %bb.10, %17(s64), %bb.11
%42:_(s32) = G_CONSTANT i32 1
%43:_(s32) = COPY %8(s32)
%26:_(s32) = G_AND %43, %42
G_BRCOND %26(s32), %bb.14
bb.13.b.PHI.2.end:
G_STORE %19(s64), %6(p0) :: (store (s64) into %ir.result)
RetRA
bb.14.b.PHI.3:
%20:_(s64) = G_PHI %19(s64), %bb.12, %16(s64), %bb.7
%21:_(s64) = G_PHI %19(s64), %bb.12, %16(s64), %bb.7
%44:_(s32) = G_CONSTANT i32 1
%45:_(s32) = COPY %9(s32)
%25:_(s32) = G_AND %45, %44
%22:_(s64) = G_SELECT %25(s32), %20, %21
%46:_(s32) = COPY %8(s32)
%24:_(s32) = G_AND %46, %44
%23:_(s64) = G_SELECT %24(s32), %22, %20
G_STORE %23(s64), %6(p0) :: (store (s64) into %ir.result)
G_STORE %20(s64), %6(p0) :: (store (s64) into %ir.result)
RetRA
...
---
name: long_chain_double_in_fpr
alignment: 4
legalized: true
tracksRegLiveness: true
fixedStack:
- { id: 0, offset: 24, size: 4, alignment: 8, isImmutable: true }
- { id: 1, offset: 20, size: 4, alignment: 4, isImmutable: true }
- { id: 2, offset: 16, size: 4, alignment: 8, isImmutable: true }
body: |
; MIPS32-LABEL: name: long_chain_double_in_fpr
; MIPS32: bb.0.entry:
; MIPS32: successors: %bb.8(0x40000000), %bb.1(0x40000000)
; MIPS32: liveins: $a0, $a1, $a2, $a3
; MIPS32: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a0
; MIPS32: [[COPY1:%[0-9]+]]:gprb(s32) = COPY $a1
; MIPS32: [[COPY2:%[0-9]+]]:gprb(s32) = COPY $a2
; MIPS32: [[COPY3:%[0-9]+]]:gprb(p0) = COPY $a3
; MIPS32: [[FRAME_INDEX:%[0-9]+]]:gprb(p0) = G_FRAME_INDEX %fixed-stack.0
; MIPS32: [[LOAD:%[0-9]+]]:gprb(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (load (p0) from %fixed-stack.0, align 8)
; MIPS32: [[FRAME_INDEX1:%[0-9]+]]:gprb(p0) = G_FRAME_INDEX %fixed-stack.1
; MIPS32: [[LOAD1:%[0-9]+]]:gprb(p0) = G_LOAD [[FRAME_INDEX1]](p0) :: (load (p0) from %fixed-stack.1)
; MIPS32: [[FRAME_INDEX2:%[0-9]+]]:gprb(p0) = G_FRAME_INDEX %fixed-stack.2
; MIPS32: [[LOAD2:%[0-9]+]]:gprb(p0) = G_LOAD [[FRAME_INDEX2]](p0) :: (load (p0) from %fixed-stack.2, align 8)
; MIPS32: [[C:%[0-9]+]]:fprb(s64) = G_FCONSTANT double 0.000000e+00
; MIPS32: [[C1:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY4:%[0-9]+]]:gprb(s32) = COPY [[COPY]](s32)
; MIPS32: [[AND:%[0-9]+]]:gprb(s32) = G_AND [[COPY4]], [[C1]]
; MIPS32: G_BRCOND [[AND]](s32), %bb.8
; MIPS32: bb.1.pre.PHI.1:
; MIPS32: successors: %bb.4(0x40000000), %bb.2(0x40000000)
; MIPS32: [[C2:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY5:%[0-9]+]]:gprb(s32) = COPY [[COPY1]](s32)
; MIPS32: [[AND1:%[0-9]+]]:gprb(s32) = G_AND [[COPY5]], [[C2]]
; MIPS32: G_BRCOND [[AND1]](s32), %bb.4
; MIPS32: bb.2.pre.PHI.1.0:
; MIPS32: successors: %bb.5(0x40000000), %bb.3(0x40000000)
; MIPS32: [[C3:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY6:%[0-9]+]]:gprb(s32) = COPY [[COPY2]](s32)
; MIPS32: [[AND2:%[0-9]+]]:gprb(s32) = G_AND [[COPY6]], [[C3]]
; MIPS32: G_BRCOND [[AND2]](s32), %bb.5
; MIPS32: bb.3.b.PHI.1.0:
; MIPS32: successors: %bb.6(0x80000000)
; MIPS32: [[LOAD3:%[0-9]+]]:fprb(s64) = G_LOAD [[COPY3]](p0) :: (load (s64) from %ir.a)
; MIPS32: G_BR %bb.6
; MIPS32: bb.4.b.PHI.1.1:
; MIPS32: successors: %bb.6(0x80000000)
; MIPS32: [[LOAD4:%[0-9]+]]:fprb(s64) = G_LOAD [[LOAD]](p0) :: (load (s64) from %ir.b)
; MIPS32: G_BR %bb.6
; MIPS32: bb.5.b.PHI.1.2:
; MIPS32: successors: %bb.6(0x80000000)
; MIPS32: [[LOAD5:%[0-9]+]]:fprb(s64) = G_LOAD [[LOAD1]](p0) :: (load (s64) from %ir.c)
; MIPS32: bb.6.b.PHI.1:
; MIPS32: successors: %bb.7(0x40000000), %bb.13(0x40000000)
; MIPS32: [[PHI:%[0-9]+]]:fprb(s64) = G_PHI [[LOAD3]](s64), %bb.3, [[LOAD4]](s64), %bb.4, [[LOAD5]](s64), %bb.5
; MIPS32: [[C4:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY7:%[0-9]+]]:gprb(s32) = COPY [[COPY2]](s32)
; MIPS32: [[AND3:%[0-9]+]]:gprb(s32) = G_AND [[COPY7]], [[C4]]
; MIPS32: G_BRCOND [[AND3]](s32), %bb.7
; MIPS32: G_BR %bb.13
; MIPS32: bb.7.b.PHI.1.end:
; MIPS32: G_STORE [[PHI]](s64), [[LOAD2]](p0) :: (store (s64) into %ir.result)
; MIPS32: RetRA
; MIPS32: bb.8.pre.PHI.2:
; MIPS32: successors: %bb.9(0x40000000), %bb.10(0x40000000)
; MIPS32: [[C5:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY8:%[0-9]+]]:gprb(s32) = COPY [[COPY]](s32)
; MIPS32: [[AND4:%[0-9]+]]:gprb(s32) = G_AND [[COPY8]], [[C5]]
; MIPS32: G_BRCOND [[AND4]](s32), %bb.9
; MIPS32: G_BR %bb.10
; MIPS32: bb.9.b.PHI.2.0:
; MIPS32: successors: %bb.11(0x80000000)
; MIPS32: [[LOAD6:%[0-9]+]]:fprb(s64) = G_LOAD [[COPY3]](p0) :: (load (s64) from %ir.a)
; MIPS32: G_BR %bb.11
; MIPS32: bb.10.b.PHI.2.1:
; MIPS32: successors: %bb.11(0x80000000)
; MIPS32: [[LOAD7:%[0-9]+]]:fprb(s64) = G_LOAD [[LOAD]](p0) :: (load (s64) from %ir.b)
; MIPS32: bb.11.b.PHI.2:
; MIPS32: successors: %bb.13(0x40000000), %bb.12(0x40000000)
; MIPS32: [[PHI1:%[0-9]+]]:fprb(s64) = G_PHI [[LOAD6]](s64), %bb.9, [[LOAD7]](s64), %bb.10
; MIPS32: [[C6:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY9:%[0-9]+]]:gprb(s32) = COPY [[COPY1]](s32)
; MIPS32: [[AND5:%[0-9]+]]:gprb(s32) = G_AND [[COPY9]], [[C6]]
; MIPS32: G_BRCOND [[AND5]](s32), %bb.13
; MIPS32: bb.12.b.PHI.2.end:
; MIPS32: G_STORE [[PHI1]](s64), [[LOAD2]](p0) :: (store (s64) into %ir.result)
; MIPS32: RetRA
; MIPS32: bb.13.b.PHI.3:
; MIPS32: [[PHI2:%[0-9]+]]:fprb(s64) = G_PHI [[PHI1]](s64), %bb.11, [[PHI]](s64), %bb.6
; MIPS32: [[PHI3:%[0-9]+]]:fprb(s64) = G_PHI [[PHI1]](s64), %bb.11, [[C]](s64), %bb.6
; MIPS32: [[C7:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
; MIPS32: [[COPY10:%[0-9]+]]:gprb(s32) = COPY [[COPY2]](s32)
; MIPS32: [[AND6:%[0-9]+]]:gprb(s32) = G_AND [[COPY10]], [[C7]]
; MIPS32: [[SELECT:%[0-9]+]]:fprb(s64) = G_SELECT [[AND6]](s32), [[PHI2]], [[PHI3]]
; MIPS32: [[COPY11:%[0-9]+]]:gprb(s32) = COPY [[COPY1]](s32)
; MIPS32: [[AND7:%[0-9]+]]:gprb(s32) = G_AND [[COPY11]], [[C7]]
; MIPS32: [[SELECT1:%[0-9]+]]:fprb(s64) = G_SELECT [[AND7]](s32), [[SELECT]], [[PHI2]]
; MIPS32: G_STORE [[SELECT1]](s64), [[LOAD2]](p0) :: (store (s64) into %ir.result)
; MIPS32: G_STORE [[PHI2]](s64), [[LOAD2]](p0) :: (store (s64) into %ir.result)
; MIPS32: RetRA
bb.1.entry:
liveins: $a0, $a1, $a2, $a3
%7:_(s32) = COPY $a0
%8:_(s32) = COPY $a1
%9:_(s32) = COPY $a2
%3:_(p0) = COPY $a3
%10:_(p0) = G_FRAME_INDEX %fixed-stack.2
%4:_(p0) = G_LOAD %10(p0) :: (load (p0) from %fixed-stack.2, align 8)
%11:_(p0) = G_FRAME_INDEX %fixed-stack.1
%5:_(p0) = G_LOAD %11(p0) :: (load (p0) from %fixed-stack.1)
%12:_(p0) = G_FRAME_INDEX %fixed-stack.0
%6:_(p0) = G_LOAD %12(p0) :: (load (p0) from %fixed-stack.0, align 8)
%24:_(s64) = G_FCONSTANT double 0.000000e+00
%33:_(s32) = G_CONSTANT i32 1
%34:_(s32) = COPY %7(s32)
%32:_(s32) = G_AND %34, %33
G_BRCOND %32(s32), %bb.9
bb.2.pre.PHI.1:
%35:_(s32) = G_CONSTANT i32 1
%36:_(s32) = COPY %8(s32)
%31:_(s32) = G_AND %36, %35
G_BRCOND %31(s32), %bb.5
bb.3.pre.PHI.1.0:
%37:_(s32) = G_CONSTANT i32 1
%38:_(s32) = COPY %9(s32)
%30:_(s32) = G_AND %38, %37
G_BRCOND %30(s32), %bb.6
bb.4.b.PHI.1.0:
%13:_(s64) = G_LOAD %3(p0) :: (load (s64) from %ir.a)
G_BR %bb.7
bb.5.b.PHI.1.1:
%15:_(s64) = G_LOAD %4(p0) :: (load (s64) from %ir.b)
G_BR %bb.7
bb.6.b.PHI.1.2:
%14:_(s64) = G_LOAD %5(p0) :: (load (s64) from %ir.c)
bb.7.b.PHI.1:
%16:_(s64) = G_PHI %13(s64), %bb.4, %15(s64), %bb.5, %14(s64), %bb.6
%39:_(s32) = G_CONSTANT i32 1
%40:_(s32) = COPY %9(s32)
%29:_(s32) = G_AND %40, %39
G_BRCOND %29(s32), %bb.8
G_BR %bb.14
bb.8.b.PHI.1.end:
G_STORE %16(s64), %6(p0) :: (store (s64) into %ir.result)
RetRA
bb.9.pre.PHI.2:
%41:_(s32) = G_CONSTANT i32 1
%42:_(s32) = COPY %7(s32)
%28:_(s32) = G_AND %42, %41
G_BRCOND %28(s32), %bb.10
G_BR %bb.11
bb.10.b.PHI.2.0:
%18:_(s64) = G_LOAD %3(p0) :: (load (s64) from %ir.a)
G_BR %bb.12
bb.11.b.PHI.2.1:
%17:_(s64) = G_LOAD %4(p0) :: (load (s64) from %ir.b)
bb.12.b.PHI.2:
%19:_(s64) = G_PHI %18(s64), %bb.10, %17(s64), %bb.11
%43:_(s32) = G_CONSTANT i32 1
%44:_(s32) = COPY %8(s32)
%27:_(s32) = G_AND %44, %43
G_BRCOND %27(s32), %bb.14
bb.13.b.PHI.2.end:
G_STORE %19(s64), %6(p0) :: (store (s64) into %ir.result)
RetRA
bb.14.b.PHI.3:
%20:_(s64) = G_PHI %19(s64), %bb.12, %16(s64), %bb.7
%21:_(s64) = G_PHI %19(s64), %bb.12, %24(s64), %bb.7
%45:_(s32) = G_CONSTANT i32 1
%46:_(s32) = COPY %9(s32)
%26:_(s32) = G_AND %46, %45
%22:_(s64) = G_SELECT %26(s32), %20, %21
%47:_(s32) = COPY %8(s32)
%25:_(s32) = G_AND %47, %45
%23:_(s64) = G_SELECT %25(s32), %22, %20
G_STORE %23(s64), %6(p0) :: (store (s64) into %ir.result)
G_STORE %20(s64), %6(p0) :: (store (s64) into %ir.result)
RetRA
...