Fix LiveInterval::overlaps so it doesn't claim touching intervals overlap.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Tue, 13 Jul 2010 19:42:20 +0000 (19:42 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Tue, 13 Jul 2010 19:42:20 +0000 (19:42 +0000)
Also, one binary search is enough.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108261 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/LiveInterval.cpp

index 21a9b7d4db6f6f9dee36a36146d487222e90f1fc..9b057b0fec2502f3e369254e7014a5f3136c94e1 100644 (file)
@@ -161,16 +161,8 @@ bool LiveInterval::overlapsFrom(const LiveInterval& other,
 /// by [Start, End).
 bool LiveInterval::overlaps(SlotIndex Start, SlotIndex End) const {
   assert(Start < End && "Invalid range");
-  const_iterator I  = begin();
-  const_iterator E  = end();
-  const_iterator si = std::upper_bound(I, E, Start);
-  const_iterator ei = std::upper_bound(I, E, End);
-  if (si != ei)
-    return true;
-  if (si == I)
-    return false;
-  --si;
-  return si->contains(Start);
+  const_iterator I = std::lower_bound(begin(), end(), End);
+  return I != begin() && (--I)->end > Start;
 }
 
 /// extendIntervalEndTo - This method is used when we want to extend the range