<html>
<head>
<base href="https://bugs.llvm.org/">
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW - [DebugInfo@O2] CodeGenPrepare address-mode sinking limits dbg.value validity"
href="https://bugs.llvm.org/show_bug.cgi?id=39940">39940</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>[DebugInfo@O2] CodeGenPrepare address-mode sinking limits dbg.value validity
</td>
</tr>
<tr>
<th>Product</th>
<td>libraries
</td>
</tr>
<tr>
<th>Version</th>
<td>trunk
</td>
</tr>
<tr>
<th>Hardware</th>
<td>PC
</td>
</tr>
<tr>
<th>OS</th>
<td>Linux
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Keywords</th>
<td>wrong-debug
</td>
</tr>
<tr>
<th>Severity</th>
<td>normal
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>Scalar Optimizations
</td>
</tr>
<tr>
<th>Assignee</th>
<td>jeremy.morse.llvm@gmail.com
</td>
</tr>
<tr>
<th>Reporter</th>
<td>jeremy.morse.llvm@gmail.com
</td>
</tr>
<tr>
<th>CC</th>
<td>chackz0x12@gmail.com, dblaikie@gmail.com, greg.bedwell@sony.com, international.phantom@gmail.com, llvm-bugs@lists.llvm.org, paul.robinson@am.sony.com
</td>
</tr>
<tr>
<th>Blocks</th>
<td>38754, 38768
</td>
</tr></table>
<p>
<div>
<pre>In the code below, CodeGenPrepare duplicates the GEP calculating the %bees
pointer and sinks the copy into the "next:" block. This is fine, and is
designed to allow the address calculations to be folded into a machine
addressing mode. The dbg.value for %bees is left in a BB where there are no
other uses of %bees, and normally CodeGenPrepare's placeDbgValues would move
the dbg.value into the earlier BB to avoid limitations in SelectionDAG.
However, as explored in <a class="bz_bug_link
bz_status_CONFIRMED "
title="CONFIRMED - [DebugInfo@O2][Dexter] Illegal value appears in variable when conditional blocks folded"
href="show_bug.cgi?id=38754">bug 38754</a>, this isn't a good solution, and causes the
appearance of variables to the developer to be re-ordered in the debugger. When
placeDbgValues is turned off, the dbg.value stays in the later BB. Then in
SelectionDAG, because %bees isn't used outside of the first BB, no VReg is
allocated to it, and there's no way to turn the dbg.value into a legal
DBG_VALUE. The dbg.value is subsequently dropped.
I've been using the latest trunk (r348754) and have been running "llc
-stop-after=codegenprepare". The fix seems obvious (update debug users in
CodeGenPrepare::optimizeMemoryInst) however it's not clear whether a fix can be
tested if it depends on placeDbgValues being disabled.
-------->8--------
declare void @llvm.dbg.value(metadata, metadata, metadata)
define i32 @lala(i32 *%ptr, i1 %arg) {
%bees = getelementptr i32, i32* %ptr, i32 4
%loaded = load i32, i32 *%bees
br i1 %arg, label %next, label %face
next:
call void @llvm.dbg.value(metadata i32 *%bees, metadata !1, metadata
!DIExpression()), !dbg !6
store i32 1, i32 *%bees
ret i32 1
face:
ret i32 0
}
!llvm.module.flags = !{!4}
!llvm.dbg.cu = !{!2}
!1 = !DILocalVariable(name: "bees", scope: !5, type: null)
!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer:
"beards", isOptimized: true, runtimeVersion: 4, emissionKind: FullDebug)
!3 = !DIFile(filename: "bees.cpp", directory: "")
!4 = !{i32 2, !"Debug Info Version", i32 3}
!5 = distinct !DISubprogram(name: "nope", scope: !2, file: !3, line: 1, unit:
!2)
!6 = !DILocation(line: 0, scope: !5)
--------8<--------</pre>
</div>
</p>
<div id="referenced">
<hr style="border: 1px dashed #969696">
<b>Referenced Bugs:</b>
<ul>
<li>
[<a class="bz_bug_link
bz_status_CONFIRMED "
title="CONFIRMED - [DebugInfo@O2][Dexter] Illegal value appears in variable when conditional blocks folded"
href="https://bugs.llvm.org/show_bug.cgi?id=38754">Bug 38754</a>] [DebugInfo@O2][Dexter] Illegal value appears in variable when conditional blocks folded
</li>
<li>
[<a class="bz_bug_link
bz_status_NEW "
title="NEW - [meta][DebugInfo] Umbrella bug for poor debug experiences"
href="https://bugs.llvm.org/show_bug.cgi?id=38768">Bug 38768</a>] [meta][DebugInfo] Umbrella bug for poor debug experiences
</li>
</ul>
</div>
<br>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>