diff options
author | Lang Hames <lhames@gmail.com> | 2013-11-11 23:00:41 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2013-11-11 23:00:41 +0000 |
commit | c2b772351ead0a567203493e7d3de6b9ce0f4ca0 (patch) | |
tree | 5f59e11bec55cf636038c7cfa10e81c26795d765 /llvm/lib/Target/X86 | |
parent | 50e1f0095f93e4a836b6f92703ade0d1706164e1 (diff) | |
download | bcm5719-llvm-c2b772351ead0a567203493e7d3de6b9ce0f4ca0.tar.gz bcm5719-llvm-c2b772351ead0a567203493e7d3de6b9ce0f4ca0.zip |
Lower X86::MORESTACK_RET and X86::MORESTACK_RET_RESTORE_R10 in
X86AsmPrinter::EmitInstruction, rather than X86MCInstLower::Lower.
The aim is to improve the reusability of the X86MCInstLower class by making it
more function-like. The X86::MORESTACK_RET_RESTORE_R10 pseudo broke the
function model by emitting an extra instruction to the MCStreamer attached to
the AsmPrinter.
The patch should have no impact on generated code.
llvm-svn: 194431
Diffstat (limited to 'llvm/lib/Target/X86')
-rw-r--r-- | llvm/lib/Target/X86/X86MCInstLower.cpp | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/llvm/lib/Target/X86/X86MCInstLower.cpp b/llvm/lib/Target/X86/X86MCInstLower.cpp index 2cc038c8899..c718b1cceb8 100644 --- a/llvm/lib/Target/X86/X86MCInstLower.cpp +++ b/llvm/lib/Target/X86/X86MCInstLower.cpp @@ -593,18 +593,6 @@ ReSimplify: case X86::MOVSX64rr32: SimplifyMOVSX(OutMI); break; - - case X86::MORESTACK_RET: - OutMI.setOpcode(X86::RET); - break; - - case X86::MORESTACK_RET_RESTORE_R10: - OutMI.setOpcode(X86::MOV64rr); - OutMI.addOperand(MCOperand::CreateReg(X86::R10)); - OutMI.addOperand(MCOperand::CreateReg(X86::RAX)); - - AsmPrinter.OutStreamer.EmitInstruction(MCInstBuilder(X86::RET)); - break; } } @@ -940,6 +928,18 @@ void X86AsmPrinter::EmitInstruction(const MachineInstr *MI) { case TargetOpcode::PATCHPOINT: return LowerPATCHPOINT(OutStreamer, MCInstLowering, SM, *MI); + + case X86::MORESTACK_RET: + OutStreamer.EmitInstruction(MCInstBuilder(X86::RET)); + return; + + case X86::MORESTACK_RET_RESTORE_R10: + // Return, then restore R10. + OutStreamer.EmitInstruction(MCInstBuilder(X86::RET)); + OutStreamer.EmitInstruction(MCInstBuilder(X86::MOV64rr) + .addReg(X86::R10) + .addReg(X86::RAX)); + return; } MCInst TmpInst; |