[llvm-dev] [RFC] A value-tracking LiveDebugValues implementation
Jeremy Morse via llvm-dev
llvm-dev at lists.llvm.org
Wed Nov 11 03:13:02 PST 2020
Hi Xiang,
On Wed, Nov 11, 2020 at 1:59 AM Zhang, Xiang1 <xiang1.zhang at intel.com> wrote:
> Jeremy wrote:
> > ... The value %0 is live up to and including the ADD64ri but not past it, meaning LLVM today will drop the DBG_VALUE ...
>
> Just a little puzzle about the " drop the DBG_VALUE ", maybe I didn't get your key point,
> So I write a phi case, it like
> ___________________________________________________
> vaarg.end: ; preds = %vaarg.in_mem, %vaarg.in_reg
> %5 = phi i32 [ %4, %vaarg.in_reg ], [ %l5, %vaarg.in_mem ], !dbg !50
> %6 = add nsw i32 %gp_offset, %vaarg.l, !dbg !41
> call void @llvm.dbg.value(metadata i32 %5, metadata !28, metadata !DIExpression()), !dbg !50
> ret i32 %6, !dbg !52
> ____________________________________________________
> After phi-elimination, it is
>
> bb.3.vaarg.end:
> ; predecessors: %bb.2, %bb.1
>
> %5:gr32 = COPY killed %18:gr32, debug-location !50; phi.ll:21:1 // %18 was def in all predecessors //phi --> COPY killed %18
> %17:gr32 = ADD32rr killed %8:gr32(tied-def 0), killed %5:gr32, implicit-def dead $eflags, debug-location !41; phi.ll:12:1 // kill %5
> DBG_VALUE %5:gr32, $noreg, !"15", !DIExpression(), debug-location !50; phi.ll:21:1 line no:21
> $eax = COPY killed %17:gr32, debug-location !51; phi.ll:23:1
> RETQ implicit killed $eax, debug-location !51; phi.ll:23:1
> ____________________________________________________
> Go on, After Simple Register Coalescing
>
> 336B bb.3.vaarg.end:
> ; predecessors: %bb.2, %bb.1
>
> 384B %17:gr32 = ADD32rr %17:gr32(tied-def 0), %18:gr32, implicit-def dead $eflags, debug-location !41; phi.ll:12:1
> DBG_VALUE %18:gr32, $noreg, !"15", !DIExpression(), debug-location !50; phi.ll:21:1 line no:21 // Seems still works here. (not "drop the DBG_VALUE ")
> 400B $eax = COPY %17:gr32, debug-location !51; phi.ll:23:1
> 416B RETQ implicit killed $eax, debug-location !51; phi.ll:23:1
> ____________________________________________________
Indeed; it's LiveDebugVariables that drops out-of-liveness DBG_VALUEs,
as seen here:
https://github.com/llvm/llvm-project/blob/68ac02c0dd2b8fda52ac132a86f72f2ad6b139a5/llvm/lib/CodeGen/LiveDebugVariables.cpp#L657
as the register allocator will not maintain the location of its vreg
for positions that aren't live.
--
Thanks,
Jeremy
More information about the llvm-dev
mailing list