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 <algorithm> | 7 #include <algorithm> |
8 #include <deque> | 8 #include <deque> |
9 #include <queue> | 9 #include <queue> |
10 #include <sstream> | 10 #include <sstream> |
(...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
639 // Boolean -> Boolean | 639 // Boolean -> Boolean |
640 CheckValueInputIs(node, 0, Type::Boolean()); | 640 CheckValueInputIs(node, 0, Type::Boolean()); |
641 CheckUpperIs(node, Type::Boolean()); | 641 CheckUpperIs(node, Type::Boolean()); |
642 break; | 642 break; |
643 case IrOpcode::kBooleanToNumber: | 643 case IrOpcode::kBooleanToNumber: |
644 // Boolean -> Number | 644 // Boolean -> Number |
645 CheckValueInputIs(node, 0, Type::Boolean()); | 645 CheckValueInputIs(node, 0, Type::Boolean()); |
646 CheckUpperIs(node, Type::Number()); | 646 CheckUpperIs(node, Type::Number()); |
647 break; | 647 break; |
648 case IrOpcode::kNumberEqual: | 648 case IrOpcode::kNumberEqual: |
| 649 // (NumberOrUndefined, NumberOrUndefined) -> Boolean |
| 650 CheckValueInputIs(node, 0, Type::NumberOrUndefined()); |
| 651 CheckValueInputIs(node, 1, Type::NumberOrUndefined()); |
| 652 CheckUpperIs(node, Type::Boolean()); |
| 653 break; |
649 case IrOpcode::kNumberLessThan: | 654 case IrOpcode::kNumberLessThan: |
650 case IrOpcode::kNumberLessThanOrEqual: | 655 case IrOpcode::kNumberLessThanOrEqual: |
651 // (Number, Number) -> Boolean | 656 // (Number, Number) -> Boolean |
652 CheckValueInputIs(node, 0, Type::Number()); | 657 CheckValueInputIs(node, 0, Type::NumberOrUndefined()); |
653 CheckValueInputIs(node, 1, Type::Number()); | 658 CheckValueInputIs(node, 1, Type::NumberOrUndefined()); |
654 CheckUpperIs(node, Type::Boolean()); | 659 CheckUpperIs(node, Type::Boolean()); |
655 break; | 660 break; |
656 case IrOpcode::kNumberAdd: | 661 case IrOpcode::kNumberAdd: |
657 case IrOpcode::kNumberSubtract: | 662 case IrOpcode::kNumberSubtract: |
658 case IrOpcode::kNumberMultiply: | 663 case IrOpcode::kNumberMultiply: |
659 case IrOpcode::kNumberDivide: | 664 case IrOpcode::kNumberDivide: |
| 665 // (Number, Number) -> Number |
| 666 CheckValueInputIs(node, 0, Type::NumberOrUndefined()); |
| 667 CheckValueInputIs(node, 1, Type::NumberOrUndefined()); |
| 668 // CheckUpperIs(node, Type::Number()); |
| 669 break; |
660 case IrOpcode::kNumberModulus: | 670 case IrOpcode::kNumberModulus: |
661 // (Number, Number) -> Number | 671 // (Number, Number) -> Number |
662 CheckValueInputIs(node, 0, Type::Number()); | 672 CheckValueInputIs(node, 0, Type::Number()); |
663 CheckValueInputIs(node, 1, Type::Number()); | 673 CheckValueInputIs(node, 1, Type::Number()); |
664 // TODO(rossberg): activate once we retype after opcode changes. | 674 // TODO(rossberg): activate once we retype after opcode changes. |
665 // CheckUpperIs(node, Type::Number()); | 675 // CheckUpperIs(node, Type::Number()); |
666 break; | 676 break; |
667 case IrOpcode::kNumberBitwiseOr: | 677 case IrOpcode::kNumberBitwiseOr: |
668 case IrOpcode::kNumberBitwiseXor: | 678 case IrOpcode::kNumberBitwiseXor: |
669 case IrOpcode::kNumberBitwiseAnd: | 679 case IrOpcode::kNumberBitwiseAnd: |
(...skipping 23 matching lines...) Expand all Loading... |
693 case IrOpcode::kNumberCeil: | 703 case IrOpcode::kNumberCeil: |
694 case IrOpcode::kNumberFloor: | 704 case IrOpcode::kNumberFloor: |
695 case IrOpcode::kNumberRound: | 705 case IrOpcode::kNumberRound: |
696 case IrOpcode::kNumberTrunc: | 706 case IrOpcode::kNumberTrunc: |
697 // Number -> Number | 707 // Number -> Number |
698 CheckValueInputIs(node, 0, Type::Number()); | 708 CheckValueInputIs(node, 0, Type::Number()); |
699 CheckUpperIs(node, Type::Number()); | 709 CheckUpperIs(node, Type::Number()); |
700 break; | 710 break; |
701 case IrOpcode::kNumberToInt32: | 711 case IrOpcode::kNumberToInt32: |
702 // Number -> Signed32 | 712 // Number -> Signed32 |
703 CheckValueInputIs(node, 0, Type::Number()); | 713 CheckValueInputIs(node, 0, Type::NumberOrUndefined()); |
704 CheckUpperIs(node, Type::Signed32()); | 714 CheckUpperIs(node, Type::Signed32()); |
705 break; | 715 break; |
706 case IrOpcode::kNumberToUint32: | 716 case IrOpcode::kNumberToUint32: |
707 // Number -> Unsigned32 | 717 // Number -> Unsigned32 |
708 CheckValueInputIs(node, 0, Type::Number()); | 718 CheckValueInputIs(node, 0, Type::NumberOrUndefined()); |
709 CheckUpperIs(node, Type::Unsigned32()); | 719 CheckUpperIs(node, Type::Unsigned32()); |
710 break; | 720 break; |
711 case IrOpcode::kNumberIsHoleNaN: | 721 case IrOpcode::kNumberIsHoleNaN: |
712 // Number -> Boolean | 722 // Number -> Boolean |
713 CheckValueInputIs(node, 0, Type::Number()); | 723 CheckValueInputIs(node, 0, Type::Number()); |
714 CheckUpperIs(node, Type::Boolean()); | 724 CheckUpperIs(node, Type::Boolean()); |
715 break; | 725 break; |
716 case IrOpcode::kPlainPrimitiveToNumber: | 726 case IrOpcode::kPlainPrimitiveToNumber: |
717 // PlainPrimitive -> Number | 727 // PlainPrimitive -> Number |
718 CheckValueInputIs(node, 0, Type::PlainPrimitive()); | 728 CheckValueInputIs(node, 0, Type::PlainPrimitive()); |
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1307 replacement->op()->EffectOutputCount() > 0); | 1317 replacement->op()->EffectOutputCount() > 0); |
1308 DCHECK(!NodeProperties::IsFrameStateEdge(edge) || | 1318 DCHECK(!NodeProperties::IsFrameStateEdge(edge) || |
1309 replacement->opcode() == IrOpcode::kFrameState); | 1319 replacement->opcode() == IrOpcode::kFrameState); |
1310 } | 1320 } |
1311 | 1321 |
1312 #endif // DEBUG | 1322 #endif // DEBUG |
1313 | 1323 |
1314 } // namespace compiler | 1324 } // namespace compiler |
1315 } // namespace internal | 1325 } // namespace internal |
1316 } // namespace v8 | 1326 } // namespace v8 |
OLD | NEW |