[PATCH] D30919: Salvage debug info from instructions about to be deleted

Adrian Prantl via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 13 15:55:17 PDT 2017


aprantl created this revision.
Herald added a subscriber: mehdi_amini.

This patch improves debug info quality in InstCombine by looking at values that are about to be deleted, checking whether there are any dbg.value instrinsics referring to them, and potentially encoding the semantics of the deleted instruction into the dbg.value's DIExpression.

In the example in the testcase (which was extracted from XNU) there is a sequence of

  %4 = load %struct.entry*, %struct.entry** %next2, align 8, !dbg !41
  %5 = bitcast %struct.entry* %4 to i8*, !dbg !42
  %add.ptr4 = getelementptr inbounds i8, i8* %5, i64 -8, !dbg !43
  %6 = bitcast i8* %add.ptr4 to %struct.entry*, !dbg !44
  call void @llvm.dbg.value(metadata %struct.entry* %6, i64 0, metadata !20, metadata !21), !dbg 34

When these instructions are eliminated by instcombine one after another, we can still salvage the otherwise dead debug info:

- bitcasts have no effect, so have the dbg.value point to operand(0)
- loads can be expressed via a DW_OP_deref
- constant gep instructions can be replaced by DWARF expression arithmetic

The API introduced by this patch is not specific to instcombine and can be useful in other places, too.


https://reviews.llvm.org/D30919

Files:
  include/llvm/Transforms/Utils/Local.h
  lib/Transforms/InstCombine/InstCombineInternal.h
  lib/Transforms/Utils/Local.cpp
  test/Transforms/InstCombine/debuginfo-dce.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D30919.91632.patch
Type: text/x-patch
Size: 10044 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170313/62d227b6/attachment.bin>


More information about the llvm-commits mailing list