Index: src/compiler/verifier.cc |
diff --git a/src/compiler/verifier.cc b/src/compiler/verifier.cc |
index 8c7b01d5fe4b67e4f7fa358281d2c00cbc52aa8b..7bf3249c1e43b0a89b24e037bc6b06d7bca9e6c6 100644 |
--- a/src/compiler/verifier.cc |
+++ b/src/compiler/verifier.cc |
@@ -42,12 +42,14 @@ static bool IsUseDefChainLinkPresent(Node* def, Node* use) { |
class Verifier::Visitor { |
public: |
- Visitor(Zone* z, Typing typed) : zone(z), typing(typed) {} |
+ Visitor(Zone* z, Typing typed, CheckInputs check_inputs) |
+ : zone(z), typing(typed), check_inputs(check_inputs) {} |
void Check(Node* node); |
Zone* zone; |
Typing typing; |
+ CheckInputs check_inputs; |
private: |
void CheckNotTyped(Node* node) { |
@@ -114,8 +116,10 @@ void Verifier::Visitor::Check(Node* node) { |
int control_count = node->op()->ControlInputCount(); |
// Verify number of inputs matches up. |
- int input_count = value_count + context_count + frame_state_count + |
- effect_count + control_count; |
+ int input_count = value_count + context_count + frame_state_count; |
+ if (check_inputs == kAll) { |
+ input_count += effect_count + control_count; |
+ } |
CHECK_EQ(input_count, node->InputCount()); |
// Verify that frame state has been inserted for the nodes that need it. |
@@ -150,20 +154,23 @@ void Verifier::Visitor::Check(Node* node) { |
CHECK(IsUseDefChainLinkPresent(context, node)); |
} |
- // Verify all effect inputs actually have an effect. |
- for (int i = 0; i < effect_count; ++i) { |
- Node* effect = NodeProperties::GetEffectInput(node); |
- CheckOutput(effect, node, effect->op()->EffectOutputCount(), "effect"); |
- CHECK(IsDefUseChainLinkPresent(effect, node)); |
- CHECK(IsUseDefChainLinkPresent(effect, node)); |
- } |
+ if (check_inputs == kAll) { |
+ // Verify all effect inputs actually have an effect. |
+ for (int i = 0; i < effect_count; ++i) { |
+ Node* effect = NodeProperties::GetEffectInput(node); |
+ CheckOutput(effect, node, effect->op()->EffectOutputCount(), "effect"); |
+ CHECK(IsDefUseChainLinkPresent(effect, node)); |
+ CHECK(IsUseDefChainLinkPresent(effect, node)); |
+ } |
- // Verify all control inputs are control nodes. |
- for (int i = 0; i < control_count; ++i) { |
- Node* control = NodeProperties::GetControlInput(node, i); |
- CheckOutput(control, node, control->op()->ControlOutputCount(), "control"); |
- CHECK(IsDefUseChainLinkPresent(control, node)); |
- CHECK(IsUseDefChainLinkPresent(control, node)); |
+ // Verify all control inputs are control nodes. |
+ for (int i = 0; i < control_count; ++i) { |
+ Node* control = NodeProperties::GetControlInput(node, i); |
+ CheckOutput(control, node, control->op()->ControlOutputCount(), |
+ "control"); |
+ CHECK(IsDefUseChainLinkPresent(control, node)); |
+ CHECK(IsUseDefChainLinkPresent(control, node)); |
+ } |
} |
switch (node->opcode()) { |
@@ -1010,12 +1017,11 @@ void Verifier::Visitor::Check(Node* node) { |
} |
} // NOLINT(readability/fn_size) |
- |
-void Verifier::Run(Graph* graph, Typing typing) { |
+void Verifier::Run(Graph* graph, Typing typing, CheckInputs check_inputs) { |
CHECK_NOT_NULL(graph->start()); |
CHECK_NOT_NULL(graph->end()); |
Zone zone(graph->zone()->allocator()); |
- Visitor visitor(&zone, typing); |
+ Visitor visitor(&zone, typing, check_inputs); |
AllNodes all(&zone, graph); |
for (Node* node : all.live) visitor.Check(node); |