Make the Linkage::NeedsFrameState list more intuitive.
R=jarin@chromium.org Review URL: https://codereview.chromium.org/878743006 Cr-Commit-Position: refs/heads/master@{#26488}
This commit is contained in:
parent
2b0427a912
commit
c699a87be9
@ -120,114 +120,49 @@ bool Linkage::NeedsFrameState(Runtime::FunctionId function) {
|
||||
if (!FLAG_turbo_deoptimization) {
|
||||
return false;
|
||||
}
|
||||
// TODO(jarin) At the moment, we only add frame state for
|
||||
// few chosen runtime functions.
|
||||
|
||||
// Most runtime functions need a FrameState. A few chosen ones that we know
|
||||
// not to call into arbitrary JavaScript, not to throw, and not to deoptimize
|
||||
// are blacklisted here and can be called without a FrameState.
|
||||
switch (function) {
|
||||
case Runtime::kApply:
|
||||
case Runtime::kArrayBufferNeuter:
|
||||
case Runtime::kArrayConcat:
|
||||
case Runtime::kBasicJSONStringify:
|
||||
case Runtime::kCheckExecutionState:
|
||||
case Runtime::kCollectStackTrace:
|
||||
case Runtime::kCompileLazy:
|
||||
case Runtime::kCompileOptimized:
|
||||
case Runtime::kCompileString:
|
||||
case Runtime::kCreateArrayLiteral:
|
||||
case Runtime::kCreateObjectLiteral:
|
||||
case Runtime::kDebugBreak:
|
||||
case Runtime::kDataViewSetInt8:
|
||||
case Runtime::kDataViewSetUint8:
|
||||
case Runtime::kDataViewSetInt16:
|
||||
case Runtime::kDataViewSetUint16:
|
||||
case Runtime::kDataViewSetInt32:
|
||||
case Runtime::kDataViewSetUint32:
|
||||
case Runtime::kDataViewSetFloat32:
|
||||
case Runtime::kDataViewSetFloat64:
|
||||
case Runtime::kDataViewGetInt8:
|
||||
case Runtime::kDataViewGetUint8:
|
||||
case Runtime::kDataViewGetInt16:
|
||||
case Runtime::kDataViewGetUint16:
|
||||
case Runtime::kDataViewGetInt32:
|
||||
case Runtime::kDataViewGetUint32:
|
||||
case Runtime::kDataViewGetFloat32:
|
||||
case Runtime::kDataViewGetFloat64:
|
||||
case Runtime::kDebugEvaluate:
|
||||
case Runtime::kDebugEvaluateGlobal:
|
||||
case Runtime::kDebugGetLoadedScripts:
|
||||
case Runtime::kDebugGetPropertyDetails:
|
||||
case Runtime::kDebugPromiseEvent:
|
||||
case Runtime::kDefaultConstructorSuperCall:
|
||||
case Runtime::kDefineAccessorPropertyUnchecked:
|
||||
case Runtime::kDefineClass:
|
||||
case Runtime::kDefineDataPropertyUnchecked:
|
||||
case Runtime::kDeleteProperty:
|
||||
case Runtime::kDeliverObservationChangeRecords:
|
||||
case Runtime::kDeoptimizeFunction:
|
||||
case Runtime::kFunctionBindArguments:
|
||||
case Runtime::kGetDefaultReceiver:
|
||||
case Runtime::kGetFrameCount:
|
||||
case Runtime::kGetOwnProperty:
|
||||
case Runtime::kGetOwnPropertyNames:
|
||||
case Runtime::kGetPropertyNamesFast:
|
||||
case Runtime::kGetPrototype:
|
||||
case Runtime::kBooleanize:
|
||||
case Runtime::kDeclareGlobals: // TODO(jarin): Is it safe?
|
||||
case Runtime::kDefineClassMethod: // TODO(jarin): Is it safe?
|
||||
case Runtime::kDefineGetterPropertyUnchecked: // TODO(jarin): Is it safe?
|
||||
case Runtime::kDefineSetterPropertyUnchecked: // TODO(jarin): Is it safe?
|
||||
case Runtime::kForInCacheArrayLength:
|
||||
case Runtime::kForInInit:
|
||||
case Runtime::kForInNext:
|
||||
case Runtime::kNewArguments:
|
||||
case Runtime::kNewClosure:
|
||||
case Runtime::kNewFunctionContext:
|
||||
case Runtime::kPushBlockContext:
|
||||
case Runtime::kPushCatchContext:
|
||||
case Runtime::kReThrow:
|
||||
case Runtime::kSetProperty: // TODO(jarin): Is it safe?
|
||||
case Runtime::kStringCompare:
|
||||
case Runtime::kStringEquals:
|
||||
case Runtime::kToFastProperties: // TODO(jarin): Is it safe?
|
||||
case Runtime::kTraceEnter:
|
||||
case Runtime::kTraceExit:
|
||||
case Runtime::kTypeof:
|
||||
return false;
|
||||
case Runtime::kInlineArguments:
|
||||
case Runtime::kInlineCallFunction:
|
||||
case Runtime::kInlineDateField:
|
||||
case Runtime::kInlineOptimizedGetPrototype:
|
||||
case Runtime::kInlineRegExpExec:
|
||||
case Runtime::kInternalSetPrototype:
|
||||
case Runtime::kInterrupt:
|
||||
case Runtime::kIsPropertyEnumerable:
|
||||
case Runtime::kIsSloppyModeFunction:
|
||||
case Runtime::kLiveEditGatherCompileInfo:
|
||||
case Runtime::kLoadLookupSlot:
|
||||
case Runtime::kLoadLookupSlotNoReferenceError:
|
||||
case Runtime::kMaterializeRegExpLiteral:
|
||||
case Runtime::kNewObject:
|
||||
case Runtime::kNewObjectFromBound:
|
||||
case Runtime::kNewObjectWithAllocationSite:
|
||||
case Runtime::kObjectFreeze:
|
||||
case Runtime::kObjectSeal:
|
||||
case Runtime::kOwnKeys:
|
||||
case Runtime::kParseJson:
|
||||
case Runtime::kPrepareStep:
|
||||
case Runtime::kPreventExtensions:
|
||||
case Runtime::kPromiseRejectEvent:
|
||||
case Runtime::kPromiseRevokeReject:
|
||||
case Runtime::kPushWithContext:
|
||||
case Runtime::kRegExpInitializeAndCompile:
|
||||
case Runtime::kRegExpExecMultiple:
|
||||
case Runtime::kResolvePossiblyDirectEval:
|
||||
case Runtime::kRunMicrotasks:
|
||||
case Runtime::kSetPrototype:
|
||||
case Runtime::kSetScriptBreakPoint:
|
||||
case Runtime::kSparseJoinWithSeparator:
|
||||
case Runtime::kStackGuard:
|
||||
case Runtime::kStoreKeyedToSuper_Sloppy:
|
||||
case Runtime::kStoreKeyedToSuper_Strict:
|
||||
case Runtime::kStoreToSuper_Sloppy:
|
||||
case Runtime::kStoreToSuper_Strict:
|
||||
case Runtime::kStoreLookupSlot:
|
||||
case Runtime::kStringBuilderConcat:
|
||||
case Runtime::kStringBuilderJoin:
|
||||
case Runtime::kStringMatch:
|
||||
case Runtime::kStringReplaceGlobalRegExpWithString:
|
||||
case Runtime::kThrowConstAssignError:
|
||||
case Runtime::kThrowConstructorNonCallableError:
|
||||
case Runtime::kThrowNonMethodError:
|
||||
case Runtime::kThrowNotDateError:
|
||||
case Runtime::kThrowReferenceError:
|
||||
case Runtime::kThrowUnsupportedSuperError:
|
||||
case Runtime::kThrow:
|
||||
case Runtime::kTypedArraySetFastCases:
|
||||
case Runtime::kTypedArrayInitializeFromArrayLike:
|
||||
#ifdef V8_I18N_SUPPORT
|
||||
case Runtime::kGetImplFromInitializedIntlObject:
|
||||
#endif
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
||||
// Most inlined runtime functions (except the ones listed above) can be called
|
||||
// without a FrameState or will be lowered by JSIntrinsicLowering internally.
|
||||
const Runtime::Function* const f = Runtime::FunctionForId(function);
|
||||
if (f->intrinsic_type == Runtime::IntrinsicType::INLINE) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user