summaryrefslogtreecommitdiff
path: root/llvm/lib/Target/X86/X86MCInstLower.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/X86/X86MCInstLower.cpp')
-rw-r--r--llvm/lib/Target/X86/X86MCInstLower.cpp26
1 files changed, 6 insertions, 20 deletions
diff --git a/llvm/lib/Target/X86/X86MCInstLower.cpp b/llvm/lib/Target/X86/X86MCInstLower.cpp
index c68a9d2623c2..ff3b41bd24c4 100644
--- a/llvm/lib/Target/X86/X86MCInstLower.cpp
+++ b/llvm/lib/Target/X86/X86MCInstLower.cpp
@@ -486,6 +486,10 @@ void X86MCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
if (X86::optimizeMOVSX(OutMI))
return;
+ bool In64BitMode = AsmPrinter.getSubtarget().is64Bit();
+ if (X86::optimizeINCDEC(OutMI, In64BitMode))
+ return;
+
// Handle a few special cases to eliminate operand modifiers.
switch (OutMI.getOpcode()) {
case X86::LEA64_32r:
@@ -545,7 +549,7 @@ void X86MCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
case X86::CATCHRET: {
// Replace CATCHRET with the appropriate RET.
const X86Subtarget &Subtarget = AsmPrinter.getSubtarget();
- unsigned ReturnReg = Subtarget.is64Bit() ? X86::RAX : X86::EAX;
+ unsigned ReturnReg = In64BitMode ? X86::RAX : X86::EAX;
OutMI = MCInst();
OutMI.setOpcode(getRetOpcode(Subtarget));
OutMI.addOperand(MCOperand::createReg(ReturnReg));
@@ -577,24 +581,6 @@ void X86MCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
OutMI.setOpcode(convertTailJumpOpcode(OutMI.getOpcode()));
break;
- case X86::DEC16r:
- case X86::DEC32r:
- case X86::INC16r:
- case X86::INC32r:
- // If we aren't in 64-bit mode we can use the 1-byte inc/dec instructions.
- if (!AsmPrinter.getSubtarget().is64Bit()) {
- unsigned Opcode;
- switch (OutMI.getOpcode()) {
- default: llvm_unreachable("Invalid opcode");
- case X86::DEC16r: Opcode = X86::DEC16r_alt; break;
- case X86::DEC32r: Opcode = X86::DEC32r_alt; break;
- case X86::INC16r: Opcode = X86::INC16r_alt; break;
- case X86::INC32r: Opcode = X86::INC32r_alt; break;
- }
- OutMI.setOpcode(Opcode);
- }
- break;
-
// We don't currently select the correct instruction form for instructions
// which have a short %eax, etc. form. Handle this by custom lowering, for
// now.
@@ -703,7 +689,7 @@ void X86MCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
}
case X86::MASKMOVDQU:
case X86::VMASKMOVDQU:
- if (AsmPrinter.getSubtarget().is64Bit())
+ if (In64BitMode)
OutMI.setFlags(X86::IP_HAS_AD_SIZE);
break;