summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorVedant Kumar <vsk@apple.com>2017-11-16 21:08:51 +0000
committerVedant Kumar <vsk@apple.com>2017-11-16 21:08:51 +0000
commit53418797fd7dc3286ca360d99d44a7baed0d6069 (patch)
tree088d22c9624c050cb1b43c4667ea51a19794ec8a /llvm/lib
parent47fbc5911dca29ca64eb8d3500d382dde7921975 (diff)
downloadbcm5719-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.cpp7
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp62
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");
OpenPOWER on IntegriCloud