diff options
author | Daniel Sanders <daniel.sanders@imgtec.com> | 2013-11-18 13:12:43 +0000 |
---|---|---|
committer | Daniel Sanders <daniel.sanders@imgtec.com> | 2013-11-18 13:12:43 +0000 |
commit | 23427207ea575f57b571cf5aad1effb1f97e7ee1 (patch) | |
tree | c56200f4de80bf563f3e437966407ad29acc45e6 /lib/Target/Mips | |
parent | 26651c7a6602626cf13ff3cda13f3ec2401bf790 (diff) | |
download | llvm-23427207ea575f57b571cf5aad1effb1f97e7ee1.tar.gz llvm-23427207ea575f57b571cf5aad1effb1f97e7ee1.tar.bz2 llvm-23427207ea575f57b571cf5aad1effb1f97e7ee1.tar.xz |
[mips] Fix 'ran out of registers' in MIPS32 with FP64 when generating code for (ConstantFP 0.0)
Fixed an inappropriate use of BuildPairF64 when compiling for MIPS32 with FP64
which resulted in an impossible constraint on the register allocation. It now
uses BuildPairF64_64.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195007 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Mips')
-rw-r--r-- | lib/Target/Mips/MipsSEISelDAGToDAG.cpp | 5 | ||||
-rw-r--r-- | lib/Target/Mips/MipsSEInstrInfo.cpp | 9 |
2 files changed, 12 insertions, 2 deletions
diff --git a/lib/Target/Mips/MipsSEISelDAGToDAG.cpp b/lib/Target/Mips/MipsSEISelDAGToDAG.cpp index 463c4e90c2..737660ec87 100644 --- a/lib/Target/Mips/MipsSEISelDAGToDAG.cpp +++ b/lib/Target/Mips/MipsSEISelDAGToDAG.cpp @@ -634,6 +634,11 @@ std::pair<bool, SDNode*> MipsSEDAGToDAGISel::selectNode(SDNode *Node) { SDValue Zero = CurDAG->getCopyFromReg(CurDAG->getEntryNode(), DL, Mips::ZERO_64, MVT::i64); Result = CurDAG->getMachineNode(Mips::DMTC1, DL, MVT::f64, Zero); + } else if (Subtarget.isFP64bit()) { + SDValue Zero = CurDAG->getCopyFromReg(CurDAG->getEntryNode(), DL, + Mips::ZERO, MVT::i32); + Result = CurDAG->getMachineNode(Mips::BuildPairF64_64, DL, MVT::f64, + Zero, Zero); } else { SDValue Zero = CurDAG->getCopyFromReg(CurDAG->getEntryNode(), DL, Mips::ZERO, MVT::i32); diff --git a/lib/Target/Mips/MipsSEInstrInfo.cpp b/lib/Target/Mips/MipsSEInstrInfo.cpp index 2f793348c6..02931a3e39 100644 --- a/lib/Target/Mips/MipsSEInstrInfo.cpp +++ b/lib/Target/Mips/MipsSEInstrInfo.cpp @@ -520,8 +520,13 @@ void MipsSEInstrInfo::expandBuildPairF64(MachineBasicBlock &MBB, DebugLoc dl = I->getDebugLoc(); const TargetRegisterInfo &TRI = getRegisterInfo(); - // mtc1 Lo, $fp - // mtc1 Hi, $fp + 1 + // For FP32 mode: + // mtc1 Lo, $fp + // mtc1 Hi, $fp + 1 + // For FP64 mode: + // mtc1 Lo, $fp + // mthc1 Hi, $fp + BuildMI(MBB, I, dl, Mtc1Tdd, TRI.getSubReg(DstReg, Mips::sub_lo)) .addReg(LoReg); |