Chromium Code Reviews| 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); |