| Index: src/compiler/operator-properties-inl.h
|
| diff --git a/src/compiler/operator-properties-inl.h b/src/compiler/operator-properties-inl.h
|
| index 72e4b6112d96a140a9c9561906f5445e5f1dba36..a65068d7fff97934a9ddf1ea26595b9e38ff0566 100644
|
| --- a/src/compiler/operator-properties-inl.h
|
| +++ b/src/compiler/operator-properties-inl.h
|
| @@ -31,6 +31,33 @@ inline bool OperatorProperties::HasControlInput(Operator* op) {
|
| return OperatorProperties::GetControlInputCount(op) > 0;
|
| }
|
|
|
| +inline bool OperatorProperties::HasFrameStateInput(Operator* op) {
|
| + if (!FLAG_turbo_deoptimization) {
|
| + return false;
|
| + }
|
| +
|
| + switch (op->opcode()) {
|
| + case IrOpcode::kJSCallFunction:
|
| + return true;
|
| + case IrOpcode::kJSCallRuntime: {
|
| + Runtime::FunctionId function =
|
| + reinterpret_cast<Operator1<Runtime::FunctionId>*>(op)->parameter();
|
| + // TODO(jarin) At the moment, we only add frame state for
|
| + // few chosen runtime functions.
|
| + switch (function) {
|
| + case Runtime::kDebugBreak:
|
| + case Runtime::kDeoptimizeFunction:
|
| + return true;
|
| + default:
|
| + return false;
|
| + }
|
| + UNREACHABLE();
|
| + }
|
| +
|
| + default:
|
| + return false;
|
| + }
|
| +}
|
|
|
| inline int OperatorProperties::GetValueInputCount(Operator* op) {
|
| return op->InputCount();
|
| @@ -40,6 +67,10 @@ inline int OperatorProperties::GetContextInputCount(Operator* op) {
|
| return OperatorProperties::HasContextInput(op) ? 1 : 0;
|
| }
|
|
|
| +inline int OperatorProperties::GetFrameStateInputCount(Operator* op) {
|
| + return OperatorProperties::HasFrameStateInput(op) ? 1 : 0;
|
| +}
|
| +
|
| inline int OperatorProperties::GetEffectInputCount(Operator* op) {
|
| if (op->opcode() == IrOpcode::kEffectPhi ||
|
| op->opcode() == IrOpcode::kFinish) {
|
| @@ -77,7 +108,8 @@ inline int OperatorProperties::GetControlInputCount(Operator* op) {
|
|
|
| inline int OperatorProperties::GetTotalInputCount(Operator* op) {
|
| return GetValueInputCount(op) + GetContextInputCount(op) +
|
| - GetEffectInputCount(op) + GetControlInputCount(op);
|
| + GetFrameStateInputCount(op) + GetEffectInputCount(op) +
|
| + GetControlInputCount(op);
|
| }
|
|
|
| // -----------------------------------------------------------------------------
|
| @@ -142,8 +174,15 @@ inline bool OperatorProperties::CanLazilyDeoptimize(Operator* op) {
|
| Runtime::FunctionId function =
|
| reinterpret_cast<Operator1<Runtime::FunctionId>*>(op)->parameter();
|
| // TODO(jarin) At the moment, we only support lazy deoptimization for
|
| - // the %DeoptimizeFunction runtime function.
|
| - return function == Runtime::kDeoptimizeFunction;
|
| + // a few chosen runtime functions.
|
| + switch (function) {
|
| + case Runtime::kDebugBreak:
|
| + case Runtime::kDeoptimizeFunction:
|
| + return true;
|
| + default:
|
| + return false;
|
| + }
|
| + UNREACHABLE();
|
| }
|
|
|
| // JS function calls
|
|
|