diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-03-22 00:21:41 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-03-22 00:21:41 +0000 |
commit | e17232ee4de2f608f0e5d965368c2bc54b6c1e83 (patch) | |
tree | 26966f7e10953f7a0a3f89022efe98e90e36a8fd /lib/CodeGen/AsmPrinter/DwarfDebug.h | |
parent | b55d6b6a7ea64f1cd168181f619aaa2f7080855a (diff) |
Dont emit 'DBG_VALUE %noreg, ...' to terminate user variable ranges.
These ranges get completely jumbled by the post-ra scheduler, and it is not
really reasonable to expect it to make sense of them.
Instead, teach DwarfDebug to notice when user variables in registers are
clobbered, and terminate the ranges there.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128045 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/AsmPrinter/DwarfDebug.h')
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfDebug.h | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h index 2863ea3806..e59ab5bd82 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -200,8 +200,6 @@ class DwarfDebug { typedef SmallVector<DbgScope *, 2> ScopeVector; - SmallPtrSet<const MachineInstr *, 8> InsnsEndScopeSet; - /// InlineInfo - Keep track of inlined functions and their location. This /// information is used to populate debug_inlined section. typedef std::pair<const MCSymbol *, DIE *> InlineInfoLabels; @@ -224,6 +222,16 @@ class DwarfDebug { /// a debuggging information entity. SmallPtrSet<const MachineInstr *, 8> InsnNeedsLabel; + /// InsnsNeedsLabelAfter - Collection of instructions that need a label after + /// the instruction because they end a scope of clobber a register. + SmallPtrSet<const MachineInstr *, 8> InsnsNeedsLabelAfter; + + /// RegClobberInsn - For each DBG_VALUE instruction referring to a register + /// that is clobbered before the variable gets a new DBG_VALUE, map the + /// instruction that clobbered the register. This instruction will also be in + /// InsnsNeedsLabelAfter. + DenseMap<const MachineInstr *, const MachineInstr *> RegClobberInsn; + SmallVector<const MCSymbol *, 8> DebugRangeSymbols; /// Previous instruction's location information. This is used to determine |