[llvm] r207720 - Use a single data structure to store all user variables in DwarfDebug
Eric Christopher
echristo at gmail.com
Wed Apr 30 16:13:21 PDT 2014
Cool. Thanks for the cleanup.
-eric
On Wed, Apr 30, 2014 at 4:02 PM, Alexey Samsonov <samsonov at google.com> wrote:
> Author: samsonov
> Date: Wed Apr 30 18:02:40 2014
> New Revision: 207720
>
> URL: http://llvm.org/viewvc/llvm-project?rev=207720&view=rev
> Log:
> Use a single data structure to store all user variables in DwarfDebug
>
> Summary:
> Get rid of UserVariables set, and turn DbgValues into MapVector
> to get a fixed ordering, as suggested in review for http://reviews.llvm.org/D3573.
>
> Test Plan: llvm regression tests
>
> Reviewers: dblaikie
>
> Reviewed By: dblaikie
>
> Subscribers: llvm-commits
>
> Differential Revision: http://reviews.llvm.org/D3579
>
> Modified:
> llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h
> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h?rev=207720&r1=207719&r2=207720&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h Wed Apr 30 18:02:40 2014
> @@ -10,7 +10,7 @@
> #ifndef CODEGEN_ASMPRINTER_DBGVALUEHISTORYCALCULATOR_H_
> #define CODEGEN_ASMPRINTER_DBGVALUEHISTORYCALCULATOR_H_
>
> -#include "llvm/ADT/DenseMap.h"
> +#include "llvm/ADT/MapVector.h"
> #include "llvm/ADT/SmallVector.h"
>
> namespace llvm {
> @@ -22,8 +22,8 @@ class TargetRegisterInfo;
>
> // For each user variable, keep a list of DBG_VALUE instructions in order.
> // The list can also contain normal instructions that clobber the previous
> -// DBG_VALUE.
> -typedef DenseMap<const MDNode *, SmallVector<const MachineInstr *, 4>>
> +// DBG_VALUE. The variables are listed in order of appearance.
> +typedef MapVector<const MDNode *, SmallVector<const MachineInstr *, 4>>
> DbgValueHistoryMap;
>
> void calculateDbgValueHistory(const MachineFunction *MF,
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=207720&r1=207719&r2=207720&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Wed Apr 30 18:02:40 2014
> @@ -1196,18 +1196,18 @@ DwarfDebug::collectVariableInfo(SmallPtr
> // Grab the variable info that was squirreled away in the MMI side-table.
> collectVariableInfoFromMMITable(Processed);
>
> - for (const MDNode *Var : UserVariables) {
> - if (Processed.count(Var))
> + for (const auto &I : DbgValues) {
> + DIVariable DV(I.first);
> + if (Processed.count(DV))
> continue;
>
> - // History contains relevant DBG_VALUE instructions for Var and instructions
> + // History contains relevant DBG_VALUE instructions for DV and instructions
> // clobbering it.
> - SmallVectorImpl<const MachineInstr *> &History = DbgValues[Var];
> + const SmallVectorImpl<const MachineInstr *> &History = I.second;
> if (History.empty())
> continue;
> const MachineInstr *MInsn = History.front();
>
> - DIVariable DV(Var);
> LexicalScope *Scope = nullptr;
> if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
> DISubprogram(DV.getContext()).describes(CurFn->getFunction()))
> @@ -1421,7 +1421,7 @@ void DwarfDebug::beginFunction(const Mac
> if (LScopes.empty())
> return;
>
> - assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
> + assert(DbgValues.empty() && "DbgValues map wasn't cleaned!");
>
> // Make sure that each lexical scope will have a begin/end label.
> identifyScopeMarkers();
> @@ -1448,13 +1448,13 @@ void DwarfDebug::beginFunction(const Mac
> for (const auto &MI : MBB) {
> if (MI.isDebugValue()) {
> assert(MI.getNumOperands() > 1 && "Invalid machine instruction!");
> - // Keep track of user variables in order of appearance. Store the set
> - // of variables we've already seen as a set of keys in DbgValues.
> + // Keep track of user variables in order of appearance. Create the
> + // empty history for each variable so that the order of keys in
> + // DbgValues is correct. Actual history will be populated in
> + // calculateDbgValueHistory() function.
> const MDNode *Var = MI.getDebugVariable();
> - auto IterPair = DbgValues.insert(
> + DbgValues.insert(
> std::make_pair(Var, SmallVector<const MachineInstr *, 4>()));
> - if (IterPair.second)
> - UserVariables.push_back(Var);
> } else if (!MI.getFlag(MachineInstr::FrameSetup) &&
> PrologEndLoc.isUnknown() && !MI.getDebugLoc().isUnknown()) {
> // First known non-DBG_VALUE and non-frame setup location marks
> @@ -1609,7 +1609,6 @@ void DwarfDebug::endFunction(const Machi
> DeleteContainerPointers(I.second);
> ScopeVariables.clear();
> DeleteContainerPointers(CurrentFnArguments);
> - UserVariables.clear();
> DbgValues.clear();
> AbstractVariables.clear();
> LabelsBeforeInsn.clear();
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=207720&r1=207719&r2=207720&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Wed Apr 30 18:02:40 2014
> @@ -219,11 +219,8 @@ class DwarfDebug : public AsmPrinterHand
> // Maps instruction with label emitted after instruction.
> DenseMap<const MachineInstr *, MCSymbol *> LabelsAfterInsn;
>
> - // Every user variable mentioned by a DBG_VALUE instruction in order of
> - // appearance.
> - SmallVector<const MDNode *, 8> UserVariables;
> -
> // History of DBG_VALUE and clobber instructions for each user variable.
> + // Variables are listed in order of appearance.
> DbgValueHistoryMap DbgValues;
>
> // Previous instruction's location information. This is used to determine
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list