diff options
author | David Goodwin <david_goodwin@apple.com> | 2009-08-05 21:02:22 +0000 |
---|---|---|
committer | David Goodwin <david_goodwin@apple.com> | 2009-08-05 21:02:22 +0000 |
commit | e5b5d8fbb3390246de5d2110dfb7fca5f597d65c (patch) | |
tree | 8488e4723985a36a8dc30a339c7bb81727890dab /llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp | |
parent | fdd2519eb5cb5615d25bd61817020f75845d7f77 (diff) | |
download | bcm5719-llvm-e5b5d8fbb3390246de5d2110dfb7fca5f597d65c.tar.gz bcm5719-llvm-e5b5d8fbb3390246de5d2110dfb7fca5f597d65c.zip |
When using NEON for single-precision FP, the NEON result must be placed in D0-D15 as these are the only D registers with S subregs. Introduce a new regclass to represent D0-D15 and use it in the NEON single-precision FP patterns.
llvm-svn: 78244
Diffstat (limited to 'llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp index 3819b430b2b..9c5f3aab9b8 100644 --- a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp +++ b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp @@ -610,23 +610,29 @@ ARMBaseInstrInfo::copyRegToReg(MachineBasicBlock &MBB, if (I != MBB.end()) DL = I->getDebugLoc(); if (DestRC != SrcRC) { - // Not yet supported! - return false; + if (((DestRC == ARM::DPRRegisterClass) && (SrcRC == ARM::DPR_VFP2RegisterClass)) || + ((SrcRC == ARM::DPRRegisterClass) && (DestRC == ARM::DPR_VFP2RegisterClass))) { + // Allow copy between DPR and DPR_VFP2. + } else { + return false; + } } - if (DestRC == ARM::GPRRegisterClass) + if (DestRC == ARM::GPRRegisterClass) { AddDefaultCC(AddDefaultPred(BuildMI(MBB, I, DL, get(ARM::MOVr), DestReg).addReg(SrcReg))); - else if (DestRC == ARM::SPRRegisterClass) + } else if (DestRC == ARM::SPRRegisterClass) { AddDefaultPred(BuildMI(MBB, I, DL, get(ARM::FCPYS), DestReg) .addReg(SrcReg)); - else if (DestRC == ARM::DPRRegisterClass) + } else if ((DestRC == ARM::DPRRegisterClass) || + (DestRC == ARM::DPR_VFP2RegisterClass)) { AddDefaultPred(BuildMI(MBB, I, DL, get(ARM::FCPYD), DestReg) .addReg(SrcReg)); - else if (DestRC == ARM::QPRRegisterClass) + } else if (DestRC == ARM::QPRRegisterClass) { BuildMI(MBB, I, DL, get(ARM::VMOVQ), DestReg).addReg(SrcReg); - else + } else { return false; + } return true; } |