summaryrefslogtreecommitdiff
path: root/lib/CodeGen/InterferenceCache.cpp
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2011-04-07 17:27:50 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2011-04-07 17:27:50 +0000
commitf34ae32a6bf06f0d80b0bcbbe56d5488781f4f3c (patch)
treeafba95619e0164b6a070a9a559b1ca136864662a /lib/CodeGen/InterferenceCache.cpp
parent0bd2bd9ecc8abd3c3ed91a51aa8c51aaab401b5d (diff)
downloadllvm-f34ae32a6bf06f0d80b0bcbbe56d5488781f4f3c.tar.gz
llvm-f34ae32a6bf06f0d80b0bcbbe56d5488781f4f3c.tar.bz2
llvm-f34ae32a6bf06f0d80b0bcbbe56d5488781f4f3c.tar.xz
Avoid moving iterators when the previous block was just visited.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129081 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/InterferenceCache.cpp')
-rw-r--r--lib/CodeGen/InterferenceCache.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/lib/CodeGen/InterferenceCache.cpp b/lib/CodeGen/InterferenceCache.cpp
index 512b4b3ccc..0aff128c16 100644
--- a/lib/CodeGen/InterferenceCache.cpp
+++ b/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;
}