summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2010-07-11 05:17:02 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2010-07-11 05:17:02 +0000
commit8969657f0c1b178ccdbe2da3cb6cad8d991c0f3a (patch)
treeb4a1199aacd49ebe1b4f66ad4831badd05f2f442 /llvm/lib
parent51642aea770a79cbcf24e56b549334e1c17f2992 (diff)
downloadbcm5719-llvm-8969657f0c1b178ccdbe2da3cb6cad8d991c0f3a.tar.gz
bcm5719-llvm-8969657f0c1b178ccdbe2da3cb6cad8d991c0f3a.zip
Use COPY in X86FastISel::X86SelectRet.
Don't try a cross-class copy. That is very unlikely anywy since return value registers are usually register class friendly. (%EAX, %XMM0, etc). llvm-svn: 108074
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86FastISel.cpp10
1 files changed, 4 insertions, 6 deletions
diff --git a/llvm/lib/Target/X86/X86FastISel.cpp b/llvm/lib/Target/X86/X86FastISel.cpp
index 9ff87a82e84..ce2517a9acb 100644
--- a/llvm/lib/Target/X86/X86FastISel.cpp
+++ b/llvm/lib/Target/X86/X86FastISel.cpp
@@ -757,13 +757,11 @@ bool X86FastISel::X86SelectRet(const Instruction *I) {
unsigned SrcReg = Reg + VA.getValNo();
unsigned DstReg = VA.getLocReg();
const TargetRegisterClass* SrcRC = MRI.getRegClass(SrcReg);
- const TargetRegisterClass* DstRC = TRI.getMinimalPhysRegClass(DstReg);
- bool Emitted = TII.copyRegToReg(*FuncInfo.MBB, FuncInfo.InsertPt,
- DstReg, SrcReg, DstRC, SrcRC, DL);
-
- // If the target couldn't make the copy for some reason, bail.
- if (!Emitted)
+ // Avoid a cross-class copy. This is very unlikely.
+ if (!SrcRC->contains(DstReg))
return false;
+ BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(TargetOpcode::COPY),
+ DstReg).addReg(SrcReg);
// Mark the register as live out of the function.
MRI.addLiveOut(VA.getLocReg());
OpenPOWER on IntegriCloud