diff options
| author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2010-07-11 05:17:02 +0000 |
|---|---|---|
| committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2010-07-11 05:17:02 +0000 |
| commit | 8969657f0c1b178ccdbe2da3cb6cad8d991c0f3a (patch) | |
| tree | b4a1199aacd49ebe1b4f66ad4831badd05f2f442 /llvm/lib | |
| parent | 51642aea770a79cbcf24e56b549334e1c17f2992 (diff) | |
| download | bcm5719-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.cpp | 10 |
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()); |

