diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-04-07 17:27:50 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-04-07 17:27:50 +0000 |
commit | 994c16833caf086dcdd6e8c26fb21aa4d950946f (patch) | |
tree | dedb4a7c3e52c4324e73bd4e6a3f5e8d3b78007e | |
parent | 1c0db0fd21457b437ab51cdce29b6d2ebe411eec (diff) | |
download | bcm5719-llvm-994c16833caf086dcdd6e8c26fb21aa4d950946f.tar.gz bcm5719-llvm-994c16833caf086dcdd6e8c26fb21aa4d950946f.zip |
Avoid moving iterators when the previous block was just visited.
llvm-svn: 129081
-rw-r--r-- | llvm/lib/CodeGen/InterferenceCache.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/llvm/lib/CodeGen/InterferenceCache.cpp b/llvm/lib/CodeGen/InterferenceCache.cpp index 512b4b3ccc1..0aff128c16d 100644 --- a/llvm/lib/CodeGen/InterferenceCache.cpp +++ b/llvm/lib/CodeGen/InterferenceCache.cpp @@ -99,13 +99,15 @@ void InterferenceCache::Entry::update(unsigned MBBNum) { tie(Start, Stop) = Indexes->getMBBRange(MBBNum); // Use advanceTo only when possible. - if (!PrevPos.isValid() || Start < PrevPos) - for (unsigned i = 0, e = Iters.size(); i != e; ++i) - Iters[i].find(Start); - else - for (unsigned i = 0, e = Iters.size(); i != e; ++i) - Iters[i].advanceTo(Start); - PrevPos = Start; + if (PrevPos != Start) { + if (!PrevPos.isValid() || Start < PrevPos) + for (unsigned i = 0, e = Iters.size(); i != e; ++i) + Iters[i].find(Start); + else + for (unsigned i = 0, e = Iters.size(); i != e; ++i) + Iters[i].advanceTo(Start); + PrevPos = Start; + } // Check for first interference. for (unsigned i = 0, e = Iters.size(); i != e; ++i) { @@ -129,11 +131,14 @@ void InterferenceCache::Entry::update(unsigned MBBNum) { if (!I.valid() || I.start() >= Stop) continue; I.advanceTo(Stop); - if (!I.valid() || I.start() >= Stop) + bool Backup = !I.valid() || I.start() >= Stop; + if (Backup) --I; SlotIndex StopI = I.stop(); if (!BI->Last.isValid() || StopI > BI->Last) BI->Last = StopI; + if (Backup) + ++I; } PrevPos = Stop; } |