From 68f499a6fa5e3b52b08f920f61d6f73f9aa57bcf Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Fri, 8 Jul 2016 21:10:58 +0000 Subject: [PATCH] NVPTX: Avoid implicit iterator conversions, NFC Avoid implicit conversions from MachineInstrBundleIterator to MachineInstr* in the NVPTX backend, mainly by preferring MachineInstr& over MachineInstr* when a pointer isn't nullable and using range-based for loops. There was one piece of questionable code in NVPTXInstrInfo::AnalyzeBranch, where a condition checked a pointer converted from an iterator for nullptr. Since this case is impossible (moreover, the code above guarantees that the iterator is valid), I removed the check when I changed the pointer to a reference. Despite that case, there should be no functionality change here. llvm-svn: 274931 --- llvm/lib/Target/NVPTX/NVPTXFrameLowering.cpp | 2 +- llvm/lib/Target/NVPTX/NVPTXInstrInfo.cpp | 32 +++++++++---------- .../Target/NVPTX/NVPTXPrologEpilogPass.cpp | 9 +++--- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/llvm/lib/Target/NVPTX/NVPTXFrameLowering.cpp b/llvm/lib/Target/NVPTX/NVPTXFrameLowering.cpp index 60aa5b7da6fa..bbcb497ead9d 100644 --- a/llvm/lib/Target/NVPTX/NVPTXFrameLowering.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXFrameLowering.cpp @@ -34,7 +34,7 @@ void NVPTXFrameLowering::emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const { if (MF.getFrameInfo()->hasStackObjects()) { assert(&MF.front() == &MBB && "Shrink-wrapping not yet supported"); - MachineInstr *MI = MBB.begin(); + MachineInstr *MI = &MBB.front(); MachineRegisterInfo &MR = MF.getRegInfo(); // This instruction really occurs before first instruction diff --git a/llvm/lib/Target/NVPTX/NVPTXInstrInfo.cpp b/llvm/lib/Target/NVPTX/NVPTXInstrInfo.cpp index cd1d355937f5..6f26505758c5 100644 --- a/llvm/lib/Target/NVPTX/NVPTXInstrInfo.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXInstrInfo.cpp @@ -155,17 +155,17 @@ bool NVPTXInstrInfo::AnalyzeBranch( return false; // Get the last instruction in the block. - MachineInstr *LastInst = I; + MachineInstr &LastInst = *I; // If there is only one terminator instruction, process it. if (I == MBB.begin() || !isUnpredicatedTerminator(*--I)) { - if (LastInst->getOpcode() == NVPTX::GOTO) { - TBB = LastInst->getOperand(0).getMBB(); + if (LastInst.getOpcode() == NVPTX::GOTO) { + TBB = LastInst.getOperand(0).getMBB(); return false; - } else if (LastInst->getOpcode() == NVPTX::CBranch) { + } else if (LastInst.getOpcode() == NVPTX::CBranch) { // Block ends with fall-through condbranch. - TBB = LastInst->getOperand(1).getMBB(); - Cond.push_back(LastInst->getOperand(0)); + TBB = LastInst.getOperand(1).getMBB(); + Cond.push_back(LastInst.getOperand(0)); return false; } // Otherwise, don't know what this is. @@ -173,26 +173,26 @@ bool NVPTXInstrInfo::AnalyzeBranch( } // Get the instruction before it if it's a terminator. - MachineInstr *SecondLastInst = I; + MachineInstr &SecondLastInst = *I; // If there are three terminators, we don't know what sort of block this is. - if (SecondLastInst && I != MBB.begin() && isUnpredicatedTerminator(*--I)) + if (I != MBB.begin() && isUnpredicatedTerminator(*--I)) return true; // If the block ends with NVPTX::GOTO and NVPTX:CBranch, handle it. - if (SecondLastInst->getOpcode() == NVPTX::CBranch && - LastInst->getOpcode() == NVPTX::GOTO) { - TBB = SecondLastInst->getOperand(1).getMBB(); - Cond.push_back(SecondLastInst->getOperand(0)); - FBB = LastInst->getOperand(0).getMBB(); + if (SecondLastInst.getOpcode() == NVPTX::CBranch && + LastInst.getOpcode() == NVPTX::GOTO) { + TBB = SecondLastInst.getOperand(1).getMBB(); + Cond.push_back(SecondLastInst.getOperand(0)); + FBB = LastInst.getOperand(0).getMBB(); return false; } // If the block ends with two NVPTX:GOTOs, handle it. The second one is not // executed, so remove it. - if (SecondLastInst->getOpcode() == NVPTX::GOTO && - LastInst->getOpcode() == NVPTX::GOTO) { - TBB = SecondLastInst->getOperand(0).getMBB(); + if (SecondLastInst.getOpcode() == NVPTX::GOTO && + LastInst.getOpcode() == NVPTX::GOTO) { + TBB = SecondLastInst.getOperand(0).getMBB(); I = LastInst; if (AllowModify) I->eraseFromParent(); diff --git a/llvm/lib/Target/NVPTX/NVPTXPrologEpilogPass.cpp b/llvm/lib/Target/NVPTX/NVPTXPrologEpilogPass.cpp index 17019d7b364d..029e0097c5dc 100644 --- a/llvm/lib/Target/NVPTX/NVPTXPrologEpilogPass.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXPrologEpilogPass.cpp @@ -55,11 +55,10 @@ bool NVPTXPrologEpilogPass::runOnMachineFunction(MachineFunction &MF) { calculateFrameObjectOffsets(MF); - for (MachineFunction::iterator BB = MF.begin(), E = MF.end(); BB != E; ++BB) { - for (MachineBasicBlock::iterator I = BB->begin(); I != BB->end(); ++I) { - MachineInstr *MI = I; - for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { - if (!MI->getOperand(i).isFI()) + for (MachineBasicBlock &MBB : MF) { + for (MachineInstr &MI : MBB) { + for (unsigned i = 0, e = MI.getNumOperands(); i != e; ++i) { + if (!MI.getOperand(i).isFI()) continue; TRI.eliminateFrameIndex(MI, 0, i, nullptr); Modified = true;