forked from OSchip/llvm-project
Cleanup TransferDbgValues
[DAG] Check debug values for invalidation before transferring and mark old debug values invalid when transferring to another SDValue. This fixes PR28613. Reviewers: jyknight, hans, dblaikie, echristo Subscribers: yaron.keren, ismail, llvm-commits Differential Revision: https://reviews.llvm.org/D22858 llvm-svn: 277135
This commit is contained in:
parent
276055bb2f
commit
563d6f8614
|
@ -6640,19 +6640,26 @@ void SelectionDAG::TransferDbgValues(SDValue From, SDValue To) {
|
|||
SDNode *FromNode = From.getNode();
|
||||
SDNode *ToNode = To.getNode();
|
||||
ArrayRef<SDDbgValue *> DVs = GetDbgValues(FromNode);
|
||||
SmallVector<SDDbgValue *, 2> ClonedDVs;
|
||||
for (ArrayRef<SDDbgValue *>::iterator I = DVs.begin(), E = DVs.end();
|
||||
I != E; ++I) {
|
||||
SDDbgValue *Dbg = *I;
|
||||
// Only add Dbgvalues attached to same ResNo.
|
||||
if (Dbg->getKind() == SDDbgValue::SDNODE &&
|
||||
Dbg->getResNo() == From.getResNo()) {
|
||||
Dbg->getSDNode() == From.getNode() &&
|
||||
Dbg->getResNo() == From.getResNo() && !Dbg->isInvalidated()) {
|
||||
assert(FromNode != ToNode &&
|
||||
"Should not transfer Debug Values intranode");
|
||||
SDDbgValue *Clone =
|
||||
getDbgValue(Dbg->getVariable(), Dbg->getExpression(), ToNode,
|
||||
To.getResNo(), Dbg->isIndirect(), Dbg->getOffset(),
|
||||
Dbg->getDebugLoc(), Dbg->getOrder());
|
||||
AddDbgValue(Clone, ToNode, false);
|
||||
ClonedDVs.push_back(Clone);
|
||||
Dbg->setIsInvalidated();
|
||||
}
|
||||
}
|
||||
for (SDDbgValue *I : ClonedDVs)
|
||||
AddDbgValue(I, ToNode, false);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
Loading…
Reference in New Issue