Index: src/compiler/operator-properties.cc |
diff --git a/src/compiler/operator-properties.cc b/src/compiler/operator-properties.cc |
index a36caf5513a96d8add98b9759c0813ff42b57e5c..0ee434c3c8516bbf92fcfe7ca83f97fc71071713 100644 |
--- a/src/compiler/operator-properties.cc |
+++ b/src/compiler/operator-properties.cc |
@@ -40,13 +40,9 @@ int OperatorProperties::GetFrameStateInputCount(const Operator* op) { |
// Compare operations |
case IrOpcode::kJSEqual: |
- case IrOpcode::kJSGreaterThan: |
- case IrOpcode::kJSGreaterThanOrEqual: |
+ case IrOpcode::kJSNotEqual: |
case IrOpcode::kJSHasProperty: |
case IrOpcode::kJSInstanceOf: |
- case IrOpcode::kJSLessThan: |
- case IrOpcode::kJSLessThanOrEqual: |
- case IrOpcode::kJSNotEqual: |
// Object operations |
case IrOpcode::kJSCreateLiteralArray: |
@@ -93,6 +89,15 @@ int OperatorProperties::GetFrameStateInputCount(const Operator* op) { |
case IrOpcode::kJSSubtract: |
return 2; |
+ // Compare operators that can deopt in the middle the operation (e.g., |
+ // as a result of lazy deopt in ToNumber conversion) need a second frame |
+ // state so that we can resume before the operation. |
+ case IrOpcode::kJSGreaterThan: |
+ case IrOpcode::kJSGreaterThanOrEqual: |
+ case IrOpcode::kJSLessThan: |
+ case IrOpcode::kJSLessThanOrEqual: |
+ return 2; |
+ |
default: |
return 0; |
} |