summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
diff options
context:
space:
mode:
authorDavid Goodwin <david_goodwin@apple.com>2009-08-05 21:02:22 +0000
committerDavid Goodwin <david_goodwin@apple.com>2009-08-05 21:02:22 +0000
commite5b5d8fbb3390246de5d2110dfb7fca5f597d65c (patch)
tree8488e4723985a36a8dc30a339c7bb81727890dab /llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
parentfdd2519eb5cb5615d25bd61817020f75845d7f77 (diff)
downloadbcm5719-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.cpp20
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;
}
OpenPOWER on IntegriCloud