diff options
author | Devang Patel <dpatel@apple.com> | 2010-09-15 14:48:53 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2010-09-15 14:48:53 +0000 |
commit | 1397fdc0ab272a6a295149fba0903f65a6d1885e (patch) | |
tree | 5db589b561ec9676fdbf94bb778a87fd5b092563 /lib/CodeGen | |
parent | 40989a40f085ca027ba322fbcffc771cb360e854 (diff) | |
download | external_llvm-1397fdc0ab272a6a295149fba0903f65a6d1885e.zip external_llvm-1397fdc0ab272a6a295149fba0903f65a6d1885e.tar.gz external_llvm-1397fdc0ab272a6a295149fba0903f65a6d1885e.tar.bz2 |
If dbg.declare from non-entry block is using alloca from entry block then use offset available in StaticAllocaMap to emit DBG_VALUE. Right now, this has no material impact because varible info also collected using offset table maintained in machine module info.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113967 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 1e77a66..db3ca11 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -4117,9 +4117,21 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) { DAG.AddDbgValue(SDV, N.getNode(), isParameter); } else { // If Address is an arugment then try to emits its dbg value using - // virtual register info from the FuncInfo.ValueMap. Otherwise add undef - // to help track missing debug info. + // virtual register info from the FuncInfo.ValueMap. if (!EmitFuncArgumentDbgValue(Address, Variable, 0, N)) { + // If variable is pinned by a alloca in dominating bb then + // use StaticAllocaMap. + if (const AllocaInst *AI = dyn_cast<AllocaInst>(Address)) { + DenseMap<const AllocaInst*, int>::iterator SI = + FuncInfo.StaticAllocaMap.find(AI); + if (SI != FuncInfo.StaticAllocaMap.end()) { + SDV = DAG.getDbgValue(Variable, SI->second, + 0, dl, SDNodeOrder); + DAG.AddDbgValue(SDV, 0, false); + return 0; + } + } + // Otherwise add undef to help track missing debug info. SDV = DAG.getDbgValue(Variable, UndefValue::get(Address->getType()), 0, dl, SDNodeOrder); DAG.AddDbgValue(SDV, 0, false); |