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 615 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
626 // CheckUpperIs(node, to)); | 626 // CheckUpperIs(node, to)); |
627 break; | 627 break; |
628 } | 628 } |
629 | 629 |
630 case IrOpcode::kLoadField: | 630 case IrOpcode::kLoadField: |
631 // Object -> fieldtype | 631 // Object -> fieldtype |
632 // TODO(rossberg): activate once machine ops are typed. | 632 // TODO(rossberg): activate once machine ops are typed. |
633 // CheckValueInputIs(node, 0, Type::Object()); | 633 // CheckValueInputIs(node, 0, Type::Object()); |
634 // CheckUpperIs(node, Field(node).type)); | 634 // CheckUpperIs(node, Field(node).type)); |
635 break; | 635 break; |
| 636 case IrOpcode::kLoadBuffer: |
| 637 break; |
636 case IrOpcode::kLoadElement: | 638 case IrOpcode::kLoadElement: |
637 // Object -> elementtype | 639 // Object -> elementtype |
638 // TODO(rossberg): activate once machine ops are typed. | 640 // TODO(rossberg): activate once machine ops are typed. |
639 // CheckValueInputIs(node, 0, Type::Object()); | 641 // CheckValueInputIs(node, 0, Type::Object()); |
640 // CheckUpperIs(node, Element(node).type)); | 642 // CheckUpperIs(node, Element(node).type)); |
641 break; | 643 break; |
642 case IrOpcode::kStoreField: | 644 case IrOpcode::kStoreField: |
643 // (Object, fieldtype) -> _|_ | 645 // (Object, fieldtype) -> _|_ |
644 // TODO(rossberg): activate once machine ops are typed. | 646 // TODO(rossberg): activate once machine ops are typed. |
645 // CheckValueInputIs(node, 0, Type::Object()); | 647 // CheckValueInputIs(node, 0, Type::Object()); |
646 // CheckValueInputIs(node, 1, Field(node).type)); | 648 // CheckValueInputIs(node, 1, Field(node).type)); |
647 CheckNotTyped(node); | 649 CheckNotTyped(node); |
648 break; | 650 break; |
| 651 case IrOpcode::kStoreBuffer: |
| 652 break; |
649 case IrOpcode::kStoreElement: | 653 case IrOpcode::kStoreElement: |
650 // (Object, elementtype) -> _|_ | 654 // (Object, elementtype) -> _|_ |
651 // TODO(rossberg): activate once machine ops are typed. | 655 // TODO(rossberg): activate once machine ops are typed. |
652 // CheckValueInputIs(node, 0, Type::Object()); | 656 // CheckValueInputIs(node, 0, Type::Object()); |
653 // CheckValueInputIs(node, 1, Element(node).type)); | 657 // CheckValueInputIs(node, 1, Element(node).type)); |
654 CheckNotTyped(node); | 658 CheckNotTyped(node); |
655 break; | 659 break; |
656 | 660 |
657 // Machine operators | 661 // Machine operators |
658 // ----------------------- | 662 // ----------------------- |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
716 case IrOpcode::kTruncateFloat64ToFloat32: | 720 case IrOpcode::kTruncateFloat64ToFloat32: |
717 case IrOpcode::kTruncateFloat64ToInt32: | 721 case IrOpcode::kTruncateFloat64ToInt32: |
718 case IrOpcode::kChangeInt32ToInt64: | 722 case IrOpcode::kChangeInt32ToInt64: |
719 case IrOpcode::kChangeUint32ToUint64: | 723 case IrOpcode::kChangeUint32ToUint64: |
720 case IrOpcode::kChangeInt32ToFloat64: | 724 case IrOpcode::kChangeInt32ToFloat64: |
721 case IrOpcode::kChangeUint32ToFloat64: | 725 case IrOpcode::kChangeUint32ToFloat64: |
722 case IrOpcode::kChangeFloat32ToFloat64: | 726 case IrOpcode::kChangeFloat32ToFloat64: |
723 case IrOpcode::kChangeFloat64ToInt32: | 727 case IrOpcode::kChangeFloat64ToInt32: |
724 case IrOpcode::kChangeFloat64ToUint32: | 728 case IrOpcode::kChangeFloat64ToUint32: |
725 case IrOpcode::kLoadStackPointer: | 729 case IrOpcode::kLoadStackPointer: |
| 730 case IrOpcode::kCheckedLoad: |
| 731 case IrOpcode::kCheckedStore: |
726 // TODO(rossberg): Check. | 732 // TODO(rossberg): Check. |
727 break; | 733 break; |
728 } | 734 } |
729 } | 735 } |
730 | 736 |
731 | 737 |
732 void Verifier::Run(Graph* graph, Typing typing) { | 738 void Verifier::Run(Graph* graph, Typing typing) { |
733 Visitor visitor(graph->zone(), typing); | 739 Visitor visitor(graph->zone(), typing); |
734 CHECK_NE(NULL, graph->start()); | 740 CHECK_NE(NULL, graph->start()); |
735 CHECK_NE(NULL, graph->end()); | 741 CHECK_NE(NULL, graph->end()); |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
969 // Check inputs for all nodes in the block. | 975 // Check inputs for all nodes in the block. |
970 for (size_t i = 0; i < block->NodeCount(); i++) { | 976 for (size_t i = 0; i < block->NodeCount(); i++) { |
971 Node* node = block->NodeAt(i); | 977 Node* node = block->NodeAt(i); |
972 CheckInputsDominate(schedule, block, node, static_cast<int>(i) - 1); | 978 CheckInputsDominate(schedule, block, node, static_cast<int>(i) - 1); |
973 } | 979 } |
974 } | 980 } |
975 } | 981 } |
976 } | 982 } |
977 } | 983 } |
978 } // namespace v8::internal::compiler | 984 } // namespace v8::internal::compiler |
OLD | NEW |