| 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 |