diff --git a/lib/Target/ARM/ARMRegisterInfo.td b/lib/Target/ARM/ARMRegisterInfo.td index 444d0383f46..89ffed16b9f 100644 --- a/lib/Target/ARM/ARMRegisterInfo.td +++ b/lib/Target/ARM/ARMRegisterInfo.td @@ -248,7 +248,9 @@ def SPR : RegisterClass<"ARM", [f32], 32, [S0, S1, S2, S3, S4, S5, S6, S7, S8, // is double-word alignment though. def DPR : RegisterClass<"ARM", [f64, v8i8, v4i16, v2i32, v1i64, v2f32], 64, [D0, D1, D2, D3, D4, D5, D6, D7, - D8, D9, D10, D11, D12, D13, D14, D15]> { + D8, D9, D10, D11, D12, D13, D14, D15, + D16, D17, D18, D19, D20, D21, D22, D23, + D24, D25, D26, D27, D28, D29, D30, D31]> { let SubRegClassList = [SPR, SPR]; let MethodProtos = [{ iterator allocation_order_begin(const MachineFunction &MF) const; diff --git a/test/CodeGen/ARM/2009-07-29-VFP3Registers.ll b/test/CodeGen/ARM/2009-07-29-VFP3Registers.ll new file mode 100644 index 00000000000..dc1f73a79b8 --- /dev/null +++ b/test/CodeGen/ARM/2009-07-29-VFP3Registers.ll @@ -0,0 +1,108 @@ +; RUN: llvm-as < %s | llc -mtriple=armv7-apple-darwin10 -mattr=+vfp3 + +@a = external global double ; [#uses=1] + +declare double @llvm.exp.f64(double) nounwind readonly + +define arm_apcscc void @findratio(double* nocapture %res1, double* nocapture %res2) nounwind { +entry: + br label %bb + +bb: ; preds = %bb, %entry + br i1 undef, label %bb28, label %bb + +bb28: ; preds = %bb + %0 = load double* @a, align 4 ; [#uses=2] + %1 = fadd double %0, undef ; [#uses=2] + br i1 undef, label %bb59, label %bb60 + +bb59: ; preds = %bb28 + %2 = fsub double -0.000000e+00, undef ; [#uses=2] + br label %bb61 + +bb60: ; preds = %bb28 + %3 = tail call double @llvm.exp.f64(double undef) nounwind ; [#uses=1] + %4 = fsub double -0.000000e+00, %3 ; [#uses=2] + %5 = fsub double -0.000000e+00, undef ; [#uses=1] + %6 = fsub double -0.000000e+00, undef ; [#uses=1] + br label %bb61 + +bb61: ; preds = %bb60, %bb59 + %.pn201 = phi double [ undef, %bb59 ], [ undef, %bb60 ] ; [#uses=1] + %.pn111 = phi double [ undef, %bb59 ], [ undef, %bb60 ] ; [#uses=1] + %.pn452 = phi double [ undef, %bb59 ], [ undef, %bb60 ] ; [#uses=1] + %.pn85 = phi double [ undef, %bb59 ], [ undef, %bb60 ] ; [#uses=1] + %.pn238 = phi double [ 0.000000e+00, %bb59 ], [ 0.000000e+00, %bb60 ] ; [#uses=1] + %.pn39 = phi double [ undef, %bb59 ], [ undef, %bb60 ] ; [#uses=1] + %.pn230 = phi double [ undef, %bb59 ], [ undef, %bb60 ] ; [#uses=1] + %.pn228 = phi double [ 0.000000e+00, %bb59 ], [ undef, %bb60 ] ; [#uses=1] + %.pn224 = phi double [ undef, %bb59 ], [ undef, %bb60 ] ; [#uses=1] + %.pn222 = phi double [ 0.000000e+00, %bb59 ], [ undef, %bb60 ] ; [#uses=1] + %.pn218 = phi double [ %2, %bb59 ], [ %4, %bb60 ] ; [#uses=1] + %.pn214 = phi double [ 0.000000e+00, %bb59 ], [ undef, %bb60 ] ; [#uses=1] + %.pn212 = phi double [ %2, %bb59 ], [ %4, %bb60 ] ; [#uses=1] + %.pn213 = phi double [ undef, %bb59 ], [ undef, %bb60 ] ; [#uses=1] + %.pn210 = phi double [ undef, %bb59 ], [ %5, %bb60 ] ; [#uses=1] + %.pn202 = phi double [ undef, %bb59 ], [ %6, %bb60 ] ; [#uses=0] + %.pn390 = fdiv double %.pn452, undef ; [#uses=0] + %.pn145 = fdiv double %.pn238, %1 ; [#uses=0] + %.pn138 = fdiv double %.pn230, undef ; [#uses=1] + %.pn139 = fdiv double %.pn228, undef ; [#uses=1] + %.pn134 = fdiv double %.pn224, %0 ; [#uses=1] + %.pn135 = fdiv double %.pn222, %1 ; [#uses=1] + %.pn133 = fdiv double %.pn218, undef ; [#uses=0] + %.pn128 = fdiv double %.pn214, undef ; [#uses=1] + %.pn129 = fdiv double %.pn212, %.pn213 ; [#uses=1] + %.pn126 = fdiv double %.pn210, undef ; [#uses=0] + %.pn54.in = fmul double undef, %.pn201 ; [#uses=1] + %.pn42.in = fmul double undef, undef ; [#uses=1] + %.pn76 = fsub double %.pn138, %.pn139 ; [#uses=1] + %.pn74 = fsub double %.pn134, %.pn135 ; [#uses=1] + %.pn70 = fsub double %.pn128, %.pn129 ; [#uses=1] + %.pn54 = fdiv double %.pn54.in, 6.000000e+00 ; [#uses=1] + %.pn64 = fmul double undef, 0x3FE5555555555555 ; [#uses=1] + %.pn65 = fmul double undef, undef ; [#uses=1] + %.pn50 = fmul double undef, %.pn111 ; [#uses=0] + %.pn42 = fdiv double %.pn42.in, 6.000000e+00 ; [#uses=1] + %.pn40 = fmul double undef, %.pn85 ; [#uses=0] + %.pn56 = fadd double %.pn76, undef ; [#uses=1] + %.pn57 = fmul double %.pn74, undef ; [#uses=1] + %.pn36 = fadd double undef, undef ; [#uses=1] + %.pn37 = fmul double %.pn70, undef ; [#uses=1] + %.pn33 = fmul double undef, 0x3FC5555555555555 ; [#uses=1] + %.pn29 = fsub double %.pn64, %.pn65 ; [#uses=1] + %.pn21 = fadd double undef, undef ; [#uses=1] + %.pn27 = fmul double undef, 0x3FC5555555555555 ; [#uses=1] + %.pn11 = fadd double %.pn56, %.pn57 ; [#uses=1] + %.pn32 = fmul double %.pn54, undef ; [#uses=1] + %.pn26 = fmul double %.pn42, undef ; [#uses=1] + %.pn15 = fmul double 0.000000e+00, %.pn39 ; [#uses=1] + %.pn7 = fadd double %.pn36, %.pn37 ; [#uses=1] + %.pn30 = fsub double %.pn32, %.pn33 ; [#uses=1] + %.pn28 = fadd double %.pn30, 0.000000e+00 ; [#uses=1] + %.pn24 = fsub double %.pn28, %.pn29 ; [#uses=1] + %.pn22 = fsub double %.pn26, %.pn27 ; [#uses=1] + %.pn20 = fadd double %.pn24, undef ; [#uses=1] + %.pn18 = fadd double %.pn22, 0.000000e+00 ; [#uses=1] + %.pn16 = fsub double %.pn20, %.pn21 ; [#uses=1] + %.pn14 = fsub double %.pn18, undef ; [#uses=1] + %.pn12 = fadd double %.pn16, undef ; [#uses=1] + %.pn10 = fadd double %.pn14, %.pn15 ; [#uses=1] + %.pn8 = fsub double %.pn12, undef ; [#uses=1] + %.pn6 = fsub double %.pn10, %.pn11 ; [#uses=1] + %.pn4 = fadd double %.pn8, undef ; [#uses=1] + %.pn2 = fadd double %.pn6, %.pn7 ; [#uses=1] + %N1.0 = fsub double %.pn4, undef ; [#uses=1] + %D1.0 = fsub double %.pn2, undef ; [#uses=2] + br i1 undef, label %bb62, label %bb64 + +bb62: ; preds = %bb61 + %7 = fadd double %D1.0, undef ; [#uses=1] + br label %bb64 + +bb64: ; preds = %bb62, %bb61 + %.pn = phi double [ undef, %bb62 ], [ %N1.0, %bb61 ] ; [#uses=1] + %.pn1 = phi double [ %7, %bb62 ], [ %D1.0, %bb61 ] ; [#uses=1] + %x.1 = fdiv double %.pn, %.pn1 ; [#uses=0] + ret void +}