Skip to content

Commit fddb89e

Browse files
committed
[lldb/DWARF] Cache negative results of variable parsing
Use a `nullptr` map entry to mean "variable parse was attempted and it failed" an the absence of an entry to mean "parsing hasn't been attempted yet". I ran into this because parsing of function-static variables was generating a lot of errors (see llvm#108806), but this seems like a good idea in general. In theory this should be NFC, except for possibly reducing some amount of work.
1 parent b7e51b4 commit fddb89e

File tree

1 file changed

+12
-14
lines changed

1 file changed

+12
-14
lines changed

lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3377,16 +3377,13 @@ VariableSP SymbolFileDWARF::ParseVariableDIECached(const SymbolContext &sc,
33773377

33783378
DIEToVariableSP &die_to_variable = die.GetDWARF()->GetDIEToVariable();
33793379

3380-
VariableSP var_sp = die_to_variable[die.GetDIE()];
3381-
if (var_sp)
3382-
return var_sp;
3383-
3384-
var_sp = ParseVariableDIE(sc, die, LLDB_INVALID_ADDRESS);
3385-
if (var_sp) {
3386-
die_to_variable[die.GetDIE()] = var_sp;
3387-
if (DWARFDIE spec_die = die.GetReferencedDIE(DW_AT_specification))
3388-
die_to_variable[spec_die.GetDIE()] = var_sp;
3389-
}
3380+
if (auto it = die_to_variable.find(die.GetDIE()); it != die_to_variable.end())
3381+
return it->second;
3382+
3383+
VariableSP var_sp = ParseVariableDIE(sc, die, LLDB_INVALID_ADDRESS);
3384+
die_to_variable.insert_or_assign(die.GetDIE(), var_sp);
3385+
if (DWARFDIE spec_die = die.GetReferencedDIE(DW_AT_specification))
3386+
die_to_variable.insert_or_assign(spec_die.GetDIE(), var_sp);
33903387
return var_sp;
33913388
}
33923389

@@ -3799,9 +3796,10 @@ void SymbolFileDWARF::ParseAndAppendGlobalVariable(
37993796
return;
38003797

38013798
// Check to see if we have already parsed this variable or constant?
3802-
VariableSP var_sp = GetDIEToVariable()[die.GetDIE()];
3803-
if (var_sp) {
3804-
cc_variable_list.AddVariableIfUnique(var_sp);
3799+
DIEToVariableSP &die_to_variable = GetDIEToVariable();
3800+
if (auto it = die_to_variable.find(die.GetDIE());
3801+
it != die_to_variable.end()) {
3802+
cc_variable_list.AddVariableIfUnique(it->second);
38053803
return;
38063804
}
38073805

@@ -3835,7 +3833,7 @@ void SymbolFileDWARF::ParseAndAppendGlobalVariable(
38353833
return;
38363834
}
38373835

3838-
var_sp = ParseVariableDIECached(sc, die);
3836+
VariableSP var_sp = ParseVariableDIECached(sc, die);
38393837
if (!var_sp)
38403838
return;
38413839

0 commit comments

Comments
 (0)