summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG
diff options
context:
space:
mode:
authorNirav Dave <niravd@google.com>2018-03-22 19:32:07 +0000
committerNirav Dave <niravd@google.com>2018-03-22 19:32:07 +0000
commit8c5f47ac406c817a3bbf1f17281b1a6bbfe7be89 (patch)
treea3509534a5cb4c84c11e212e0e065ad46766401a /llvm/lib/CodeGen/SelectionDAG
parent308e39ca8d89f9b9891fe70b4c47c458a53871d4 (diff)
downloadbcm5719-llvm-8c5f47ac406c817a3bbf1f17281b1a6bbfe7be89.tar.gz
bcm5719-llvm-8c5f47ac406c817a3bbf1f17281b1a6bbfe7be89.zip
[DAG, X86] Fix ISel-time node insertion ids
As in SystemZ backend, correctly propagate node ids when inserting new unselected nodes into the DAG during instruction Seleciton for X86 target. Fixes PR36865. Reviewers: jyknight, craig.topper Subscribers: hiraditya, llvm-commits Differential Revision: https://reviews.llvm.org/D44797 llvm-svn: 328233
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index 406e253fe4c..fcc1d8f4ed4 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -989,14 +989,29 @@ void SelectionDAGISel::EnforceNodeIdInvariant(SDNode *Node) {
for (auto *U : N->uses()) {
auto UId = U->getNodeId();
if (UId > 0) {
- int InvalidatedUId = -UId + 1;
- U->setNodeId(InvalidatedUId);
+ InvalidateNodeId(U);
Nodes.push_back(U);
}
}
}
}
+// InvalidateNodeId - As discusses in EnforceNodeIdInvariant, mark a
+// NodeId with the equivalent node id which is invalid for topological
+// pruning.
+void SelectionDAGISel::InvalidateNodeId(SDNode *N) {
+ int InvalidId = -N->getNodeId() + 1;
+ N->setNodeId(InvalidId);
+}
+
+// getUninvalidatedNodeId - get original uninvalidated node id.
+int SelectionDAGISel::getUninvalidatedNodeId(SDNode *N) {
+ int Id = N->getNodeId();
+ if (Id < 0)
+ return -Id + 1;
+ return Id;
+}
+
void SelectionDAGISel::DoInstructionSelection() {
DEBUG(dbgs() << "===== Instruction selection begins: "
<< printMBBReference(*FuncInfo->MBB) << " '"
OpenPOWER on IntegriCloud