From 27dda60da2be2689c84a6a599adeb091f016dfce Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Sat, 6 Apr 2019 09:12:53 +0000 Subject: [PATCH] [DWARF] Simplify DWARFDebugAranges::findAddress 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 --- .../llvm/DebugInfo/DWARF/DWARFDebugAranges.h | 4 ---- lib/DebugInfo/DWARF/DWARFDebugAranges.cpp | 21 ++++++------------- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/include/llvm/DebugInfo/DWARF/DWARFDebugAranges.h b/include/llvm/DebugInfo/DWARF/DWARFDebugAranges.h index 6d3af24f90a..03223fbc80a 100644 --- a/include/llvm/DebugInfo/DWARF/DWARFDebugAranges.h +++ b/include/llvm/DebugInfo/DWARF/DWARFDebugAranges.h @@ -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; } diff --git a/lib/DebugInfo/DWARF/DWARFDebugAranges.cpp b/lib/DebugInfo/DWARF/DWARFDebugAranges.cpp index d4714b4fb3a..a28313676eb 100644 --- a/lib/DebugInfo/DWARF/DWARFDebugAranges.cpp +++ b/lib/DebugInfo/DWARF/DWARFDebugAranges.cpp @@ -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; } -- 2.50.1