| Index: src/compiler/operator-properties-inl.h
|
| diff --git a/src/compiler/operator-properties-inl.h b/src/compiler/operator-properties-inl.h
|
| index 9d8cc0424e05f9be54c4f5654490b66e9a9fba06..374d9ba55cbcc7fd2ee36dca0e9c86b0d846f7fd 100644
|
| --- a/src/compiler/operator-properties-inl.h
|
| +++ b/src/compiler/operator-properties-inl.h
|
| @@ -38,6 +38,7 @@ inline bool OperatorProperties::HasFrameStateInput(Operator* op) {
|
|
|
| switch (op->opcode()) {
|
| case IrOpcode::kJSCallFunction:
|
| + case IrOpcode::kJSCallConstruct:
|
| return true;
|
| case IrOpcode::kJSCallRuntime: {
|
| Runtime::FunctionId function =
|
| @@ -57,6 +58,24 @@ inline bool OperatorProperties::HasFrameStateInput(Operator* op) {
|
| UNREACHABLE();
|
| }
|
|
|
| + // Binary operations
|
| + case IrOpcode::kJSBitwiseOr:
|
| + case IrOpcode::kJSBitwiseXor:
|
| + case IrOpcode::kJSBitwiseAnd:
|
| + case IrOpcode::kJSShiftLeft:
|
| + case IrOpcode::kJSShiftRight:
|
| + case IrOpcode::kJSShiftRightLogical:
|
| + case IrOpcode::kJSAdd:
|
| + case IrOpcode::kJSSubtract:
|
| + case IrOpcode::kJSMultiply:
|
| + case IrOpcode::kJSDivide:
|
| + case IrOpcode::kJSModulus:
|
| + case IrOpcode::kJSLoadProperty:
|
| + case IrOpcode::kJSStoreProperty:
|
| + case IrOpcode::kJSLoadNamed:
|
| + case IrOpcode::kJSStoreNamed:
|
| + return true;
|
| +
|
| default:
|
| return false;
|
| }
|
| @@ -95,10 +114,6 @@ inline int OperatorProperties::GetControlInputCount(Operator* op) {
|
| #undef OPCODE_CASE
|
| return static_cast<ControlOperator*>(op)->ControlInputCount();
|
| default:
|
| - // If a node can lazily deoptimize, it needs control dependency.
|
| - if (CanLazilyDeoptimize(op)) {
|
| - return 1;
|
| - }
|
| // Operators that have write effects must have a control
|
| // dependency. Effect dependencies only ensure the correct order of
|
| // write/read operations without consideration of control flow. Without an
|
| @@ -131,8 +146,7 @@ inline bool OperatorProperties::HasEffectOutput(Operator* op) {
|
|
|
| inline bool OperatorProperties::HasControlOutput(Operator* op) {
|
| IrOpcode::Value opcode = static_cast<IrOpcode::Value>(op->opcode());
|
| - return (opcode != IrOpcode::kEnd && IrOpcode::IsControlOpcode(opcode)) ||
|
| - CanLazilyDeoptimize(op);
|
| + return (opcode != IrOpcode::kEnd && IrOpcode::IsControlOpcode(opcode));
|
| }
|
|
|
|
|
| @@ -158,66 +172,6 @@ inline bool OperatorProperties::IsBasicBlockBegin(Operator* op) {
|
| opcode == IrOpcode::kIfFalse;
|
| }
|
|
|
| -inline bool OperatorProperties::CanLazilyDeoptimize(Operator* op) {
|
| - // TODO(jarin) This function allows turning on lazy deoptimization
|
| - // incrementally. It will change as we turn on lazy deopt for
|
| - // more nodes.
|
| -
|
| - if (!FLAG_turbo_deoptimization) {
|
| - return false;
|
| - }
|
| -
|
| - switch (op->opcode()) {
|
| - case IrOpcode::kCall: {
|
| - CallOperator* call_op = reinterpret_cast<CallOperator*>(op);
|
| - CallDescriptor* descriptor = call_op->parameter();
|
| - return descriptor->CanLazilyDeoptimize();
|
| - }
|
| - case IrOpcode::kJSCallRuntime: {
|
| - Runtime::FunctionId function =
|
| - reinterpret_cast<Operator1<Runtime::FunctionId>*>(op)->parameter();
|
| - // TODO(jarin) At the moment, we only support lazy deoptimization for
|
| - // a few chosen runtime functions.
|
| - switch (function) {
|
| - case Runtime::kDebugBreak:
|
| - case Runtime::kDeoptimizeFunction:
|
| - case Runtime::kSetScriptBreakPoint:
|
| - case Runtime::kDebugGetLoadedScripts:
|
| - case Runtime::kStackGuard:
|
| - return true;
|
| - default:
|
| - return false;
|
| - }
|
| - UNREACHABLE();
|
| - }
|
| -
|
| - // JS function calls
|
| - case IrOpcode::kJSCallFunction:
|
| - case IrOpcode::kJSCallConstruct:
|
| -
|
| - // Binary operations
|
| - case IrOpcode::kJSBitwiseOr:
|
| - case IrOpcode::kJSBitwiseXor:
|
| - case IrOpcode::kJSBitwiseAnd:
|
| - case IrOpcode::kJSShiftLeft:
|
| - case IrOpcode::kJSShiftRight:
|
| - case IrOpcode::kJSShiftRightLogical:
|
| - case IrOpcode::kJSAdd:
|
| - case IrOpcode::kJSSubtract:
|
| - case IrOpcode::kJSMultiply:
|
| - case IrOpcode::kJSDivide:
|
| - case IrOpcode::kJSModulus:
|
| - case IrOpcode::kJSLoadProperty:
|
| - case IrOpcode::kJSStoreProperty:
|
| - case IrOpcode::kJSLoadNamed:
|
| - case IrOpcode::kJSStoreNamed:
|
| - return true;
|
| -
|
| - default:
|
| - return false;
|
| - }
|
| - return false;
|
| -}
|
| }
|
| }
|
| } // namespace v8::internal::compiler
|
|
|