DWARF: avoid unnecessary map lookups.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140260 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/DebugInfo/DWARFDebugLine.cpp b/lib/DebugInfo/DWARFDebugLine.cpp
index d8200a0..c91281c 100644
--- a/lib/DebugInfo/DWARFDebugLine.cpp
+++ b/lib/DebugInfo/DWARFDebugLine.cpp
@@ -116,17 +116,16 @@
const DWARFDebugLine::LineTable *
DWARFDebugLine::getOrParseLineTable(DataExtractor debug_line_data,
uint32_t offset) {
- LineTableIter pos = LineTableMap.find(offset);
- if (pos == LineTableMap.end()) {
+ std::pair<LineTableIter, bool> pos =
+ LineTableMap.insert(LineTableMapTy::value_type(offset, LineTable()));
+ if (pos.second) {
// Parse and cache the line table for at this offset.
State state;
if (!parseStatementTable(debug_line_data, &offset, state))
return 0;
- // FIXME: double lookup.
- LineTableMap[offset] = state;
- return &LineTableMap[offset];
+ pos.first->second = state;
}
- return &pos->second;
+ return &pos.first->second;
}
bool