diff options
Diffstat (limited to 'llvm/lib/Target/X86/X86FastISel.cpp')
| -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()); | 

