| OLD | NEW | 
|     1 // Copyright 2014 the V8 project authors. All rights reserved. |     1 // Copyright 2014 the V8 project authors. All rights reserved. | 
|     2 // Use of this source code is governed by a BSD-style license that can be |     2 // Use of this source code is governed by a BSD-style license that can be | 
|     3 // found in the LICENSE file. |     3 // found in the LICENSE file. | 
|     4  |     4  | 
|     5 #include "src/compiler/verifier.h" |     5 #include "src/compiler/verifier.h" | 
|     6  |     6  | 
|     7 #include <deque> |     7 #include <deque> | 
|     8 #include <queue> |     8 #include <queue> | 
|     9 #include <sstream> |     9 #include <sstream> | 
|    10 #include <string> |    10 #include <string> | 
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   240       // TODO(rossberg): what are the constraints on these? |   240       // TODO(rossberg): what are the constraints on these? | 
|   241       // Type is empty. |   241       // Type is empty. | 
|   242       CheckNotTyped(node); |   242       CheckNotTyped(node); | 
|   243       break; |   243       break; | 
|   244     case IrOpcode::kTerminate: |   244     case IrOpcode::kTerminate: | 
|   245       // Type is empty. |   245       // Type is empty. | 
|   246       CheckNotTyped(node); |   246       CheckNotTyped(node); | 
|   247       CHECK_EQ(1, control_count); |   247       CHECK_EQ(1, control_count); | 
|   248       CHECK_EQ(input_count, 1 + effect_count); |   248       CHECK_EQ(input_count, 1 + effect_count); | 
|   249       break; |   249       break; | 
 |   250     case IrOpcode::kOsrNormalEntry: | 
 |   251     case IrOpcode::kOsrLoopEntry: | 
 |   252       // Osr entries have | 
 |   253       CHECK_EQ(1, effect_count); | 
 |   254       CHECK_EQ(1, control_count); | 
 |   255       // Type is empty. | 
 |   256       CheckNotTyped(node); | 
 |   257       break; | 
|   250  |   258  | 
|   251     // Common operators |   259     // Common operators | 
|   252     // ---------------- |   260     // ---------------- | 
|   253     case IrOpcode::kParameter: { |   261     case IrOpcode::kParameter: { | 
|   254       // Parameters have the start node as inputs. |   262       // Parameters have the start node as inputs. | 
|   255       CHECK_EQ(1, input_count); |   263       CHECK_EQ(1, input_count); | 
|   256       CHECK_EQ(IrOpcode::kStart, |   264       CHECK_EQ(IrOpcode::kStart, | 
|   257                NodeProperties::GetValueInput(node, 0)->opcode()); |   265                NodeProperties::GetValueInput(node, 0)->opcode()); | 
|   258       // Parameter has an input that produces enough values. |   266       // Parameter has an input that produces enough values. | 
|   259       int index = OpParameter<int>(node); |   267       int index = OpParameter<int>(node); | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
|   290       CHECK_EQ(0, input_count); |   298       CHECK_EQ(0, input_count); | 
|   291       // Type can be anything represented as a heap pointer. |   299       // Type can be anything represented as a heap pointer. | 
|   292       CheckUpperIs(node, Type::TaggedPointer()); |   300       CheckUpperIs(node, Type::TaggedPointer()); | 
|   293       break; |   301       break; | 
|   294     case IrOpcode::kExternalConstant: |   302     case IrOpcode::kExternalConstant: | 
|   295       // Constants have no inputs. |   303       // Constants have no inputs. | 
|   296       CHECK_EQ(0, input_count); |   304       CHECK_EQ(0, input_count); | 
|   297       // Type is considered internal. |   305       // Type is considered internal. | 
|   298       CheckUpperIs(node, Type::Internal()); |   306       CheckUpperIs(node, Type::Internal()); | 
|   299       break; |   307       break; | 
 |   308     case IrOpcode::kOsrValue: | 
 |   309       // OSR values have a value and a control input. | 
 |   310       CHECK_EQ(1, control_count); | 
 |   311       CHECK_EQ(1, input_count); | 
 |   312       // Type is merged from other values in the graph and could be any. | 
 |   313       CheckUpperIs(node, Type::Any()); | 
 |   314       break; | 
|   300     case IrOpcode::kProjection: { |   315     case IrOpcode::kProjection: { | 
|   301       // Projection has an input that produces enough values. |   316       // Projection has an input that produces enough values. | 
|   302       int index = static_cast<int>(OpParameter<size_t>(node->op())); |   317       int index = static_cast<int>(OpParameter<size_t>(node->op())); | 
|   303       Node* input = NodeProperties::GetValueInput(node, 0); |   318       Node* input = NodeProperties::GetValueInput(node, 0); | 
|   304       CHECK_GT(input->op()->ValueOutputCount(), index); |   319       CHECK_GT(input->op()->ValueOutputCount(), index); | 
|   305       // Type can be anything. |   320       // Type can be anything. | 
|   306       // TODO(rossberg): Introduce tuple types for this. |   321       // TODO(rossberg): Introduce tuple types for this. | 
|   307       // TODO(titzer): Convince rossberg not to. |   322       // TODO(titzer): Convince rossberg not to. | 
|   308       CheckUpperIs(node, Type::Any()); |   323       CheckUpperIs(node, Type::Any()); | 
|   309       break; |   324       break; | 
| (...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   988     // Check inputs for all nodes in the block. |  1003     // Check inputs for all nodes in the block. | 
|   989     for (size_t i = 0; i < block->NodeCount(); i++) { |  1004     for (size_t i = 0; i < block->NodeCount(); i++) { | 
|   990       Node* node = block->NodeAt(i); |  1005       Node* node = block->NodeAt(i); | 
|   991       CheckInputsDominate(schedule, block, node, static_cast<int>(i) - 1); |  1006       CheckInputsDominate(schedule, block, node, static_cast<int>(i) - 1); | 
|   992     } |  1007     } | 
|   993   } |  1008   } | 
|   994 } |  1009 } | 
|   995 } |  1010 } | 
|   996 } |  1011 } | 
|   997 }  // namespace v8::internal::compiler |  1012 }  // namespace v8::internal::compiler | 
| OLD | NEW |