Chromium Code Reviews| Index: src/compiler/verifier.cc |
| diff --git a/src/compiler/verifier.cc b/src/compiler/verifier.cc |
| index 9ddb60418329d7694c99cc5f1e85ad782efbb51d..43e7736b6aef90c75dfce3179f032a90eb7b104d 100644 |
| --- a/src/compiler/verifier.cc |
| +++ b/src/compiler/verifier.cc |
| @@ -270,11 +270,17 @@ void Verifier::Visitor::Check(Node* node) { |
| CheckNotTyped(node); |
| break; |
| case IrOpcode::kDeoptimize: |
| - // TODO(rossberg): check successor is End |
| + // Deoptimize uses are End. |
| + for (auto use : node->uses()) { |
| + CHECK(use->opcode() == IrOpcode::kEnd); |
|
Benedikt Meurer
2015/05/26 11:23:08
Please use CHECK_EQ(IrOpcode::kEnd, use->opcode())
Michael Starzinger
2015/05/26 11:29:15
Done.
|
| + } |
| // Type is empty. |
| CheckNotTyped(node); |
| case IrOpcode::kReturn: |
| - // TODO(rossberg): check successor is End |
| + // Return uses are End. |
| + for (auto use : node->uses()) { |
| + CHECK(use->opcode() == IrOpcode::kEnd); |
| + } |
| // Type is empty. |
| CheckNotTyped(node); |
| break; |
| @@ -284,19 +290,25 @@ void Verifier::Visitor::Check(Node* node) { |
| CheckNotTyped(node); |
| break; |
| case IrOpcode::kTerminate: |
| + // Terminates take one loop and effect. |
| + CHECK_EQ(1, control_count); |
| + CHECK_EQ(1, effect_count); |
| + CHECK_EQ(2, input_count); |
| CHECK_EQ(IrOpcode::kLoop, |
| NodeProperties::GetControlInput(node)->opcode()); |
| + // Terminate uses are End. |
| + for (auto use : node->uses()) { |
| + CHECK(use->opcode() == IrOpcode::kEnd); |
| + } |
| // Type is empty. |
| CheckNotTyped(node); |
| - CHECK_EQ(1, control_count); |
| - CHECK_EQ(1, effect_count); |
| - CHECK_EQ(2, input_count); |
| break; |
| case IrOpcode::kOsrNormalEntry: |
| case IrOpcode::kOsrLoopEntry: |
| - // Osr entries have |
| - CHECK_EQ(1, effect_count); |
| + // Osr entries take one control and effect. |
| CHECK_EQ(1, control_count); |
| + CHECK_EQ(1, effect_count); |
| + CHECK_EQ(2, input_count); |
| // Type is empty. |
| CheckNotTyped(node); |
| break; |