mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-19 06:31:18 +00:00
Eliminate unnecessary scopes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32020 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
619965d32e
commit
36729ddd23
@ -1872,7 +1872,8 @@ private:
|
|||||||
/// ConstructScope - Construct the components of a scope.
|
/// ConstructScope - Construct the components of a scope.
|
||||||
///
|
///
|
||||||
void ConstructScope(DebugScope *ParentScope,
|
void ConstructScope(DebugScope *ParentScope,
|
||||||
DIE *ParentDie, CompileUnit *Unit) {
|
unsigned ParentStartID, unsigned ParentEndID,
|
||||||
|
DIE *ParentDie, CompileUnit *Unit) {
|
||||||
// Add variables to scope.
|
// Add variables to scope.
|
||||||
std::vector<DebugVariable *> &Variables = ParentScope->getVariables();
|
std::vector<DebugVariable *> &Variables = ParentScope->getVariables();
|
||||||
for (unsigned i = 0, N = Variables.size(); i < N; ++i) {
|
for (unsigned i = 0, N = Variables.size(); i < N; ++i) {
|
||||||
@ -1895,27 +1896,32 @@ private:
|
|||||||
if (StartID == EndID && StartID != 0) continue;
|
if (StartID == EndID && StartID != 0) continue;
|
||||||
if (Scope->getScopes().empty() && Scope->getVariables().empty()) continue;
|
if (Scope->getScopes().empty() && Scope->getVariables().empty()) continue;
|
||||||
|
|
||||||
DIE *ScopeDie = new DIE(DW_TAG_lexical_block);
|
if (StartID == ParentStartID && EndID == ParentEndID) {
|
||||||
|
// Just add stuff to the parent scope.
|
||||||
// Add the scope bounds.
|
ConstructScope(Scope, ParentStartID, ParentEndID, ParentDie, Unit);
|
||||||
if (StartID) {
|
|
||||||
AddLabel(ScopeDie, DW_AT_low_pc, DW_FORM_addr,
|
|
||||||
DWLabel("loc", StartID));
|
|
||||||
} else {
|
} else {
|
||||||
AddLabel(ScopeDie, DW_AT_low_pc, DW_FORM_addr,
|
DIE *ScopeDie = new DIE(DW_TAG_lexical_block);
|
||||||
DWLabel("func_begin", SubprogramCount));
|
|
||||||
}
|
|
||||||
if (EndID) {
|
|
||||||
AddLabel(ScopeDie, DW_AT_high_pc, DW_FORM_addr,
|
|
||||||
DWLabel("loc", EndID));
|
|
||||||
} else {
|
|
||||||
AddLabel(ScopeDie, DW_AT_high_pc, DW_FORM_addr,
|
|
||||||
DWLabel("func_end", SubprogramCount));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the scope contents.
|
// Add the scope bounds.
|
||||||
ConstructScope(Scope, ScopeDie, Unit);
|
if (StartID) {
|
||||||
ParentDie->AddChild(ScopeDie);
|
AddLabel(ScopeDie, DW_AT_low_pc, DW_FORM_addr,
|
||||||
|
DWLabel("loc", StartID));
|
||||||
|
} else {
|
||||||
|
AddLabel(ScopeDie, DW_AT_low_pc, DW_FORM_addr,
|
||||||
|
DWLabel("func_begin", SubprogramCount));
|
||||||
|
}
|
||||||
|
if (EndID) {
|
||||||
|
AddLabel(ScopeDie, DW_AT_high_pc, DW_FORM_addr,
|
||||||
|
DWLabel("loc", EndID));
|
||||||
|
} else {
|
||||||
|
AddLabel(ScopeDie, DW_AT_high_pc, DW_FORM_addr,
|
||||||
|
DWLabel("func_end", SubprogramCount));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the scope contents.
|
||||||
|
ConstructScope(Scope, StartID, EndID, ScopeDie, Unit);
|
||||||
|
ParentDie->AddChild(ScopeDie);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1943,7 +1949,7 @@ private:
|
|||||||
MachineLocation Location(RI->getFrameRegister(*MF));
|
MachineLocation Location(RI->getFrameRegister(*MF));
|
||||||
AddAddress(SPDie, DW_AT_frame_base, Location);
|
AddAddress(SPDie, DW_AT_frame_base, Location);
|
||||||
|
|
||||||
ConstructScope(RootScope, SPDie, Unit);
|
ConstructScope(RootScope, 0, 0, SPDie, Unit);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// EmitInitial - Emit initial Dwarf declarations. This is necessary for cc
|
/// EmitInitial - Emit initial Dwarf declarations. This is necessary for cc
|
||||||
|
Loading…
x
Reference in New Issue
Block a user