diff options
Diffstat (limited to 'llvm/lib/CodeGen/PeepholeOptimizer.cpp')
-rw-r--r-- | llvm/lib/CodeGen/PeepholeOptimizer.cpp | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/llvm/lib/CodeGen/PeepholeOptimizer.cpp b/llvm/lib/CodeGen/PeepholeOptimizer.cpp index c9c279cf0ddf..4a66863ea803 100644 --- a/llvm/lib/CodeGen/PeepholeOptimizer.cpp +++ b/llvm/lib/CodeGen/PeepholeOptimizer.cpp @@ -457,12 +457,12 @@ INITIALIZE_PASS_END(PeepholeOptimizer, DEBUG_TYPE, bool PeepholeOptimizer:: optimizeExtInstr(MachineInstr &MI, MachineBasicBlock &MBB, SmallPtrSetImpl<MachineInstr*> &LocalMIs) { - unsigned SrcReg, DstReg, SubIdx; + Register SrcReg, DstReg; + unsigned SubIdx; if (!TII->isCoalescableExtInstr(MI, SrcReg, DstReg, SubIdx)) return false; - if (Register::isPhysicalRegister(DstReg) || - Register::isPhysicalRegister(SrcReg)) + if (DstReg.isPhysical() || SrcReg.isPhysical()) return false; if (MRI->hasOneNonDBGUse(SrcReg)) @@ -607,15 +607,16 @@ optimizeExtInstr(MachineInstr &MI, MachineBasicBlock &MBB, bool PeepholeOptimizer::optimizeCmpInstr(MachineInstr &MI) { // If this instruction is a comparison against zero and isn't comparing a // physical register, we can try to optimize it. - unsigned SrcReg, SrcReg2; + Register SrcReg, SrcReg2; int CmpMask, CmpValue; if (!TII->analyzeCompare(MI, SrcReg, SrcReg2, CmpMask, CmpValue) || - Register::isPhysicalRegister(SrcReg) || - (SrcReg2 != 0 && Register::isPhysicalRegister(SrcReg2))) + SrcReg.isPhysical() || SrcReg2.isPhysical()) return false; // Attempt to optimize the comparison instruction. + LLVM_DEBUG(dbgs() << "Attempting to optimize compare: " << MI); if (TII->optimizeCompareInstr(MI, SrcReg, SrcReg2, CmpMask, CmpValue, MRI)) { + LLVM_DEBUG(dbgs() << " -> Successfully optimized compare!\n"); ++NumCmps; return true; } @@ -636,6 +637,7 @@ bool PeepholeOptimizer::optimizeSelect(MachineInstr &MI, return false; if (!TII->optimizeSelect(MI, LocalMIs)) return false; + LLVM_DEBUG(dbgs() << "Deleting select: " << MI); MI.eraseFromParent(); ++NumSelects; return true; @@ -663,8 +665,8 @@ bool PeepholeOptimizer::findNextSource(RegSubRegPair RegSubReg, // So far we do not have any motivating example for doing that. // Thus, instead of maintaining untested code, we will revisit that if // that changes at some point. - unsigned Reg = RegSubReg.Reg; - if (Register::isPhysicalRegister(Reg)) + Register Reg = RegSubReg.Reg; + if (Reg.isPhysical()) return false; const TargetRegisterClass *DefRC = MRI->getRegClass(Reg); @@ -1300,6 +1302,7 @@ bool PeepholeOptimizer::optimizeUncoalescableCopy( } // MI is now dead. + LLVM_DEBUG(dbgs() << "Deleting uncoalescable copy: " << MI); MI.eraseFromParent(); ++NumUncoalescableCopies; return true; @@ -1724,6 +1727,7 @@ bool PeepholeOptimizer::runOnMachineFunction(MachineFunction &MF) { (foldRedundantCopy(*MI, CopySrcRegs, CopySrcMIs) || foldRedundantNAPhysCopy(*MI, NAPhysToVirtMIs))) { LocalMIs.erase(MI); + LLVM_DEBUG(dbgs() << "Deleting redundant copy: " << *MI << "\n"); MI->eraseFromParent(); Changed = true; continue; @@ -1776,7 +1780,8 @@ bool PeepholeOptimizer::runOnMachineFunction(MachineFunction &MF) { LocalMIs.erase(MI); LocalMIs.erase(DefMI); LocalMIs.insert(FoldMI); - if (MI->isCall()) + // Update the call site info. + if (MI->shouldUpdateCallSiteInfo()) MI->getMF()->moveCallSiteInfo(MI, FoldMI); MI->eraseFromParent(); DefMI->eraseFromParent(); |