mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-21 02:24:22 +00:00
AsmPrinter: Rewrite initialization of DbgVariable, NFC
There are three types of `DbgVariable`: - alloca variables, created based on the MMI table, - register variables, created based on DBG_VALUE instructions, and - optimized-out variables. This commit reconfigures `DbgVariable` to make it easier to tell which kind we have, and make initialization a little clearer. For MMI/alloca variables, `FrameIndex.size()` must always equal `Expr.size()`, and there shouldn't be an `MInsn`. For register variables (with a `MInsn`), `FrameIndex` must be empty, and `Expr` should have 0 or 1 element depending on whether it has a complex expression (registers with multiple locations use `DebugLocListIndex`). Optimized-out variables shouldn't have any of these fields. Moreover, this separates DBG_VALUE initialization until after the variable is created, simplifying logic in a future commit that changes `collectVariableInfo()` to stop creating empty .debug_loc entries/lists. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240243 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -508,7 +508,7 @@ DwarfCompileUnit::constructVariableDIEImpl(const DbgVariable &DV,
|
||||
}
|
||||
|
||||
// .. else use frame index.
|
||||
if (DV.getFrameIndex().back() == ~0)
|
||||
if (DV.getFrameIndex().empty())
|
||||
return VariableDie;
|
||||
|
||||
auto Expr = DV.getExpression().begin();
|
||||
@ -686,7 +686,7 @@ void DwarfCompileUnit::collectDeadVariables(const DISubprogram *SP) {
|
||||
SPDIE = getDIE(SP);
|
||||
assert(SPDIE);
|
||||
for (const DILocalVariable *DV : Variables) {
|
||||
DbgVariable NewVar(DV, /* IA */ nullptr, /* Expr */ nullptr, DD);
|
||||
DbgVariable NewVar(DV, /* IA */ nullptr, DD);
|
||||
auto VariableDie = constructVariableDIE(NewVar);
|
||||
applyVariableAttributes(NewVar, *VariableDie);
|
||||
SPDIE->addChild(std::move(VariableDie));
|
||||
@ -725,7 +725,7 @@ void DwarfCompileUnit::addGlobalType(const DIType *Ty, const DIE &Die,
|
||||
/// DbgVariable based on provided MachineLocation.
|
||||
void DwarfCompileUnit::addVariableAddress(const DbgVariable &DV, DIE &Die,
|
||||
MachineLocation Location) {
|
||||
if (DV.variableHasComplexAddress())
|
||||
if (DV.hasComplexAddress())
|
||||
addComplexAddress(DV, Die, dwarf::DW_AT_location, Location);
|
||||
else if (DV.isBlockByrefVariable())
|
||||
addBlockByrefAddress(DV, Die, dwarf::DW_AT_location, Location);
|
||||
|
Reference in New Issue
Block a user