33Address AddressOrNull(OptionalRef<T> ref) {
35 return ref->object().address();
40namespace js_node_wrapper_utils {
51 CHECK(
m.HasResolvedValue());
56 if (f.
IsUnknown())
return os <<
"unknown";
57 return os << f.
value();
93 op->
opcode() == IrOpcode::kJSConstructWithArrayLike ||
94 op->
opcode() == IrOpcode::kJSConstructWithSpread ||
95 op->
opcode() == IrOpcode::kJSConstructForwardAllArgs);
106 op->
opcode() == IrOpcode::kJSCallWithArrayLike ||
107 op->
opcode() == IrOpcode::kJSCallWithSpread);
131 return !(lhs == rhs);
141 return os << p.
id() <<
", " << p.
arity();
152 : immutable_(immutable),
153 depth_(static_cast<uint16_t>(depth)),
154 index_(static_cast<uint32_t>(index)) {
155 DCHECK(
depth <= std::numeric_limits<uint16_t>::max());
156 DCHECK(index <= std::numeric_limits<uint32_t>::max());
167 return !(lhs == rhs);
177 return os << access.depth() <<
", " << access.index() <<
", "
178 << access.immutable();
184 op->
opcode() == IrOpcode::kJSLoadScriptContext ||
185 op->
opcode() == IrOpcode::kJSStoreContext ||
186 op->
opcode() == IrOpcode::kJSStoreScriptContext);
200 return !(lhs == rhs);
222 return lhs.
name_.object().location() == rhs.
name_.object().location() &&
228 return !(lhs == rhs);
252 return !(lhs == rhs);
266 op->
opcode() == IrOpcode::kJSCreateEmptyLiteralArray ||
267 op->
opcode() == IrOpcode::kJSInstanceOf ||
268 op->
opcode() == IrOpcode::kJSDefineKeyedOwnPropertyInLiteral ||
269 op->
opcode() == IrOpcode::kJSStoreInArrayLiteral);
274 return lhs.
name_.object().location() == rhs.
name_.object().location() &&
281 return !(lhs == rhs);
298 op->
opcode() == IrOpcode::kJSLoadNamedFromSuper ||
299 op->
opcode() == IrOpcode::kJSSetNamedProperty);
316 return !(lhs == rhs);
322 op->
opcode() == IrOpcode::kJSLoadProperty ||
323 op->
opcode() == IrOpcode::kJSSetKeyedProperty ||
324 op->
opcode() == IrOpcode::kJSDefineKeyedOwnProperty);
337 return lhs.
name_.object().location() == rhs.
name_.object().location() &&
345 return !(lhs == rhs);
370 lhs.
name_.object().location() == rhs.
name_.object().location() &&
377 return !(lhs == rhs);
406 AddressOrNull(lhs.
site_) == AddressOrNull(rhs.
site_);
412 return !(lhs == rhs);
423 if (p.
site_.has_value()) {
441 return !(lhs == rhs);
445 return static_cast<size_t>(p.
kind());
450 return os << p.
kind();
467 return !(lhs == rhs);
489 lhs.
map_.object().location() == rhs.
map_.object().location();
494 return !(lhs == rhs);
504 if (!p.
map_.object().is_null()) os <<
", " <<
Brief(*p.
map_.object());
518 lhs.
shared_.object().location() == rhs.
shared_.object().location() &&
524 return !(lhs == rhs);
548 lhs.
code_.object().location() == rhs.
code_.object().location() &&
556 return !(lhs == rhs);
580 return lhs.
constant_.object().location() ==
589 return !(lhs == rhs);
607 DCHECK(op->
opcode() == IrOpcode::kJSCreateLiteralArray ||
608 op->
opcode() == IrOpcode::kJSCreateLiteralObject ||
609 op->
opcode() == IrOpcode::kJSCreateLiteralRegExp);
620 return !(lhs == rhs);
628 return os << p.
flags();
648 return !(lhs == rhs);
666 return os <<
"UseEnumCacheKeysAndIndices";
668 return os <<
"UseEnumCacheKeys";
670 return os <<
"Generic";
680 return !(lhs == rhs);
693 op->
opcode() == IrOpcode::kJSForInPrepare);
697#if V8_ENABLE_WEBASSEMBLY
698JSWasmCallParameters
const& JSWasmCallParametersOf(
const Operator* op) {
699 DCHECK_EQ(IrOpcode::kJSWasmCall, op->opcode());
703std::ostream&
operator<<(std::ostream& os, JSWasmCallParameters
const& p) {
704 return os << p.module() <<
", " << p.signature() <<
", " << p.feedback();
707size_t hash_value(JSWasmCallParameters
const& p) {
709 FeedbackSource::Hash()(p.feedback()));
712bool operator==(JSWasmCallParameters
const& lhs,
713 JSWasmCallParameters
const& rhs) {
714 return lhs.module() == rhs.module() && lhs.signature() == rhs.signature() &&
715 lhs.feedback() == rhs.feedback();
718int JSWasmCallParameters::arity_without_implicit_args()
const {
719 return static_cast<int>(signature_->parameter_count());
722int JSWasmCallParameters::input_count()
const {
723 return static_cast<int>(signature_->parameter_count()) +
724 JSWasmCallNode::kExtraInputCount;
728Type JSWasmCallNode::TypeForWasmReturnType(wasm::CanonicalValueType type) {
729 switch (type.kind()) {
731 return Type::Signed32();
733 return Type::SignedBigInt64();
736 return Type::Number();
747#define CACHED_OP_LIST(V) \
748 V(ToLength, Operator::kNoProperties, 1, 1) \
749 V(ToName, Operator::kNoProperties, 1, 1) \
750 V(ToNumber, Operator::kNoProperties, 1, 1) \
751 V(ToNumberConvertBigInt, Operator::kNoProperties, 1, 1) \
752 V(ToBigInt, Operator::kNoProperties, 1, 1) \
753 V(ToBigIntConvertNumber, Operator::kNoProperties, 1, 1) \
754 V(ToNumeric, Operator::kNoProperties, 1, 1) \
755 V(ToObject, Operator::kFoldable, 1, 1) \
756 V(ToString, Operator::kNoProperties, 1, 1) \
757 V(Create, Operator::kNoProperties, 2, 1) \
758 V(CreateIterResultObject, Operator::kEliminatable, 2, 1) \
759 V(CreateStringIterator, Operator::kEliminatable, 1, 1) \
760 V(CreateKeyValueArray, Operator::kEliminatable, 2, 1) \
761 V(CreatePromise, Operator::kEliminatable, 0, 1) \
762 V(CreateTypedArray, Operator::kNoProperties, 5, 1) \
763 V(CreateObject, Operator::kNoProperties, 1, 1) \
764 V(CreateStringWrapper, Operator::kEliminatable, 1, 1) \
765 V(ObjectIsArray, Operator::kNoProperties, 1, 1) \
766 V(HasInPrototypeChain, Operator::kNoProperties, 2, 1) \
767 V(OrdinaryHasInstance, Operator::kNoProperties, 2, 1) \
768 V(ForInEnumerate, Operator::kNoProperties, 1, 1) \
769 V(AsyncFunctionEnter, Operator::kNoProperties, 2, 1) \
770 V(AsyncFunctionReject, Operator::kNoDeopt | Operator::kNoThrow, 2, 1) \
771 V(AsyncFunctionResolve, Operator::kNoDeopt | Operator::kNoThrow, 2, 1) \
772 V(LoadMessage, Operator::kNoThrow | Operator::kNoWrite, 0, 1) \
773 V(StoreMessage, Operator::kNoRead | Operator::kNoThrow, 1, 0) \
774 V(GeneratorRestoreContinuation, Operator::kNoThrow, 1, 1) \
775 V(GeneratorRestoreContext, Operator::kNoThrow, 1, 1) \
776 V(GeneratorRestoreInputOrDebugPos, Operator::kNoThrow, 1, 1) \
777 V(Debugger, Operator::kNoProperties, 0, 0) \
778 V(FulfillPromise, Operator::kNoDeopt | Operator::kNoThrow, 2, 1) \
779 V(PerformPromiseThen, Operator::kNoDeopt | Operator::kNoThrow, 4, 1) \
780 V(PromiseResolve, Operator::kNoProperties, 2, 1) \
781 V(RejectPromise, Operator::kNoDeopt | Operator::kNoThrow, 3, 1) \
782 V(ResolvePromise, Operator::kNoDeopt | Operator::kNoThrow, 2, 1) \
783 V(GetSuperConstructor, Operator::kNoWrite | Operator::kNoThrow, 1, 1) \
784 V(FindNonDefaultConstructorOrConstruct, Operator::kNoProperties, 2, 2) \
785 V(ParseInt, Operator::kNoProperties, 2, 1) \
786 V(RegExpTest, Operator::kNoProperties, 2, 1)
789#define CACHED_OP(Name, properties, value_input_count, value_output_count) \
790 struct Name##Operator final : public Operator { \
792 : Operator(IrOpcode::kJS##Name, properties, "JS" #Name, \
793 value_input_count, Operator::ZeroIfPure(properties), \
794 Operator::ZeroIfEliminatable(properties), \
795 value_output_count, Operator::ZeroIfPure(properties), \
796 Operator::ZeroIfNoThrow(properties)) {} \
798 Name##Operator k##Name##Operator;
808 : cache_(*GetJSOperatorGlobalCache()),
zone_(zone) {}
810#define CACHED_OP(Name, properties, value_input_count, value_output_count) \
811 const Operator* JSOperatorBuilder::Name() { \
812 return &cache_.k##Name##Operator; \
817#define UNARY_OP(JSName, Name) \
818 const Operator* JSOperatorBuilder::Name(FeedbackSource const& feedback) { \
819 FeedbackParameter parameters(feedback); \
820 return zone()->New<Operator1<FeedbackParameter>>( \
821 IrOpcode::k##JSName, Operator::kNoProperties, #JSName, 2, 1, 1, 1, 1, \
827#define BINARY_OP(JSName, Name) \
828 const Operator* JSOperatorBuilder::Name(FeedbackSource const& feedback) { \
829 static constexpr auto kProperties = BinopProperties(IrOpcode::k##JSName); \
830 FeedbackParameter parameters(feedback); \
831 return zone()->New<Operator1<FeedbackParameter>>( \
832 IrOpcode::k##JSName, kProperties, #JSName, 3, 1, 1, 1, 1, \
833 Operator::ZeroIfNoThrow(kProperties), parameters); \
840 static constexpr int kObject = 1;
841 static constexpr int kName = 1;
842 static constexpr int kValue = 1;
843 static constexpr int kFlags = 1;
844 static constexpr int kFeedbackVector = 1;
845 static constexpr int kArity =
849 IrOpcode::kJSDefineKeyedOwnPropertyInLiteral,
851 "JSDefineKeyedOwnPropertyInLiteral",
852 kArity, 1, 1, 0, 1, 1,
858 static constexpr int kArray = 1;
859 static constexpr int kIndex = 1;
860 static constexpr int kValue = 1;
861 static constexpr int kFeedbackVector = 1;
862 static constexpr int kArity = kArray + kIndex +
kValue + kFeedbackVector;
865 IrOpcode::kJSStoreInArrayLiteral,
867 "JSStoreInArrayLiteral",
868 kArity, 1, 1, 0, 1, 1,
873 uint32_t start_index) {
877 "JSCallForwardVarargs",
878 parameters.
arity(), 1, 1, 1, 1, 2,
886 CallParameters parameters(arity, frequency, feedback, convert_mode,
887 speculation_mode, feedback_relation);
891 parameters.
arity(), 1, 1, 1, 1, 2,
898 static constexpr int kTheArrayLikeObject = 1;
904 "JSCallWithArrayLike",
905 parameters.
arity(), 1, 1, 1, 1, 2,
921 parameters.
arity(), 1, 1, 1, 1, 2,
941 IrOpcode::kJSCallRuntime, properties,
947#if V8_ENABLE_WEBASSEMBLY
948const Operator* JSOperatorBuilder::CallWasm(
955 JSWasmCallParameters parameters(wasm_module, wasm_signature,
956 wasm_function_index, shared_fct_info,
957 native_module, feedback);
961 parameters.input_count(), 1, 1, 1, 1, 2,
967 size_t arity, uint32_t start_index) {
971 "JSConstructForwardVarargs",
972 parameters.
arity(), 1, 1, 1, 1, 2,
985 parameters.
arity(), 1, 1, 1, 1, 2,
991 static constexpr int kTheArrayLikeObject = 1;
994 frequency, feedback);
996 IrOpcode::kJSConstructWithArrayLike,
998 "JSConstructWithArrayLike",
999 parameters.
arity(), 1, 1, 1, 1, 2,
1009 "JSConstructWithSpread",
1010 parameters.
arity(), 1, 1, 1, 1, 2,
1020 frequency, feedback);
1023 "JSConstructForwardAllArgs",
1024 parameters.
arity(), 1, 1, 1, 1, 2,
1030 static constexpr int kObject = 1;
1031 static constexpr int kFeedbackVector = 1;
1032 static constexpr int kArity =
kObject + kFeedbackVector;
1037 kArity, 1, 1, 1, 1, 2,
1044 static constexpr int kHomeObject = 1;
1045 static constexpr int kFeedbackVector = 1;
1046 static constexpr int kArity =
kReceiver + kHomeObject + kFeedbackVector;
1050 "JSLoadNamedFromSuper",
1051 kArity, 1, 1, 1, 1, 2,
1096 IrOpcode::kJSForInPrepare,
1107 3 + register_count, 1, 1, 0, 1, 0,
1124 "JSGeneratorRestoreRegister",
1136 static constexpr int kObject = 1;
1137 static constexpr int kValue = 1;
1138 static constexpr int kFeedbackVector = 1;
1139 static constexpr int kArity =
kObject +
kValue + kFeedbackVector;
1140 NamedAccess access(language_mode, name, feedback);
1143 "JSSetNamedProperty",
1144 kArity, 1, 1, 0, 1, 2,
1153 "JSSetKeyedProperty",
1163 "JSDefineKeyedOwnProperty",
1170 static constexpr int kObject = 1;
1171 static constexpr int kValue = 1;
1172 static constexpr int kFeedbackVector = 1;
1173 static constexpr int kArity =
kObject +
kValue + kFeedbackVector;
1177 "JSDefineNamedOwnProperty",
1178 kArity, 1, 1, 0, 1, 2,
1192 "JSCreateGeneratorObject",
1199 static constexpr int kFeedbackVector = 1;
1200 static constexpr int kArity = kFeedbackVector;
1205 kArity, 1, 1, 1, 1, 2,
1212 static constexpr int kValue = 1;
1213 static constexpr int kFeedbackVector = 1;
1214 static constexpr int kArity =
kValue + kFeedbackVector;
1219 kArity, 1, 1, 0, 1, 2,
1225 IrOpcode::kJSHasContextExtension,
1227 "JSHasContextExtension",
1236 IrOpcode::kJSLoadContext,
1247 IrOpcode::kJSLoadScriptContext,
1249 "JSLoadScriptContext",
1257 IrOpcode::kJSStoreContext,
1268 IrOpcode::kJSStoreScriptContext,
1270 "JSStoreScriptContext",
1277 IrOpcode::kJSLoadModule,
1286 IrOpcode::kJSGetImportMeta,
1294 IrOpcode::kJSStoreModule,
1304 "JSCreateArguments",
1310 OptionalAllocationSiteRef site) {
1312 int const value_input_count =
static_cast<int>(arity) + 2;
1317 value_input_count, 1, 1, 1, 1, 2,
1325 "JSCreateArrayIterator",
1331 int register_count) {
1333 IrOpcode::kJSCreateAsyncFunctionObject,
1335 "JSCreateAsyncFunctionObject",
1346 "JSCreateCollectionIterator", 1, 1, 1, 1, 1, 0, parameters);
1352 int const value_input_count =
static_cast<int>(arity) + 2;
1356 "JSCreateBoundFunction",
1357 value_input_count, 1, 1, 1, 1, 0,
1364 static constexpr int kFeedbackCell = 1;
1365 static constexpr int kArity = kFeedbackCell;
1370 kArity, 1, 1, 1, 1, 0,
1376 int literal_flags,
int number_of_elements) {
1380 IrOpcode::kJSCreateLiteralArray,
1382 "JSCreateLiteralArray",
1389 static constexpr int kFeedbackVector = 1;
1390 static constexpr int kArity = kFeedbackVector;
1393 IrOpcode::kJSCreateEmptyLiteralArray,
1395 "JSCreateEmptyLiteralArray",
1396 kArity, 1, 1, 1, 1, 0,
1402 IrOpcode::kJSCreateArrayFromIterable,
1404 "JSCreateArrayFromIterable",
1411 int number_of_properties) {
1413 number_of_properties, literal_flags);
1415 IrOpcode::kJSCreateLiteralObject,
1417 "JSCreateLiteralObject",
1427 IrOpcode::kJSGetTemplateObject,
1429 "JSGetTemplateObject",
1435 int literal_flags) {
1438 IrOpcode::kJSCloneObject,
1458 IrOpcode::kJSStackCheck,
1467 IrOpcode::kJSCreateEmptyLiteralObject,
1469 "JSCreateEmptyLiteralObject",
1475 int literal_flags) {
1479 IrOpcode::kJSCreateLiteralRegExp,
1481 "JSCreateLiteralRegExp",
1492 "JSCreateFunctionContext",
1500 "JSCreateCatchContext",
1508 "JSCreateWithContext",
1516 "JSCreateBlockContext",
1522 DCHECK(IrOpcode::kJSCreateBlockContext == op->
opcode() ||
1523 IrOpcode::kJSCreateWithContext == op->
opcode() ||
1524 IrOpcode::kJSCreateCatchContext == op->
opcode());
1529 return lhs.
object().location() == rhs.
object().location();
1535 return reinterpret_cast<size_t>(ref.
object().location());
1542#undef CACHED_OP_LIST
static V8_EXPORT_PRIVATE const Function * FunctionForId(FunctionId id)
static TNode UncheckedCast(compiler::Node *node)
uint32_t start_index() const
ConvertReceiverMode convert_mode() const
CallFeedbackRelation feedback_relation() const
CallFrequency const & frequency() const
SpeculationMode speculation_mode() const
Runtime::FunctionId id() const
FeedbackSource const & feedback() const
uint32_t start_index() const
FeedbackSource const & feedback() const
CallFrequency const & frequency() const
ContextAccess(size_t depth, size_t index, bool immutable)
IterationKind kind() const
OptionalAllocationSiteRef const site_
const SharedFunctionInfoRef shared_info_
AllocationType allocation() const
IterationKind iteration_kind() const
CollectionKind collection_kind() const
ScopeType scope_type() const
const ScopeInfoRef scope_info_
const HeapObjectRef constant_
FeedbackSource const & feedback() const
FeedbackSource const & feedback() const
FeedbackSource const & feedback() const
const FeedbackSource & feedback() const
FeedbackSource const & callFeedback() const
FeedbackSource const & loadFeedback() const
const SharedFunctionInfoRef shared_
const TemplateObjectDescriptionRef description_
FeedbackSource const & feedback() const
static constexpr int ArityForArgc(int parameters)
FeedbackCellRef GetFeedbackCellRefChecked(JSHeapBroker *broker) const
const Operator * CreateBoundFunction(size_t arity, MapRef map)
const Operator * DefineKeyedOwnProperty(LanguageMode language_mode, FeedbackSource const &feedback)
const Operator * LoadScriptContext(size_t depth, size_t index)
const Operator * StackCheck(StackCheckKind kind)
const Operator * CallForwardVarargs(size_t arity, uint32_t start_index)
const Operator * DefineKeyedOwnPropertyInLiteral(const FeedbackSource &feedback)
const Operator * SetNamedProperty(LanguageMode language_mode, NameRef name, FeedbackSource const &feedback)
const Operator * Construct(uint32_t arity, CallFrequency const &frequency=CallFrequency(), FeedbackSource const &feedback=FeedbackSource())
const Operator * CallRuntime(Runtime::FunctionId id)
const Operator * CreateLiteralObject(ObjectBoilerplateDescriptionRef constant, FeedbackSource const &feedback, int literal_flags, int number_of_properties)
const Operator * DefineNamedOwnProperty(NameRef name, FeedbackSource const &feedback)
const Operator * CreateBlockContext(ScopeInfoRef scpope_info)
const Operator * Call(size_t arity, CallFrequency const &frequency=CallFrequency(), FeedbackSource const &feedback=FeedbackSource(), ConvertReceiverMode convert_mode=ConvertReceiverMode::kAny, SpeculationMode speculation_mode=SpeculationMode::kDisallowSpeculation, CallFeedbackRelation feedback_relation=CallFeedbackRelation::kUnrelated)
const Operator * GetImportMeta()
const Operator * StoreGlobal(LanguageMode language_mode, NameRef name, const FeedbackSource &feedback)
const Operator * StoreInArrayLiteral(const FeedbackSource &feedback)
const Operator * StoreContext(size_t depth, size_t index)
const Operator * HasProperty(FeedbackSource const &feedback)
const Operator * LoadNamed(NameRef name, FeedbackSource const &feedback)
const Operator * GetTemplateObject(TemplateObjectDescriptionRef description, SharedFunctionInfoRef shared, FeedbackSource const &feedback)
const Operator * ConstructWithArrayLike(CallFrequency const &frequency, FeedbackSource const &feedback)
const Operator * CreateGeneratorObject()
const Operator * CreateWithContext(ScopeInfoRef scope_info)
const Operator * CreateAsyncFunctionObject(int register_count)
const Operator * CallWithSpread(uint32_t arity, CallFrequency const &frequency=CallFrequency(), FeedbackSource const &feedback=FeedbackSource(), SpeculationMode speculation_mode=SpeculationMode::kDisallowSpeculation, CallFeedbackRelation feedback_relation=CallFeedbackRelation::kTarget)
const Operator * CreateEmptyLiteralArray(FeedbackSource const &feedback)
const Operator * CreateArray(size_t arity, OptionalAllocationSiteRef site)
const Operator * ForInNext(ForInMode mode, const FeedbackSource &feedback)
const Operator * CreateCatchContext(ScopeInfoRef scope_info)
const Operator * CreateArrayFromIterable()
const Operator * CreateArrayIterator(IterationKind)
const Operator * CreateFunctionContext(ScopeInfoRef scope_info, int slot_count, ScopeType scope_type)
const Operator * CreateLiteralArray(ArrayBoilerplateDescriptionRef constant, FeedbackSource const &feedback, int literal_flags, int number_of_elements)
const Operator * StoreModule(int32_t cell_index)
const Operator * LoadModule(int32_t cell_index)
const Operator * CreateEmptyLiteralObject()
const Operator * ConstructForwardAllArgs(CallFrequency const &frequency=CallFrequency(), FeedbackSource const &feedback=FeedbackSource())
const Operator * SetKeyedProperty(LanguageMode language_mode, FeedbackSource const &feedback)
const Operator * GetIterator(FeedbackSource const &load_feedback, FeedbackSource const &call_feedback)
const Operator * CreateCollectionIterator(CollectionKind, IterationKind)
const Operator * HasContextExtension(size_t depth)
const Operator * ConstructWithSpread(uint32_t arity, CallFrequency const &frequency=CallFrequency(), FeedbackSource const &feedback=FeedbackSource())
const Operator * CreateArguments(CreateArgumentsType type)
const Operator * DeleteProperty()
const Operator * ConstructForwardVarargs(size_t arity, uint32_t start_index)
const Operator * StoreScriptContext(size_t depth, size_t index)
JSOperatorBuilder(Zone *zone)
const Operator * ForInPrepare(ForInMode mode, const FeedbackSource &feedback)
const Operator * LoadContext(size_t depth, size_t index, bool immutable)
const Operator * LoadProperty(FeedbackSource const &feedback)
const Operator * CloneObject(FeedbackSource const &feedback, int literal_flags)
const Operator * GeneratorStore(int value_count)
const Operator * LoadNamedFromSuper(NameRef name, FeedbackSource const &feedback)
const Operator * CreateClosure(SharedFunctionInfoRef shared_info, CodeRef code, AllocationType allocation=AllocationType::kYoung)
const Operator * CreateLiteralRegExp(StringRef constant_pattern, FeedbackSource const &feedback, int literal_flags)
const Operator * LoadGlobal(NameRef name, const FeedbackSource &feedback, TypeofMode typeof_mode=TypeofMode::kNotInside)
const Operator * CallWithArrayLike(CallFrequency const &frequency, const FeedbackSource &feedback=FeedbackSource{}, SpeculationMode speculation_mode=SpeculationMode::kDisallowSpeculation, CallFeedbackRelation feedback_relation=CallFeedbackRelation::kTarget)
const Operator * GeneratorRestoreRegister(int index)
static constexpr bool IsUnaryWithFeedback(Operator::Opcode opcode)
static constexpr bool IsBinaryWithFeedback(Operator::Opcode opcode)
TypeofMode typeof_mode() const
const FeedbackSource & feedback() const
LanguageMode language_mode() const
FeedbackSource const & feedback() const
base::Flags< Property, uint8_t > Properties
constexpr Opcode opcode() const
LanguageMode language_mode() const
FeedbackSource const & feedback() const
IndirectHandle< ScopeInfo > object() const
FeedbackSource const & feedback() const
LanguageMode language_mode() const
const WasmModule * module() const
#define CACHED_OP_LIST(V)
#define CACHED_OP(Name, properties, value_input_count, value_output_count)
#define UNARY_OP(JSName, Name)
#define BINARY_OP(JSName, Name)
#define JS_BINOP_WITH_FEEDBACK(V)
#define JS_UNOP_WITH_FEEDBACK(V)
#define DEFINE_LAZY_LEAKY_OBJECT_GETTER(T, FunctionName,...)
V8_INLINE size_t hash_combine(size_t seed, size_t hash)
TNode< Oddball > UndefinedConstant(JSGraph *jsgraph)
const CreateArrayIteratorParameters & CreateArrayIteratorParametersOf(const Operator *op)
@ kUseEnumCacheKeysAndIndices
const CallRuntimeParameters & CallRuntimeParametersOf(const Operator *op)
NamedAccess const & NamedAccessOf(const Operator *op)
const StoreGlobalParameters & StoreGlobalParametersOf(const Operator *op)
DefineNamedOwnPropertyParameters const & DefineNamedOwnPropertyParametersOf(const Operator *op)
ForInParameters const & ForInParametersOf(const Operator *op)
CallForwardVarargsParameters const & CallForwardVarargsParametersOf(Operator const *op)
const GetTemplateObjectParameters & GetTemplateObjectParametersOf(const Operator *op)
const CreateBoundFunctionParameters & CreateBoundFunctionParametersOf(const Operator *op)
const CreateClosureParameters & CreateClosureParametersOf(const Operator *op)
const CreateLiteralParameters & CreateLiteralParametersOf(const Operator *op)
int RestoreRegisterIndexOf(const Operator *op)
const CallParameters & CallParametersOf(const Operator *op)
ConstructParameters const & ConstructParametersOf(Operator const *op)
ScopeInfoRef ScopeInfoOf(const Operator *op)
ConstructForwardVarargsParameters const & ConstructForwardVarargsParametersOf(Operator const *op)
size_t hash_value(const BranchParameters &p)
const CreateCollectionIteratorParameters & CreateCollectionIteratorParametersOf(const Operator *op)
T const & OpParameter(const Operator *op)
const LoadGlobalParameters & LoadGlobalParametersOf(const Operator *op)
CreateFunctionContextParameters const & CreateFunctionContextParametersOf(Operator const *op)
bool operator!=(DeoptimizeParameters lhs, DeoptimizeParameters rhs)
bool operator==(const BranchParameters &lhs, const BranchParameters &rhs)
const CreateArrayParameters & CreateArrayParametersOf(const Operator *op)
FeedbackParameter const & FeedbackParameterOf(const Operator *op)
CreateArgumentsType const & CreateArgumentsTypeOf(const Operator *op)
std::ostream & operator<<(std::ostream &os, AccessMode access_mode)
int RegisterCountOf(Operator const *op)
ContextAccess const & ContextAccessOf(Operator const *op)
PropertyAccess const & PropertyAccessOf(const Operator *op)
GetIteratorParameters const & GetIteratorParametersOf(const Operator *op)
int GeneratorStoreValueCountOf(const Operator *op)
ref_traits< T >::ref_type MakeRef(JSHeapBroker *broker, Tagged< T > object)
const CloneObjectParameters & CloneObjectParametersOf(const Operator *op)
too high values may cause the compiler to set high thresholds for inlining to as much as possible avoid inlined allocation of objects that cannot escape trace load stores from virtual maglev objects use TurboFan fast string builder analyze liveness of environment slots and zap dead values trace TurboFan load elimination emit data about basic block usage in builtins to this enable builtin reordering when run mksnapshot flag for emit warnings when applying builtin profile data verify register allocation in TurboFan randomly schedule instructions to stress dependency tracking enable store store elimination in TurboFan rewrite far to near simulate GC compiler thread race related to allow float parameters to be passed in simulator mode JS Wasm Run additional turbo_optimize_inlined_js_wasm_wrappers enable experimental feedback collection in generic lowering enable Turboshaft s WasmLoadElimination enable Turboshaft s low level load elimination for JS enable Turboshaft s escape analysis for string concatenation use enable Turbolev features that we want to ship in the not too far future trace individual Turboshaft reduction steps trace intermediate Turboshaft reduction steps invocation count threshold for early optimization Enables optimizations which favor memory size over execution speed Enables sampling allocation profiler with X as a sample interval min size of a semi the new space consists of two semi spaces max size of the Collect garbage after Collect garbage after keeps maps alive for< n > old space garbage collections print one detailed trace line in allocation gc speed threshold for starting incremental marking via a task in percent of available threshold for starting incremental marking immediately in percent of available Use a single schedule for determining a marking schedule between JS and C objects schedules the minor GC task with kUserVisible priority max worker number of concurrent for NumberOfWorkerThreads start background threads that allocate memory concurrent_array_buffer_sweeping use parallel threads to clear weak refs in the atomic pause trace progress of the incremental marking trace object counts and memory usage report a tick only when allocated zone memory changes by this amount TracingFlags::gc_stats TracingFlags::gc_stats track native contexts that are expected to be garbage collected verify heap pointers before and after GC memory reducer runs GC with ReduceMemoryFootprint flag Maximum number of memory reducer GCs scheduled Old gen GC speed is computed directly from gc tracer counters Perform compaction on full GCs based on V8 s default heuristics Perform compaction on every full GC Perform code space compaction when finalizing a full GC with stack Stress GC compaction to flush out bugs with moving objects flush of baseline code when it has not been executed recently Use time base code flushing instead of age Use a progress bar to scan large objects in increments when incremental marking is active force incremental marking for small heaps and run it more often force marking at random points between and force scavenge at random points between and reclaim otherwise unreachable unmodified wrapper objects when possible less compaction in non memory reducing mode use high priority threads for concurrent Marking Test mode only flag It allows an unit test to select evacuation candidates use incremental marking for CppHeap cppheap_concurrent_marking c value for membalancer A special constant to balance between memory and space tradeoff The smaller the more memory it uses enable use of SSE4 instructions if available enable use of AVX VNNI instructions if available enable use of POPCNT instruction if available force all emitted branches to be in long mode(MIPS/PPC only)") DEFINE_BOOL(partial_constant_pool
static constexpr Address kNullAddress
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)