[llvm-bugs] [Bug 24563] New: LiveDebugVariables propagates constant values without joining at bb boundaries
via llvm-bugs
llvm-bugs at lists.llvm.org
Mon Aug 24 16:18:49 PDT 2015
https://llvm.org/bugs/show_bug.cgi?id=24563
Bug ID: 24563
Summary: LiveDebugVariables propagates constant values without
joining at bb boundaries
Product: libraries
Version: trunk
Hardware: PC
OS: All
Status: NEW
Severity: normal
Priority: P
Component: DebugInfo
Assignee: unassignedbugs at nondot.org
Reporter: aprantl at apple.com
CC: llvm-bugs at lists.llvm.org
Classification: Unclassified
Found while reviewing http://reviews.llvm.org/D11933
Compiling the following testcase at -O1
void g(int *);
int f() {
int x = 23;
g(&x);
if (x == 42)
++x;
return x;
}
will cause the constant value 23 to be propagated into the last basic block:
BB#2: derived from LLVM BB %if.end
Predecessors according to CFG: BB#0 BB#1
DBG_VALUE 23, 0, !"x", <!14>; line no:3
%EAX<def> = MOV32rm %RSP, 1, %noreg, 4, %noreg; mem:LD4[%x](tbaa=!17)
dbg:r.c:7:10
%RDX<def> = POP64r %RSP<imp-def>, %RSP<imp-use>; dbg:r.c:7:3
RETQ %EAX; dbg:r.c:7:3
Looking into this I found that LiveDebugVariables is the culprit here:
void UserValue::extendDef(SlotIndex Idx, unsigned LocNo,
LiveRange *LR, const VNInfo *VNI,
SmallVectorImpl<SlotIndex> *Kills,
LiveIntervals &LIS, MachineDominatorTree &MDT,
UserValueScopes &UVS) {
...
for (unsigned i = 0, e = Children.size(); i != e; ++i) {
MachineBasicBlock *MBB = Children[i]->getBlock();
if (UVS.dominates(MBB))
Todo.push_back(LIS.getMBBStartIdx(MBB));
}
}
It look like it just unconditionally propagates all DBG_VALUEs down the
dominator tree, which happens to work fine if there already is another
DBG_VALUE but is wrong if the DBG_VALUE is coming from only one of the
predecessors like in this example here.
The DBG_VALUES should only end up in a subsequent basic block if they appear at
the end of all predecessors.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20150824/1f23b70c/attachment.html>
More information about the llvm-bugs
mailing list