diff options
author | Vedant Kumar <vsk@apple.com> | 2017-11-16 21:08:51 +0000 |
---|---|---|
committer | Vedant Kumar <vsk@apple.com> | 2017-11-16 21:08:51 +0000 |
commit | 53418797fd7dc3286ca360d99d44a7baed0d6069 (patch) | |
tree | 088d22c9624c050cb1b43c4667ea51a19794ec8a /llvm/lib | |
parent | 47fbc5911dca29ca64eb8d3500d382dde7921975 (diff) | |
download | bcm5719-llvm-53418797fd7dc3286ca360d99d44a7baed0d6069.tar.gz bcm5719-llvm-53418797fd7dc3286ca360d99d44a7baed0d6069.zip |
Revert "[SelectionDAG] Consolidate (t|T)ransferDbgValues methods, NFC."
This reverts commit r318448. It looks like some of the asserts need to
be weakened.
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/16296
llvm-svn: 318455
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp | 7 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 62 |
2 files changed, 39 insertions, 30 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp index 73e29969a21..053d562a244 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp @@ -845,14 +845,13 @@ void DAGTypeLegalizer::SetExpandedInteger(SDValue Op, SDValue Lo, AnalyzeNewValue(Lo); AnalyzeNewValue(Hi); - // Transfer debug values. Don't invalidate the source debug value until it's - // been transferred to the high and low bits. + // Transfer debug values. if (DAG.getDataLayout().isBigEndian()) { - DAG.transferDbgValues(Op, Hi, 0, Hi.getValueSizeInBits(), false); + DAG.transferDbgValues(Op, Hi, 0, Hi.getValueSizeInBits()); DAG.transferDbgValues(Op, Lo, Hi.getValueSizeInBits(), Lo.getValueSizeInBits()); } else { - DAG.transferDbgValues(Op, Lo, 0, Lo.getValueSizeInBits(), false); + DAG.transferDbgValues(Op, Lo, 0, Lo.getValueSizeInBits()); DAG.transferDbgValues(Op, Hi, Lo.getValueSizeInBits(), Hi.getValueSizeInBits()); } diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index e3d136a378e..1ed982d6bac 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -7027,29 +7027,16 @@ SDDbgValue *SelectionDAG::getFrameIndexDbgValue(DIVariable *Var, } void SelectionDAG::transferDbgValues(SDValue From, SDValue To, - unsigned OffsetInBits, unsigned SizeInBits, - bool InvalidateDbg) { + unsigned OffsetInBits, + unsigned SizeInBits) { SDNode *FromNode = From.getNode(); SDNode *ToNode = To.getNode(); - assert(FromNode && ToNode && "Can't modify dbg values"); - - // Remove these checks when ReplaceAllUsesWith gets stricter. - // TODO: assert(From != To && "Redundant dbg value transfer"); - // TODO: assert(FromNode != ToNode && "Intranode dbg value transfer"); - if (From == To || FromNode == ToNode) - return; - - if (!FromNode->getHasDebugValue()) - return; + assert(FromNode != ToNode); SmallVector<SDDbgValue *, 2> ClonedDVs; for (SDDbgValue *Dbg : GetDbgValues(FromNode)) { - // Just transfer the dbg value attached to From. - if (Dbg->getResNo() != From.getResNo()) - continue; - - assert(!Dbg->isInvalidated() && "Invalid dbg value"); - assert(Dbg->getKind() == SDDbgValue::SDNODE && "Can't transfer dbg value"); + if (Dbg->getKind() != SDDbgValue::SDNODE) + break; DIVariable *Var = Dbg->getVariable(); auto *Expr = Dbg->getExpression(); @@ -7072,9 +7059,7 @@ void SelectionDAG::transferDbgValues(SDValue From, SDValue To, getDbgValue(Var, Expr, ToNode, To.getResNo(), Dbg->isIndirect(), Dbg->getDebugLoc(), Dbg->getOrder()); ClonedDVs.push_back(Clone); - - if (InvalidateDbg) - Dbg->setIsInvalidated(); + Dbg->setIsInvalidated(); } for (SDDbgValue *Dbg : ClonedDVs) @@ -7152,7 +7137,7 @@ void SelectionDAG::ReplaceAllUsesWith(SDValue FromN, SDValue To) { assert(From != To.getNode() && "Cannot replace uses of with self"); // Preserve Debug Values - transferDbgValues(FromN, To); + TransferDbgValues(FromN, To); // Iterate over all the existing uses of From. New uses will be added // to the beginning of the use list, which we avoid visiting. @@ -7211,7 +7196,7 @@ void SelectionDAG::ReplaceAllUsesWith(SDNode *From, SDNode *To) { for (unsigned i = 0, e = From->getNumValues(); i != e; ++i) if (From->hasAnyUseOfValue(i)) { assert((i < To->getNumValues()) && "Invalid To location"); - transferDbgValues(SDValue(From, i), SDValue(To, i)); + TransferDbgValues(SDValue(From, i), SDValue(To, i)); } // Iterate over just the existing users of From. See the comments in @@ -7255,7 +7240,7 @@ void SelectionDAG::ReplaceAllUsesWith(SDNode *From, const SDValue *To) { // Preserve Debug Info. for (unsigned i = 0, e = From->getNumValues(); i != e; ++i) - transferDbgValues(SDValue(From, i), *To); + TransferDbgValues(SDValue(From, i), *To); // Iterate over just the existing users of From. See the comments in // the ReplaceAllUsesWith above. @@ -7302,7 +7287,7 @@ void SelectionDAG::ReplaceAllUsesOfValueWith(SDValue From, SDValue To){ } // Preserve Debug Info. - transferDbgValues(From, To); + TransferDbgValues(From, To); // Iterate over just the existing users of From. See the comments in // the ReplaceAllUsesWith above. @@ -7380,7 +7365,7 @@ void SelectionDAG::ReplaceAllUsesOfValuesWith(const SDValue *From, if (Num == 1) return ReplaceAllUsesOfValueWith(*From, *To); - transferDbgValues(*From, *To); + TransferDbgValues(*From, *To); // Read up all the uses and make records of them. This helps // processing new uses that are introduced during the @@ -7529,6 +7514,31 @@ void SelectionDAG::AddDbgValue(SDDbgValue *DB, SDNode *SD, bool isParameter) { DbgInfo->add(DB, SD, isParameter); } +/// Transfer SDDbgValues. Called in replace nodes. +void SelectionDAG::TransferDbgValues(SDValue From, SDValue To) { + if (From == To || !From.getNode()->getHasDebugValue()) + return; + SDNode *FromNode = From.getNode(); + SDNode *ToNode = To.getNode(); + SmallVector<SDDbgValue *, 2> ClonedDVs; + for (auto *Dbg : GetDbgValues(FromNode)) { + // Only add Dbgvalues attached to same ResNo. + if (Dbg->getKind() == SDDbgValue::SDNODE && + 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->getDebugLoc(), Dbg->getOrder()); + ClonedDVs.push_back(Clone); + Dbg->setIsInvalidated(); + } + } + for (SDDbgValue *I : ClonedDVs) + AddDbgValue(I, ToNode, false); +} + SDValue SelectionDAG::makeEquivalentMemoryOrdering(LoadSDNode *OldLoad, SDValue NewMemOp) { assert(isa<MemSDNode>(NewMemOp.getNode()) && "Expected a memop node"); |