[all-commits] [llvm/llvm-project] 3137fe: [DebugInfo][DAG] Distinguish different kinds of lo...

Jeremy Morse via All-commits all-commits at lists.llvm.org
Wed Oct 30 11:41:42 PDT 2019


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 3137fe4d23eeb8df08c03e9111465325eeafe08e
      https://github.com/llvm/llvm-project/commit/3137fe4d23eeb8df08c03e9111465325eeafe08e
  Author: Jeremy Morse <jeremy.morse at sony.com>
  Date:   2019-10-30 (Wed, 30 Oct 2019)

  Changed paths:
    M llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
    A llvm/test/DebugInfo/X86/stack-arg-deref.ll

  Log Message:
  -----------
  [DebugInfo][DAG] Distinguish different kinds of location indirection

>From SelectionDAGs point of view, debug variable locations specified with
dbg.declare and dbg.addr are indirect -- they specify the address of
something. But calling conventions might mean that a Value is placed on
the stack somewhere, and this too is indirection. Previously this was
mixed up in the "IsIndirect" field of DBG_VALUE insts; this patch
separates them by encoding the indirection in a DIExpression.

If we have a dbg.declare or dbg.addr, then the expression produces an
address that then becomes a DWARF memory location. We can represent
this by putting a DW_OP_deref on the _end_ of the expression. If a Value
has been placed on the stack, then we need to put a DW_OP_deref on the
_start_ of the expression, to load the Value from the stack and have
the rest of the expression operate on it.

Differential Revision: https://reviews.llvm.org/D69028




More information about the All-commits mailing list