diff options
Diffstat (limited to 'llvm/lib/Target/X86/X86FixupLEAs.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86FixupLEAs.cpp | 76 |
1 files changed, 38 insertions, 38 deletions
diff --git a/llvm/lib/Target/X86/X86FixupLEAs.cpp b/llvm/lib/Target/X86/X86FixupLEAs.cpp index 5ce65258e7c..013ee249a60 100644 --- a/llvm/lib/Target/X86/X86FixupLEAs.cpp +++ b/llvm/lib/Target/X86/X86FixupLEAs.cpp @@ -187,10 +187,10 @@ bool FixupLEAPass::runOnMachineFunction(MachineFunction &Func) { FixupLEAPass::RegUsageState FixupLEAPass::usesRegister(MachineOperand &p, MachineBasicBlock::iterator I) { RegUsageState RegUsage = RU_NotUsed; - MachineInstr *MI = I; + MachineInstr &MI = *I; - for (unsigned int i = 0; i < MI->getNumOperands(); ++i) { - MachineOperand &opnd = MI->getOperand(i); + for (unsigned int i = 0; i < MI.getNumOperands(); ++i) { + MachineOperand &opnd = MI.getOperand(i); if (opnd.isReg() && opnd.getReg() == p.getReg()) { if (opnd.isDef()) return RU_Write; @@ -239,7 +239,7 @@ FixupLEAPass::searchBackwards(MachineOperand &p, MachineBasicBlock::iterator &I, MF->getSubtarget().getInstrItineraryData(), *CurInst); Found = getPreviousInstr(CurInst, MFI); } - return nullptr; + return MachineBasicBlock::iterator(); } static inline bool isLEA(const int opcode) { @@ -250,28 +250,28 @@ static inline bool isLEA(const int opcode) { /// isLEASimpleIncOrDec - Does this LEA have one these forms: /// lea %reg, 1(%reg) /// lea %reg, -1(%reg) -static inline bool isLEASimpleIncOrDec(MachineInstr *LEA) { - unsigned SrcReg = LEA->getOperand(1 + X86::AddrBaseReg).getReg(); - unsigned DstReg = LEA->getOperand(0).getReg(); +static inline bool isLEASimpleIncOrDec(MachineInstr &LEA) { + unsigned SrcReg = LEA.getOperand(1 + X86::AddrBaseReg).getReg(); + unsigned DstReg = LEA.getOperand(0).getReg(); unsigned AddrDispOp = 1 + X86::AddrDisp; return SrcReg == DstReg && - LEA->getOperand(1 + X86::AddrIndexReg).getReg() == 0 && - LEA->getOperand(1 + X86::AddrSegmentReg).getReg() == 0 && - LEA->getOperand(AddrDispOp).isImm() && - (LEA->getOperand(AddrDispOp).getImm() == 1 || - LEA->getOperand(AddrDispOp).getImm() == -1); + LEA.getOperand(1 + X86::AddrIndexReg).getReg() == 0 && + LEA.getOperand(1 + X86::AddrSegmentReg).getReg() == 0 && + LEA.getOperand(AddrDispOp).isImm() && + (LEA.getOperand(AddrDispOp).getImm() == 1 || + LEA.getOperand(AddrDispOp).getImm() == -1); } bool FixupLEAPass::fixupIncDec(MachineBasicBlock::iterator &I, MachineFunction::iterator MFI) const { - MachineInstr *MI = I; - int Opcode = MI->getOpcode(); + MachineInstr &MI = *I; + int Opcode = MI.getOpcode(); if (!isLEA(Opcode)) return false; if (isLEASimpleIncOrDec(MI) && TII->isSafeToClobberEFLAGS(*MFI, I)) { int NewOpcode; - bool isINC = MI->getOperand(4).getImm() == 1; + bool isINC = MI.getOperand(4).getImm() == 1; switch (Opcode) { case X86::LEA16r: NewOpcode = isINC ? X86::INC16r : X86::DEC16r; @@ -286,9 +286,9 @@ bool FixupLEAPass::fixupIncDec(MachineBasicBlock::iterator &I, } MachineInstr *NewMI = - BuildMI(*MFI, I, MI->getDebugLoc(), TII->get(NewOpcode)) - .addOperand(MI->getOperand(0)) - .addOperand(MI->getOperand(1)); + BuildMI(*MFI, I, MI.getDebugLoc(), TII->get(NewOpcode)) + .addOperand(MI.getOperand(0)) + .addOperand(MI.getOperand(1)); MFI->erase(I); I = static_cast<MachineBasicBlock::iterator>(NewMI); return true; @@ -299,16 +299,16 @@ bool FixupLEAPass::fixupIncDec(MachineBasicBlock::iterator &I, void FixupLEAPass::processInstruction(MachineBasicBlock::iterator &I, MachineFunction::iterator MFI) { // Process a load, store, or LEA instruction. - MachineInstr *MI = I; - const MCInstrDesc &Desc = MI->getDesc(); + MachineInstr &MI = *I; + const MCInstrDesc &Desc = MI.getDesc(); int AddrOffset = X86II::getMemoryOperandNo(Desc.TSFlags); if (AddrOffset >= 0) { AddrOffset += X86II::getOperandBias(Desc); - MachineOperand &p = MI->getOperand(AddrOffset + X86::AddrBaseReg); + MachineOperand &p = MI.getOperand(AddrOffset + X86::AddrBaseReg); if (p.isReg() && p.getReg() != X86::ESP) { seekLEAFixup(p, I, MFI); } - MachineOperand &q = MI->getOperand(AddrOffset + X86::AddrIndexReg); + MachineOperand &q = MI.getOperand(AddrOffset + X86::AddrIndexReg); if (q.isReg() && q.getReg() != X86::ESP) { seekLEAFixup(q, I, MFI); } @@ -319,7 +319,7 @@ void FixupLEAPass::seekLEAFixup(MachineOperand &p, MachineBasicBlock::iterator &I, MachineFunction::iterator MFI) { MachineBasicBlock::iterator MBI = searchBackwards(p, I, MFI); - if (MBI) { + if (MBI != MachineBasicBlock::iterator()) { MachineInstr *NewMI = postRAConvertToLEA(MFI, MBI); if (NewMI) { ++NumLEAs; @@ -336,19 +336,19 @@ void FixupLEAPass::seekLEAFixup(MachineOperand &p, void FixupLEAPass::processInstructionForSLM(MachineBasicBlock::iterator &I, MachineFunction::iterator MFI) { - MachineInstr *MI = I; - const int opcode = MI->getOpcode(); + MachineInstr &MI = *I; + const int opcode = MI.getOpcode(); if (!isLEA(opcode)) return; - if (MI->getOperand(5).getReg() != 0 || !MI->getOperand(4).isImm() || + if (MI.getOperand(5).getReg() != 0 || !MI.getOperand(4).isImm() || !TII->isSafeToClobberEFLAGS(*MFI, I)) return; - const unsigned DstR = MI->getOperand(0).getReg(); - const unsigned SrcR1 = MI->getOperand(1).getReg(); - const unsigned SrcR2 = MI->getOperand(3).getReg(); + const unsigned DstR = MI.getOperand(0).getReg(); + const unsigned SrcR1 = MI.getOperand(1).getReg(); + const unsigned SrcR2 = MI.getOperand(3).getReg(); if ((SrcR1 == 0 || SrcR1 != DstR) && (SrcR2 == 0 || SrcR2 != DstR)) return; - if (MI->getOperand(2).getImm() > 1) + if (MI.getOperand(2).getImm() > 1) return; int addrr_opcode, addri_opcode; switch (opcode) { @@ -371,12 +371,12 @@ void FixupLEAPass::processInstructionForSLM(MachineBasicBlock::iterator &I, DEBUG(dbgs() << "FixLEA: Candidate to replace:"; I->dump();); DEBUG(dbgs() << "FixLEA: Replaced by: ";); MachineInstr *NewMI = nullptr; - const MachineOperand &Dst = MI->getOperand(0); + const MachineOperand &Dst = MI.getOperand(0); // Make ADD instruction for two registers writing to LEA's destination if (SrcR1 != 0 && SrcR2 != 0) { - const MachineOperand &Src1 = MI->getOperand(SrcR1 == DstR ? 1 : 3); - const MachineOperand &Src2 = MI->getOperand(SrcR1 == DstR ? 3 : 1); - NewMI = BuildMI(*MF, MI->getDebugLoc(), TII->get(addrr_opcode)) + const MachineOperand &Src1 = MI.getOperand(SrcR1 == DstR ? 1 : 3); + const MachineOperand &Src2 = MI.getOperand(SrcR1 == DstR ? 3 : 1); + NewMI = BuildMI(*MF, MI.getDebugLoc(), TII->get(addrr_opcode)) .addOperand(Dst) .addOperand(Src1) .addOperand(Src2); @@ -384,12 +384,12 @@ void FixupLEAPass::processInstructionForSLM(MachineBasicBlock::iterator &I, DEBUG(NewMI->dump();); } // Make ADD instruction for immediate - if (MI->getOperand(4).getImm() != 0) { - const MachineOperand &SrcR = MI->getOperand(SrcR1 == DstR ? 1 : 3); - NewMI = BuildMI(*MF, MI->getDebugLoc(), TII->get(addri_opcode)) + if (MI.getOperand(4).getImm() != 0) { + const MachineOperand &SrcR = MI.getOperand(SrcR1 == DstR ? 1 : 3); + NewMI = BuildMI(*MF, MI.getDebugLoc(), TII->get(addri_opcode)) .addOperand(Dst) .addOperand(SrcR) - .addImm(MI->getOperand(4).getImm()); + .addImm(MI.getOperand(4).getImm()); MFI->insert(I, NewMI); DEBUG(NewMI->dump();); } |