]> granicus.if.org Git - llvm/commit
[SelectionDAGBuilder] Add restrictions to EmitFuncArgumentDbgValue
authorBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Mon, 11 Feb 2019 19:23:30 +0000 (19:23 +0000)
committerBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Mon, 11 Feb 2019 19:23:30 +0000 (19:23 +0000)
commit30806aba1e3db2547c35508cca229e96a1a5d54e
tree3f72c822c1093d32844431e8994993f81b8dfa56
parente5935fd52f3215c61831ecda2075c197b55a85f2
[SelectionDAGBuilder] Add restrictions to EmitFuncArgumentDbgValue

Summary:
This patch fixes PR40587.

When a dbg.value instrinsic is emitted to the DAG
by using EmitFuncArgumentDbgValue the resulting
DBG_VALUE is hoisted to the beginning of the entry
block. I think the idea is to be able to locate
a formal argument already from the start of the
function.
However, EmitFuncArgumentDbgValue only checked that
the value that was used to describe a variable was
originating from a function parameter, not that the
variable itself actually was an argument to the
function. So when for example assigning a local
variable "local" the value from an argument "a",
the assocated DBG_VALUE instruction would be hoisted
to the beginning of the function, even if the scope
for "local" started somewhere else (or if "local"
was mapped to other values earlier in the function).

This patch adds some logic to EmitFuncArgumentDbgValue
to check that the variable being described actually
is an argument to the function. And that the dbg.value
being lowered already is in the entry block. Otherwise
we bail out, and the dbg.value will be handled as an
ordinary dbg.value (not as a "FuncArgumentDbgValue").

A tricky situation is when both the variable and
the value is related to function arguments, but not
neccessarily the same argument. We make sure that we
do not describe the same argument more than once as
a "FuncArgumentDbgValue". This solution works as long
as opt has injected a "first" dbg.value that corresponds
to the formal argument at the function entry.

Reviewers: jmorse, aprantl

Subscribers: jyknight, hiraditya, fedor.sergeev, dstenb, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353735 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/FunctionLoweringInfo.h
lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
test/DebugInfo/X86/dbg-value-funcarg.ll [new file with mode: 0644]
test/DebugInfo/X86/dbg-value-funcarg2.ll [new file with mode: 0644]