]> granicus.if.org Git - llvm/commitdiff
[DWARF] Simplify DWARFDebugAranges::findAddress
authorFangrui Song <maskray@google.com>
Sat, 6 Apr 2019 09:12:53 +0000 (09:12 +0000)
committerFangrui Song <maskray@google.com>
Sat, 6 Apr 2019 09:12:53 +0000 (09:12 +0000)
The current lower_bound approach has to check two iterators pos and pos-1.
Changing it to upper_bound allows us to check one iterator (similar to
DWARFUnitVector::getUnitFor*).

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

include/llvm/DebugInfo/DWARF/DWARFDebugAranges.h
lib/DebugInfo/DWARF/DWARFDebugAranges.cpp

index 6d3af24f90a848124a64ac94ef43af6f211caa57..03223fbc80a92c399eadec8b9908654dc2b53b15 100644 (file)
@@ -49,10 +49,6 @@ private:
       return -1ULL;
     }
 
-    bool containsAddress(uint64_t Address) const {
-      return LowPC <= Address && Address < HighPC();
-    }
-
     bool operator<(const Range &other) const {
       return LowPC < other.LowPC;
     }
index d4714b4fb3a9b0afcc6be5abc3a85f3da1f03c13..a28313676eb511737cd536bb310ed4501959694b 100644 (file)
@@ -114,20 +114,11 @@ void DWARFDebugAranges::construct() {
 }
 
 uint32_t DWARFDebugAranges::findAddress(uint64_t Address) const {
-  if (!Aranges.empty()) {
-    Range range(Address);
-    RangeCollIterator begin = Aranges.begin();
-    RangeCollIterator end = Aranges.end();
-    RangeCollIterator pos =
-        std::lower_bound(begin, end, range);
-
-    if (pos != end && pos->containsAddress(Address)) {
-      return pos->CUOffset;
-    } else if (pos != begin) {
-      --pos;
-      if (pos->containsAddress(Address))
-        return pos->CUOffset;
-    }
-  }
+  RangeCollIterator It =
+      llvm::upper_bound(Aranges, Address, [](uint64_t LHS, Range RHS) {
+        return LHS < RHS.HighPC();
+      });
+  if (It != Aranges.end() && It->LowPC <= Address)
+    return It->CUOffset;
   return -1U;
 }