From 5b5bde03d806163e3fbc7614464ea6a3d2301cd6 Mon Sep 17 00:00:00 2001 From: jarin Date: Sun, 27 Sep 2015 22:37:26 -0700 Subject: [PATCH] [turbofan] In GraphReducer::Replace, check uses to not misuse the replacement. Review URL: https://codereview.chromium.org/1361893006 Cr-Commit-Position: refs/heads/master@{#30958} --- src/compiler/graph-reducer.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/compiler/graph-reducer.cc b/src/compiler/graph-reducer.cc index 80b40a7..cd4822d 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) { + // 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); -- 2.7.4