Commit 739e31c3 authored by Hans Wennborg's avatar Hans Wennborg
Browse files

Merging r277135:

------------------------------------------------------------------------
r277135 | niravd | 2016-07-29 04:49:32 -0700 (Fri, 29 Jul 2016) | 12 lines

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: 277164
parent b6794b61
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -6639,19 +6639,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);
}

//===----------------------------------------------------------------------===//