Index: src/compiler/graph-reducer.cc |
diff --git a/src/compiler/graph-reducer.cc b/src/compiler/graph-reducer.cc |
index 80b40a7d9ac516f56aef21b6081d2f789ac329e2..cd4822d8a34bd98cbcfde69af64788d66e3b4378 100644 |
--- a/src/compiler/graph-reducer.cc |
+++ b/src/compiler/graph-reducer.cc |
@@ -159,6 +159,22 @@ void GraphReducer::Replace(Node* node, Node* replacement) { |
} |
+namespace { |
+ |
+ |
+void VerifyUseReplacement(const Edge& edge, const Node* replacement) { |
Michael Starzinger
2015/09/25 10:54:18
suggestion: We could move this verification method
|
+ // Check that the user does not misuse the replacement. |
+ DCHECK(!NodeProperties::IsControlEdge(edge) || |
+ replacement->op()->ControlOutputCount() > 0); |
+ DCHECK(!NodeProperties::IsEffectEdge(edge) || |
+ replacement->op()->EffectOutputCount() > 0); |
+ DCHECK(!NodeProperties::IsFrameStateEdge(edge) || |
+ replacement->opcode() == IrOpcode::kFrameState); |
+} |
+ |
+} // namespace |
+ |
+ |
void GraphReducer::Replace(Node* node, Node* replacement, NodeId max_id) { |
if (node == graph()->start()) graph()->SetStart(replacement); |
if (node == graph()->end()) graph()->SetEnd(replacement); |
@@ -167,6 +183,7 @@ void GraphReducer::Replace(Node* node, Node* replacement, NodeId max_id) { |
// {replacement} was already reduced and finish. |
for (Edge edge : node->use_edges()) { |
Node* const user = edge.from(); |
+ VerifyUseReplacement(edge, replacement); |
edge.UpdateTo(replacement); |
// Don't revisit this node if it refers to itself. |
if (user != node) Revisit(user); |