From: mstarzinger Date: Fri, 6 Feb 2015 15:07:15 +0000 (-0800) Subject: Make the Linkage::NeedsFrameState list more intuitive. X-Git-Tag: upstream/4.7.83~4552 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c699a87be97d2afc94359eb29697993842d74f61;p=platform%2Fupstream%2Fv8.git 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} --- diff --git a/src/compiler/linkage.cc b/src/compiler/linkage.cc index 4d3187506..87c6ee8a4 100644 --- a/src/compiler/linkage.cc +++ b/src/compiler/linkage.cc @@ -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; }