mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-27 14:34:58 +00:00
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
This commit is contained in:
parent
58604cd944
commit
f378f5fae3
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user