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