Merge V8 5.3.332.45. DO NOT MERGE
Test: Manual
FPIIM-449
Change-Id: Id3254828b068abdea3cb10442e0172a8c9a98e03
(cherry picked from commit 13e2dadd00298019ed862f2b2fc5068bba730bcf)
diff --git a/src/compiler/operator-properties.cc b/src/compiler/operator-properties.cc
index 7f38ca7..43b0076 100644
--- a/src/compiler/operator-properties.cc
+++ b/src/compiler/operator-properties.cc
@@ -22,11 +22,12 @@
// static
int OperatorProperties::GetFrameStateInputCount(const Operator* op) {
switch (op->opcode()) {
+ case IrOpcode::kCheckpoint:
case IrOpcode::kFrameState:
return 1;
case IrOpcode::kJSCallRuntime: {
const CallRuntimeParameters& p = CallRuntimeParametersOf(op);
- return Linkage::FrameStateInputCount(p.id());
+ return Linkage::NeedsFrameStateInput(p.id()) ? 1 : 0;
}
// Strict equality cannot lazily deoptimize.
@@ -34,12 +35,6 @@
case IrOpcode::kJSStrictNotEqual:
return 0;
- // We record the frame state immediately before and immediately after every
- // construct/function call.
- case IrOpcode::kJSCallConstruct:
- case IrOpcode::kJSCallFunction:
- return 2;
-
// Compare operations
case IrOpcode::kJSEqual:
case IrOpcode::kJSNotEqual:
@@ -54,6 +49,15 @@
case IrOpcode::kJSCreateLiteralObject:
case IrOpcode::kJSCreateLiteralRegExp:
+ // Property access operations
+ case IrOpcode::kJSLoadNamed:
+ case IrOpcode::kJSStoreNamed:
+ case IrOpcode::kJSLoadProperty:
+ case IrOpcode::kJSStoreProperty:
+ case IrOpcode::kJSLoadGlobal:
+ case IrOpcode::kJSStoreGlobal:
+ case IrOpcode::kJSDeleteProperty:
+
// Context operations
case IrOpcode::kJSCreateScriptContext:
@@ -65,24 +69,17 @@
case IrOpcode::kJSToObject:
case IrOpcode::kJSToString:
+ // Call operations
+ case IrOpcode::kJSCallConstruct:
+ case IrOpcode::kJSCallFunction:
+
// Misc operations
case IrOpcode::kJSConvertReceiver:
case IrOpcode::kJSForInNext:
case IrOpcode::kJSForInPrepare:
case IrOpcode::kJSStackCheck:
- case IrOpcode::kJSDeleteProperty:
return 1;
- // We record the frame state immediately before and immediately after
- // every property or global variable access.
- case IrOpcode::kJSLoadNamed:
- case IrOpcode::kJSStoreNamed:
- case IrOpcode::kJSLoadProperty:
- case IrOpcode::kJSStoreProperty:
- case IrOpcode::kJSLoadGlobal:
- case IrOpcode::kJSStoreGlobal:
- return 2;
-
// Binary 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.