From: Benjamin Kramer Date: Fri, 10 Feb 2012 00:28:31 +0000 (+0000) Subject: Cache iterators. Some of these are expensive to create. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=f378f5fae3b7c35fc0f8996accf121ffe59093e2;p=oota-llvm.git Cache iterators. Some of these are expensive to create. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150214 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/MachineBasicBlock.cpp b/lib/CodeGen/MachineBasicBlock.cpp index 480ee7f0fed..611b0456914 100644 --- a/lib/CodeGen/MachineBasicBlock.cpp +++ b/lib/CodeGen/MachineBasicBlock.cpp @@ -141,8 +141,8 @@ void ilist_traits::deleteNode(MachineInstr* MI) { } MachineBasicBlock::iterator MachineBasicBlock::getFirstNonPHI() { - instr_iterator I = instr_begin(); - while (I != end() && I->isPHI()) + instr_iterator I = instr_begin(), E = instr_end(); + while (I != E && I->isPHI()) ++I; assert(!I->isInsideBundle() && "First non-phi MI cannot be inside a bundle!"); return I; @@ -150,7 +150,8 @@ MachineBasicBlock::iterator MachineBasicBlock::getFirstNonPHI() { MachineBasicBlock::iterator MachineBasicBlock::SkipPHIsAndLabels(MachineBasicBlock::iterator I) { - while (I != end() && (I->isPHI() || I->isLabel() || I->isDebugValue())) + iterator E = end(); + while (I != E && (I->isPHI() || I->isLabel() || I->isDebugValue())) ++I; // FIXME: This needs to change if we wish to bundle labels / dbg_values // inside the bundle. @@ -160,29 +161,29 @@ MachineBasicBlock::SkipPHIsAndLabels(MachineBasicBlock::iterator I) { } MachineBasicBlock::iterator MachineBasicBlock::getFirstTerminator() { - iterator I = end(); - while (I != begin() && ((--I)->isTerminator() || I->isDebugValue())) + iterator B = begin(), E = end(), I = E; + while (I != B && ((--I)->isTerminator() || I->isDebugValue())) ; /*noop */ - while (I != end() && !I->isTerminator()) + while (I != E && !I->isTerminator()) ++I; return I; } MachineBasicBlock::const_iterator MachineBasicBlock::getFirstTerminator() const { - const_iterator I = end(); - while (I != begin() && ((--I)->isTerminator() || I->isDebugValue())) + const_iterator B = begin(), E = end(), I = E; + while (I != B && ((--I)->isTerminator() || I->isDebugValue())) ; /*noop */ - while (I != end() && !I->isTerminator()) + while (I != E && !I->isTerminator()) ++I; return I; } MachineBasicBlock::instr_iterator MachineBasicBlock::getFirstInstrTerminator() { - instr_iterator I = instr_end(); - while (I != instr_begin() && ((--I)->isTerminator() || I->isDebugValue())) + instr_iterator B = instr_begin(), E = instr_end(), I = E; + while (I != B && ((--I)->isTerminator() || I->isDebugValue())) ; /*noop */ - while (I != instr_end() && !I->isTerminator()) + while (I != E && !I->isTerminator()) ++I; return I; } @@ -726,8 +727,9 @@ MachineBasicBlock::erase(MachineBasicBlock::iterator I) { MachineInstr *MachineBasicBlock::remove(MachineInstr *I) { if (I->isBundle()) { - MachineBasicBlock::instr_iterator MII = I; ++MII; - while (MII != end() && MII->isInsideBundle()) { + instr_iterator MII = llvm::next(I); + iterator E = end(); + while (MII != E && MII->isInsideBundle()) { MachineInstr *MI = &*MII++; Insts.remove(MI); }