From f34ae32a6bf06f0d80b0bcbbe56d5488781f4f3c Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Thu, 7 Apr 2011 17:27:50 +0000 Subject: 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 --- lib/CodeGen/InterferenceCache.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'lib/CodeGen/InterferenceCache.cpp') 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; } -- cgit v1.2.3-18-g5258