diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2012-02-10 00:28:31 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2012-02-10 00:28:31 +0000 |
commit | baa41d41758beb136975047ce14c5f148fc050ba (patch) | |
tree | 3e3dc72c95a881ad95ebbfa699ca26c922592ce6 /llvm/lib/CodeGen/MachineBasicBlock.cpp | |
parent | 55031d28ba01717329575a14c13573d3a144fcf1 (diff) | |
download | bcm5719-llvm-baa41d41758beb136975047ce14c5f148fc050ba.tar.gz bcm5719-llvm-baa41d41758beb136975047ce14c5f148fc050ba.zip |
Cache iterators. Some of these are expensive to create.
llvm-svn: 150214
Diffstat (limited to 'llvm/lib/CodeGen/MachineBasicBlock.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineBasicBlock.cpp | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/llvm/lib/CodeGen/MachineBasicBlock.cpp b/llvm/lib/CodeGen/MachineBasicBlock.cpp index 480ee7f0fed..611b0456914 100644 --- a/llvm/lib/CodeGen/MachineBasicBlock.cpp +++ b/llvm/lib/CodeGen/MachineBasicBlock.cpp @@ -141,8 +141,8 @@ void ilist_traits<MachineInstr>::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); } |