[llvm-bugs] [Bug 34227] New: LLVM should store register parameters to the stack at -O0 for debugability
via llvm-bugs
llvm-bugs at lists.llvm.org
Thu Aug 17 15:39:50 PDT 2017
https://bugs.llvm.org/show_bug.cgi?id=34227
Bug ID: 34227
Summary: LLVM should store register parameters to the stack at
-O0 for debugability
Product: libraries
Version: trunk
Hardware: PC
OS: Windows NT
Status: NEW
Severity: enhancement
Priority: P
Component: Common Code Generator Code
Assignee: unassignedbugs at nondot.org
Reporter: rnk at google.com
CC: aprantl at apple.com, llvm-bugs at lists.llvm.org,
llvm at inglorion.net
Consider this C++ code:
struct Foo { int x; Foo(); ~Foo(); };
void g(int x);
void f(Foo f, int n) {
while (--n)
g(0);
}
Clang will emit a dbg.declare for f:f that looks like this:
define void @_Z1f3Fooi(%struct.Foo* nocapture readnone %f, i32 %n)
local_unnamed_addr #0 !dbg !7 {
entry:
tail call void @llvm.dbg.declare(metadata %struct.Foo* %f, metadata !20,
metadata !22), !dbg !23
The location is not a static alloca, so we must emit DBG_VALUE instructions
rather than recording a simple frame index in a table. On Linux, the value is
in RDI, which is soon killed by the call to g(0), as we can see in the
assembly:
_Z1f3Fooi: # @_Z1f3Fooi
pushq %rbx
#DEBUG_VALUE: f:f <- [%RDI+0]
cmpl $1, %esi
je .LBB0_3
#DEBUG_VALUE: f:f <- [%RDI+0]
movl $1, %ebx
subl %esi, %ebx
#DEBUG_VALUE: f:f <- [%RDI+0]
xorl %edi, %edi # RDI killed here
callq _Z1gi
Debuggers won't be able to print 'f' after the first iteration of the loop.
This would also remove the need for swift to add extra empty inline asm
statements to function epilogues just to keep unused parameters alive for the
entire function, or to emit extra allocas just so it can dbg.declare them. Many
other non-C frontends also directly emit SSA without any intermediate allocas,
and this would improve things for them too.
Debug info quality aside, users have also requested functionality equivalent to
MSVC's /homeparams flag (-msave-regs
http://lists.llvm.org/pipermail/llvm-dev/2017-April/112431.html), so that even
in optimized builds without debug info, they can find initial parameter values.
--
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/20170817/38ed6d30/attachment-0001.html>
More information about the llvm-bugs
mailing list