[PATCH] Move logic for calculating DBG_VALUE history map into separate file/class.
Alexey Samsonov
samsonov at google.com
Wed Apr 30 14:13:30 PDT 2014
================
Comment at: lib/CodeGen/AsmPrinter/DwarfDebug.cpp:1444
@@ -1459,9 +1443,3 @@
const MDNode *Var = MI->getDebugVariable();
-
- // Variable is in a register, we need to check for clobbers.
- if (isDbgValueInDefinedReg(MI))
- LiveUserVar[MI->getOperand(0).getReg()] = Var;
-
- // Check the history of this variable.
- SmallVectorImpl<const MachineInstr *> &History = DbgValues[Var];
- if (History.empty()) {
+ if (DbgValues.count(Var) == 0) {
+ // Create empty history for Var.
----------------
David Blaikie wrote:
> This seems like a slightly strange block.
>
> Could you explain what the distinction between a variable not being in the DbgValues map, and it being in the map, but empty?
>
> Also - "DbgValues[Var].clear()" is a little unclear - since the 'clear()' is actually not used - the condition above shows that the map didn't have the key until this point, so when it's created by op[] it should be empty anyway.
>
> If this is the right semantic (see first question in this comment) I'd probably write it as:
>
> auto IterBool = DbgValues.insert(std::make_pair(Var, SmallVector<...>()));
> if (IterPair.second)
> UserVariables.push_back(Var);
>
> (I wouldn't even mind rolling it into the if:
>
> if (DbgValues.insert(std::make_pair(Var, SmallVector<...>())).second)
> UserVariables.push_back(Var);
>
> )
>
> Could add a comment // ensure the Var is in the DbgValues map (using some more domain-specific wording, I haven't stared at this code long enough to understand why it needs to be in the map or what that means, etc)
>
>
Done.
================
Comment at: lib/CodeGen/AsmPrinter/DwarfDebug.cpp:1452
@@ -1514,3 +1451,3 @@
// the beginning of the function body.
if (!MI->getFlag(MachineInstr::FrameSetup) &&
(PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown()))
----------------
David Blaikie wrote:
> This could just be "else if", but might be better as a separate commit to keep this blame simple. (and it is simple - thank you for that, it's very easy to follow that the code has just been moved)
Sure, will do in a follow-up commit.
================
Comment at: lib/CodeGen/AsmPrinter/DwarfDebug.cpp:1468
@@ -1560,16 +1467,3 @@
- // Make sure the final register assignments are terminated.
- const MachineInstr *Prev = History.back();
- if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
- const MachineBasicBlock *PrevMBB = Prev->getParent();
- MachineBasicBlock::const_iterator LastMI =
- PrevMBB->getLastNonDebugInstr();
- if (LastMI == PrevMBB->end())
- // Drop DBG_VALUE for empty range.
- History.pop_back();
- else if (PrevMBB != &PrevMBB->getParent()->back()) {
- // Terminate after LastMI.
- History.push_back(LastMI);
- }
- }
- // Request labels for the full history.
+ const MDNode *Var = I.first;
+ // The first mention of a function argument gets the FunctionBeginSym
----------------
David Blaikie wrote:
> I'd probably remove this local and just write: "DIVariable DV(I.first)"
Done.
================
Comment at: lib/CodeGen/AsmPrinter/DwarfDebug.cpp:1474
@@ +1473,3 @@
+ getDISubprogram(DV.getContext()).describes(MF->getFunction()))
+ LabelsBeforeInsn[History[0]] = FunctionBeginSym;
+
----------------
David Blaikie wrote:
> I'd probably write History.front() (rather than History[0]), but reasonable people may disagree - just a thought.
Done.
http://reviews.llvm.org/D3573
More information about the llvm-commits
mailing list