123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- #ifndef js_TrackedOptimizationInfo_h
- #define js_TrackedOptimizationInfo_h
- #include "mozilla/Maybe.h"
- namespace JS {
- #define TRACKED_STRATEGY_LIST(_) \
- _(GetProp_ArgumentsLength) \
- _(GetProp_ArgumentsCallee) \
- _(GetProp_InferredConstant) \
- _(GetProp_Constant) \
- _(GetProp_NotDefined) \
- _(GetProp_StaticName) \
- _(GetProp_SimdGetter) \
- _(GetProp_TypedObject) \
- _(GetProp_DefiniteSlot) \
- _(GetProp_Unboxed) \
- _(GetProp_CommonGetter) \
- _(GetProp_InlineAccess) \
- _(GetProp_Innerize) \
- _(GetProp_InlineCache) \
- _(GetProp_SharedCache) \
- _(GetProp_ModuleNamespace) \
- \
- _(SetProp_CommonSetter) \
- _(SetProp_TypedObject) \
- _(SetProp_DefiniteSlot) \
- _(SetProp_Unboxed) \
- _(SetProp_InlineAccess) \
- _(SetProp_InlineCache) \
- \
- _(GetElem_TypedObject) \
- _(GetElem_Dense) \
- _(GetElem_TypedStatic) \
- _(GetElem_TypedArray) \
- _(GetElem_String) \
- _(GetElem_Arguments) \
- _(GetElem_ArgumentsInlined) \
- _(GetElem_InlineCache) \
- \
- _(SetElem_TypedObject) \
- _(SetElem_TypedStatic) \
- _(SetElem_TypedArray) \
- _(SetElem_Dense) \
- _(SetElem_Arguments) \
- _(SetElem_InlineCache) \
- \
- _(BinaryArith_Concat) \
- _(BinaryArith_SpecializedTypes) \
- _(BinaryArith_SpecializedOnBaselineTypes) \
- _(BinaryArith_SharedCache) \
- _(BinaryArith_Call) \
- \
- _(InlineCache_OptimizedStub) \
- \
- _(Call_Inline)
- // Ordering is important below. All outcomes before GenericSuccess will be
- // considered failures, and all outcomes after GenericSuccess will be
- // considered successes.
- #define TRACKED_OUTCOME_LIST(_) \
- _(GenericFailure) \
- _(Disabled) \
- _(NoTypeInfo) \
- _(NoAnalysisInfo) \
- _(NoShapeInfo) \
- _(UnknownObject) \
- _(UnknownProperties) \
- _(Singleton) \
- _(NotSingleton) \
- _(NotFixedSlot) \
- _(InconsistentFixedSlot) \
- _(NotObject) \
- _(NotStruct) \
- _(NotUnboxed) \
- _(NotUndefined) \
- _(UnboxedConvertedToNative) \
- _(StructNoField) \
- _(InconsistentFieldType) \
- _(InconsistentFieldOffset) \
- _(NeedsTypeBarrier) \
- _(InDictionaryMode) \
- _(NoProtoFound) \
- _(MultiProtoPaths) \
- _(NonWritableProperty) \
- _(ProtoIndexedProps) \
- _(ArrayBadFlags) \
- _(ArrayDoubleConversion) \
- _(ArrayRange) \
- _(ArraySeenNegativeIndex) \
- _(TypedObjectHasDetachedBuffer) \
- _(TypedObjectArrayRange) \
- _(AccessNotDense) \
- _(AccessNotSimdObject) \
- _(AccessNotTypedObject) \
- _(AccessNotTypedArray) \
- _(AccessNotString) \
- _(OperandNotString) \
- _(OperandNotNumber) \
- _(OperandNotStringOrNumber) \
- _(OperandNotSimpleArith) \
- _(StaticTypedArrayUint32) \
- _(StaticTypedArrayCantComputeMask) \
- _(OutOfBounds) \
- _(GetElemStringNotCached) \
- _(NonNativeReceiver) \
- _(IndexType) \
- _(SetElemNonDenseNonTANotCached) \
- _(NoSimdJitSupport) \
- _(SimdTypeNotOptimized) \
- _(UnknownSimdProperty) \
- _(NotModuleNamespace) \
- _(UnknownProperty) \
- \
- _(ICOptStub_GenericSuccess) \
- \
- _(ICGetPropStub_ReadSlot) \
- _(ICGetPropStub_CallGetter) \
- _(ICGetPropStub_ArrayLength) \
- _(ICGetPropStub_UnboxedRead) \
- _(ICGetPropStub_UnboxedReadExpando) \
- _(ICGetPropStub_UnboxedArrayLength) \
- _(ICGetPropStub_TypedArrayLength) \
- _(ICGetPropStub_DOMProxyShadowed) \
- _(ICGetPropStub_DOMProxyUnshadowed) \
- _(ICGetPropStub_GenericProxy) \
- _(ICGetPropStub_ArgumentsLength) \
- \
- _(ICSetPropStub_Slot) \
- _(ICSetPropStub_GenericProxy) \
- _(ICSetPropStub_DOMProxyShadowed) \
- _(ICSetPropStub_DOMProxyUnshadowed) \
- _(ICSetPropStub_CallSetter) \
- _(ICSetPropStub_AddSlot) \
- _(ICSetPropStub_SetUnboxed) \
- \
- _(ICGetElemStub_ReadSlot) \
- _(ICGetElemStub_CallGetter) \
- _(ICGetElemStub_ReadUnboxed) \
- _(ICGetElemStub_Dense) \
- _(ICGetElemStub_DenseHole) \
- _(ICGetElemStub_TypedArray) \
- _(ICGetElemStub_ArgsElementMapped) \
- _(ICGetElemStub_ArgsElementUnmapped) \
- \
- _(ICSetElemStub_Dense) \
- _(ICSetElemStub_TypedArray) \
- \
- _(ICNameStub_ReadSlot) \
- _(ICNameStub_CallGetter) \
- _(ICNameStub_TypeOfNoProperty) \
- \
- _(CantInlineGeneric) \
- _(CantInlineNoTarget) \
- _(CantInlineNotInterpreted) \
- _(CantInlineNoBaseline) \
- _(CantInlineLazy) \
- _(CantInlineNotConstructor) \
- _(CantInlineClassConstructor) \
- _(CantInlineDisabledIon) \
- _(CantInlineTooManyArgs) \
- _(CantInlineNeedsArgsObj) \
- _(CantInlineDebuggee) \
- _(CantInlineUnknownProps) \
- _(CantInlineExceededDepth) \
- _(CantInlineExceededTotalBytecodeLength) \
- _(CantInlineBigCaller) \
- _(CantInlineBigCallee) \
- _(CantInlineBigCalleeInlinedBytecodeLength) \
- _(CantInlineNotHot) \
- _(CantInlineNotInDispatch) \
- _(CantInlineUnreachable) \
- _(CantInlineNativeBadForm) \
- _(CantInlineNativeBadType) \
- _(CantInlineNativeNoTemplateObj) \
- _(CantInlineBound) \
- _(CantInlineNativeNoSpecialization) \
- _(HasCommonInliningPath) \
- \
- _(GenericSuccess) \
- _(Inlined) \
- _(DOM) \
- _(Monomorphic) \
- _(Polymorphic)
- #define TRACKED_TYPESITE_LIST(_) \
- _(Receiver) \
- _(Operand) \
- _(Index) \
- _(Value) \
- _(Call_Target) \
- _(Call_This) \
- _(Call_Arg) \
- _(Call_Return)
- enum class TrackedStrategy : uint32_t {
- #define STRATEGY_OP(name) name,
- TRACKED_STRATEGY_LIST(STRATEGY_OP)
- #undef STRATEGY_OPT
- Count
- };
- enum class TrackedOutcome : uint32_t {
- #define OUTCOME_OP(name) name,
- TRACKED_OUTCOME_LIST(OUTCOME_OP)
- #undef OUTCOME_OP
- Count
- };
- enum class TrackedTypeSite : uint32_t {
- #define TYPESITE_OP(name) name,
- TRACKED_TYPESITE_LIST(TYPESITE_OP)
- #undef TYPESITE_OP
- Count
- };
- JS_PUBLIC_API(const char*)
- TrackedStrategyString(TrackedStrategy strategy);
- JS_PUBLIC_API(const char*)
- TrackedOutcomeString(TrackedOutcome outcome);
- JS_PUBLIC_API(const char*)
- TrackedTypeSiteString(TrackedTypeSite site);
- struct ForEachTrackedOptimizationAttemptOp
- {
- virtual void operator()(TrackedStrategy strategy, TrackedOutcome outcome) = 0;
- };
- struct ForEachTrackedOptimizationTypeInfoOp
- {
- // Called 0+ times per entry, once for each type in the type set that Ion
- // saw during MIR construction. readType is always called _before_
- // operator() on the same entry.
- //
- // The keyedBy parameter describes how the type is keyed:
- // - "primitive" for primitive types
- // - "constructor" for object types tied to a scripted constructor
- // function.
- // - "alloc site" for object types tied to an allocation site.
- // - "prototype" for object types tied neither to a constructor nor
- // to an allocation site, but to a prototype.
- // - "singleton" for object types which only has a single value.
- // - "function" for object types referring to scripted functions.
- // - "native" for object types referring to native functions.
- //
- // The name parameter is the string representation of the type. If the
- // type is keyed by "constructor", or if the type itself refers to a
- // scripted function, the name is the function's displayAtom. If the type
- // is keyed by "native", this is nullptr.
- //
- // The location parameter is the filename if the type is keyed by
- // "constructor", "alloc site", or if the type itself refers to a scripted
- // function. If the type is keyed by "native", it is the offset of the
- // native function, suitable for use with addr2line on Linux or atos on OS
- // X. Otherwise it is nullptr.
- //
- // The lineno parameter is the line number if the type is keyed by
- // "constructor", "alloc site", or if the type itself refers to a scripted
- // function. Otherwise it is Nothing().
- //
- // The location parameter is the only one that may need escaping if being
- // quoted.
- virtual void readType(const char* keyedBy, const char* name,
- const char* location, mozilla::Maybe<unsigned> lineno) = 0;
- // Called once per entry.
- virtual void operator()(TrackedTypeSite site, const char* mirType) = 0;
- };
- } // namespace JS
- #endif // js_TrackedOptimizationInfo_h
|