Index: src/compiler/verifier.cc |
diff --git a/src/compiler/verifier.cc b/src/compiler/verifier.cc |
index 1fe71205da4def2e45b6c6b65c73504620378cd4..75197c02370dbd50063f6fd0447f73098f168346 100644 |
--- a/src/compiler/verifier.cc |
+++ b/src/compiler/verifier.cc |
@@ -646,17 +646,27 @@ void Verifier::Visitor::Check(Node* node) { |
CheckUpperIs(node, Type::Number()); |
break; |
case IrOpcode::kNumberEqual: |
+ // (NumberOrUndefined, NumberOrUndefined) -> Boolean |
+ CheckValueInputIs(node, 0, Type::NumberOrUndefined()); |
+ CheckValueInputIs(node, 1, Type::NumberOrUndefined()); |
+ CheckUpperIs(node, Type::Boolean()); |
+ break; |
case IrOpcode::kNumberLessThan: |
case IrOpcode::kNumberLessThanOrEqual: |
// (Number, Number) -> Boolean |
- CheckValueInputIs(node, 0, Type::Number()); |
- CheckValueInputIs(node, 1, Type::Number()); |
+ CheckValueInputIs(node, 0, Type::NumberOrUndefined()); |
+ CheckValueInputIs(node, 1, Type::NumberOrUndefined()); |
CheckUpperIs(node, Type::Boolean()); |
break; |
case IrOpcode::kNumberAdd: |
case IrOpcode::kNumberSubtract: |
case IrOpcode::kNumberMultiply: |
case IrOpcode::kNumberDivide: |
+ // (Number, Number) -> Number |
+ CheckValueInputIs(node, 0, Type::NumberOrUndefined()); |
+ CheckValueInputIs(node, 1, Type::NumberOrUndefined()); |
+ // CheckUpperIs(node, Type::Number()); |
+ break; |
case IrOpcode::kNumberModulus: |
// (Number, Number) -> Number |
CheckValueInputIs(node, 0, Type::Number()); |
@@ -700,12 +710,12 @@ void Verifier::Visitor::Check(Node* node) { |
break; |
case IrOpcode::kNumberToInt32: |
// Number -> Signed32 |
- CheckValueInputIs(node, 0, Type::Number()); |
+ CheckValueInputIs(node, 0, Type::NumberOrUndefined()); |
CheckUpperIs(node, Type::Signed32()); |
break; |
case IrOpcode::kNumberToUint32: |
// Number -> Unsigned32 |
- CheckValueInputIs(node, 0, Type::Number()); |
+ CheckValueInputIs(node, 0, Type::NumberOrUndefined()); |
CheckUpperIs(node, Type::Unsigned32()); |
break; |
case IrOpcode::kNumberIsHoleNaN: |