[DebugInfo] Describe call site values for chains of expression producing instrs
authorDavid Stenberg <david.stenberg@ericsson.com>
Thu, 27 Feb 2020 08:54:37 +0000 (09:54 +0100)
committerDavid Stenberg <david.stenberg@ericsson.com>
Thu, 27 Feb 2020 10:18:51 +0000 (11:18 +0100)
commit6d857166d218ccedfff3b177a4489420e3bdd603
tree59a62d601413d2002689710b8f2bef2ba1ba3868
parentff574ff291e73b78164aade9d456d364bbf93a03
[DebugInfo] Describe call site values for chains of expression producing instrs

Summary:
If the describeLoadedValue() hook produced a DIExpression when
describing a instruction, and it was not possible to emit a call site
entry directly (the value operand was not an immediate nor a preserved
register), then that described value could not be inserted into the
worklist, and would instead be dropped, meaning that the parameter's
call site value couldn't be described.

This patch extends the worklist so that each entry has an DIExpression
that is built up when iterating through the instructions.

This allows us to describe instruction chains like this:

  $reg0 = mv $fp
  $reg0 = add $reg0, offset
  call @call_with_offseted_fp

Since DW_OP_LLVM_entry_value operations can't be combined with any other
expression, such call site entries will not be emitted. I have added a
test, dbgcall-site-expr-entry-value.mir, which verifies that we don't
assert or emit broken DWARF in such cases.

Reviewers: djtodoro, aprantl, vsk

Reviewed By: djtodoro, vsk

Subscribers: hiraditya, llvm-commits

Tags: #debug-info, #llvm

Differential Revision: https://reviews.llvm.org/D75036
llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
llvm/test/DebugInfo/MIR/AArch64/dbgcall-site-expr-chain.mir [new file with mode: 0644]
llvm/test/DebugInfo/MIR/AArch64/dbgcall-site-expr-entry-value.mir [new file with mode: 0644]