5#ifndef V8_COMPILER_JS_OPERATOR_H_
6#define V8_COMPILER_JS_OPERATOR_H_
21#if DEBUG && V8_ENABLE_WEBASSEMBLY
29class ObjectBoilerplateDescription;
30class ArrayBoilerplateDescription;
32class SharedFunctionInfo;
43struct JSOperatorGlobalCache;
46#define JS_UNOP_WITH_FEEDBACK(V) \
47 JS_BITWISE_UNOP_LIST(V) \
50#define JS_BINOP_WITH_FEEDBACK(V) \
51 JS_ARITH_BINOP_LIST(V) \
52 JS_BITWISE_BINOP_LIST(V) \
53 JS_COMPARE_BINOP_LIST(V) \
54 V(JSInstanceOf, InstanceOf)
60#define CASE(Name, ...) \
61 case IrOpcode::k##Name: \
72#define CASE(Name, ...) \
73 case IrOpcode::k##Name: \
90 DCHECK(!std::isnan(value));
133 return !(*
this == that);
213 return !(*
this == that);
318 : id_(id), arity_(arity) {}
321 size_t arity()
const {
return arity_; }
417 friend std::ostream&
operator<<(std::ostream&,
574 OptionalAllocationSiteRef
site()
const {
return site_; }
578 OptionalAllocationSiteRef
const site_;
667 friend std::ostream&
operator<<(std::ostream&,
698 friend std::ostream&
operator<<(std::ostream&,
727 friend std::ostream&
operator<<(std::ostream&,
764 friend std::ostream&
operator<<(std::ostream&,
844#if V8_ENABLE_WEBASSEMBLY
845class JSWasmCallParameters {
854 signature_(signature),
855 function_index_(function_index),
856 shared_fct_info_(shared_fct_info),
858 feedback_(feedback) {
860 DCHECK(wasm::GetTypeCanonicalizer()->Contains(signature));
864 const wasm::CanonicalSig* signature()
const {
return signature_; }
865 int function_index()
const {
return function_index_; }
866 SharedFunctionInfoRef shared_fct_info()
const {
return shared_fct_info_; }
867 wasm::NativeModule* native_module()
const {
return native_module_; }
868 FeedbackSource
const& feedback()
const {
return feedback_; }
870 int arity_without_implicit_args()
const;
873 const wasm::WasmModule*
const module_;
874 const wasm::CanonicalSig*
const signature_;
876 SharedFunctionInfoRef shared_fct_info_;
878 const FeedbackSource feedback_;
881JSWasmCallParameters
const& JSWasmCallParametersOf(
const Operator* op)
884 JSWasmCallParameters
const&);
885size_t hash_value(JSWasmCallParameters
const&);
886bool operator==(JSWasmCallParameters
const&, JSWasmCallParameters
const&);
950 const Operator* CreateArray(
size_t arity, OptionalAllocationSiteRef site);
952 const Operator* CreateAsyncFunctionObject(
int register_count);
967 int literal_flags,
int number_of_elements);
969 const Operator* CreateArrayFromIterable();
970 const Operator* CreateEmptyLiteralObject();
974 int number_of_properties);
985 const Operator* CallForwardVarargs(
size_t arity, uint32_t start_index);
990 SpeculationMode speculation_mode = SpeculationMode::kDisallowSpeculation,
992 CallFeedbackRelation::kUnrelated);
996 SpeculationMode speculation_mode = SpeculationMode::kDisallowSpeculation,
1001 SpeculationMode speculation_mode = SpeculationMode::kDisallowSpeculation,
1011#if V8_ENABLE_WEBASSEMBLY
1014 int wasm_function_index,
1020 const Operator* ConstructForwardVarargs(
size_t arity, uint32_t start_index);
1021 const Operator* Construct(uint32_t arity,
1026 const Operator* ConstructWithSpread(
1029 const Operator* ConstructForwardAllArgs(
1047 const Operator* DefineKeyedOwnPropertyInLiteral(
1059 const Operator* CreateGeneratorObject();
1062 TypeofMode typeof_mode = TypeofMode::kNotInside);
1066 const Operator* HasContextExtension(
size_t depth);
1067 const Operator* LoadContext(
size_t depth,
size_t index,
bool immutable);
1068 const Operator* LoadScriptContext(
size_t depth,
size_t index);
1069 const Operator* StoreContext(
size_t depth,
size_t index);
1070 const Operator* StoreScriptContext(
size_t depth,
size_t index);
1072 const Operator* LoadModule(int32_t cell_index);
1073 const Operator* StoreModule(int32_t cell_index);
1093 const Operator* GeneratorStore(
int value_count);
1100 const Operator* GeneratorRestoreRegister(
int index);
1163#define DEFINE_INPUT_ACCESSORS(Name, name, TheIndex, Type) \
1164 static constexpr int Name##Index() { return TheIndex; } \
1165 TNode<Type> name() const { \
1166 return TNode<Type>::UncheckedCast( \
1167 NodeProperties::GetValueInput(node(), TheIndex)); \
1177 V(Value, value, 0, Object) \
1178 V(FeedbackVector, feedback_vector, 1, HeapObject)
1183#define V(JSName, ...) using JSName##Node = JSUnaryOpNode;
1198 V(Left, left, 0, Object) \
1199 V(Right, right, 1, Object) \
1200 V(FeedbackVector, feedback_vector, 2, HeapObject)
1205#define V(JSName, ...) using JSName##Node = JSBinaryOpNode;
1212 DCHECK_EQ(IrOpcode::kJSGetIterator, node->opcode());
1220 V(Receiver, receiver, 0, Object) \
1221 V(FeedbackVector, feedback_vector, 1, HeapObject)
1229 DCHECK_EQ(IrOpcode::kJSCloneObject, node->opcode());
1237 V(Source, source, 0, Object) \
1238 V(FeedbackVector, feedback_vector, 1, HeapObject)
1247 DCHECK_EQ(IrOpcode::kJSGetTemplateObject, node->opcode());
1254#define INPUTS(V) V(FeedbackVector, feedback_vector, 0, HeapObject)
1263 DCHECK(node->opcode() == IrOpcode::kJSCreateLiteralArray ||
1264 node->opcode() == IrOpcode::kJSCreateLiteralObject ||
1265 node->opcode() == IrOpcode::kJSCreateLiteralRegExp);
1272#define INPUTS(V) V(FeedbackVector, feedback_vector, 0, HeapObject)
1284 DCHECK_EQ(IrOpcode::kJSHasProperty, node->opcode());
1292 V(Object, object, 0, Object) \
1293 V(Key, key, 1, Object) \
1294 V(FeedbackVector, feedback_vector, 2, HeapObject)
1302 DCHECK_EQ(IrOpcode::kJSLoadProperty, node->opcode());
1310 V(Object, object, 0, Object) \
1311 V(Key, key, 1, Object) \
1312 V(FeedbackVector, feedback_vector, 2, HeapObject)
1321 DCHECK_EQ(IrOpcode::kJSSetKeyedProperty, node->opcode());
1329 V(Object, object, 0, Object) \
1330 V(Key, key, 1, Object) \
1331 V(Value, value, 2, Object) \
1332 V(FeedbackVector, feedback_vector, 3, HeapObject)
1341 DCHECK_EQ(IrOpcode::kJSDefineKeyedOwnProperty, node->opcode());
1349 V(Object, object, 0, Object) \
1350 V(Key, key, 1, Object) \
1351 V(Value, value, 2, Object) \
1352 V(Flags, flags, 3, Object) \
1353 V(FeedbackVector, feedback_vector, 4, HeapObject)
1358namespace js_node_wrapper_utils {
1371 V(Target, target, 0, Object) \
1372 V(ReceiverOrNewTarget, receiver_or_new_target, 1, Object)
1404 return ReceiverOrNewTargetIndex() + 1;
1443 return node->opcode() == IrOpcode::kJSCall ||
1444 node->opcode() == IrOpcode::kJSCallWithArrayLike ||
1445 node->opcode() == IrOpcode::kJSCallWithSpread ||
1446 node->opcode() == IrOpcode::kJSConstruct ||
1447 node->opcode() == IrOpcode::kJSConstructWithArrayLike ||
1448 node->opcode() == IrOpcode::kJSConstructWithSpread ||
1449 node->opcode() == IrOpcode::kJSConstructForwardAllArgs
1450#if V8_ENABLE_WEBASSEMBLY
1451 || node->opcode() == IrOpcode::kJSWasmCall
1457template <
int kOpcode>
1459 return opcode == kOpcode;
1462template <
int kOpcode1,
int kOpcode2,
int... kOpcodes>
1464 return opcode == kOpcode1 ||
IsExpectedOpcode<kOpcode2, kOpcodes...>(opcode);
1467template <
int... kOpcodes>
1479 V(Target, target, 0, Object) \
1480 V(Receiver, receiver, 1, Object)
1491 return Parameters().arity_without_implicit_args();
1501#if V8_ENABLE_WEBASSEMBLY
1505 DCHECK_EQ(IrOpcode::kJSWasmCall, node->opcode());
1508 const JSWasmCallParameters& Parameters()
const {
1509 return OpParameter<JSWasmCallParameters>(
node()->op());
1513 V(Target, target, 0, Object) \
1514 V(Receiver, receiver, 1, Object)
1518 static constexpr int kReceiverInputCount = 1;
1519 static_assert(kReceiverInputCount ==
1520 JSCallOrConstructNode::kReceiverOrNewTargetInputCount);
1522 int ArgumentCount()
const override {
1525 return Parameters().arity_without_implicit_args();
1532template <
int kOpcode>
1545 V(Target, target, 0, Object) \
1546 V(NewTarget, new_target, 1, Object)
1557 return Parameters().arity_without_implicit_args();
1572 DCHECK_EQ(IrOpcode::kJSLoadNamed, node->opcode());
1578 V(Object, object, 0, Object) \
1579 V(FeedbackVector, feedback_vector, 1, HeapObject)
1588 DCHECK_EQ(IrOpcode::kJSLoadNamedFromSuper, node->opcode());
1594 V(Receiver, receiver, 0, Object) \
1595 V(HomeObject, home_object, 1, Object) \
1596 V(FeedbackVector, feedback_vector, 2, HeapObject)
1605 DCHECK_EQ(IrOpcode::kJSSetNamedProperty, node->opcode());
1611 V(Object, object, 0, Object) \
1612 V(Value, value, 1, Object) \
1613 V(FeedbackVector, feedback_vector, 2, HeapObject)
1622 DCHECK_EQ(IrOpcode::kJSDefineNamedOwnProperty, node->opcode());
1630 V(Object, object, 0, Object) \
1631 V(Value, value, 1, Object) \
1632 V(FeedbackVector, feedback_vector, 2, HeapObject)
1640 DCHECK_EQ(IrOpcode::kJSStoreGlobal, node->opcode());
1648 V(Value, value, 0, Object) \
1649 V(FeedbackVector, feedback_vector, 1, HeapObject)
1657 DCHECK_EQ(IrOpcode::kJSLoadGlobal, node->opcode());
1664#define INPUTS(V) V(FeedbackVector, feedback_vector, 0, HeapObject)
1673 DCHECK_EQ(IrOpcode::kJSCreateEmptyLiteralArray, node->opcode());
1680#define INPUTS(V) V(FeedbackVector, feedback_vector, 0, HeapObject)
1689 DCHECK_EQ(IrOpcode::kJSDefineKeyedOwnPropertyInLiteral, node->opcode());
1697 V(Object, object, 0, Object) \
1698 V(Name, name, 1, Object) \
1699 V(Value, value, 2, Object) \
1700 V(Flags, flags, 3, Object) \
1701 V(FeedbackVector, feedback_vector, 4, HeapObject)
1710 DCHECK_EQ(IrOpcode::kJSStoreInArrayLiteral, node->opcode());
1718 V(Array, array, 0, Object) \
1719 V(Index, index, 1, Object) \
1720 V(Value, value, 2, Object) \
1721 V(FeedbackVector, feedback_vector, 3, HeapObject)
1729 DCHECK_EQ(IrOpcode::kJSCreateClosure, node->opcode());
1736#define INPUTS(V) V(FeedbackCell, feedback_cell, 0, FeedbackCell)
1746 DCHECK_EQ(IrOpcode::kJSForInPrepare, node->opcode());
1754 V(Enumerator, enumerator, 0, Object) \
1755 V(FeedbackVector, feedback_vector, 1, HeapObject)
1763 DCHECK_EQ(IrOpcode::kJSForInNext, node->opcode());
1771 V(Receiver, receiver, 0, Object) \
1772 V(CacheArray, cache_array, 1, Object) \
1773 V(CacheType, cache_type, 2, Object) \
1774 V(Index, index, 3, Smi) \
1775 V(FeedbackVector, feedback_vector, 4, HeapObject)
1785 DCHECK_EQ(IrOpcode::kJSFindNonDefaultConstructorOrConstruct,
1790 V(ThisFunction, this_function, 0, Object) \
1791 V(NewTarget, new_target, 1, Object)
1796#undef DEFINE_INPUT_ACCESSORS
static constexpr T decode(U value)
static TNode UncheckedCast(compiler::Node *node)
bool operator!=(CallForwardVarargsParameters const &that) const
bool operator==(CallForwardVarargsParameters const &that) const
uint32_t start_index() const
friend size_t hash_value(CallForwardVarargsParameters const &p)
uint32_t const bit_field_
CallForwardVarargsParameters(size_t arity, uint32_t start_index)
bool operator!=(CallFrequency const &that) const
friend size_t hash_value(CallFrequency const &f)
bool operator==(CallFrequency const &that) const
CallFrequency(float value)
static constexpr float kNoFeedbackCallFrequency
static constexpr int kExtraCallInputCount
CallParameters(size_t arity, CallFrequency const &frequency, FeedbackSource const &feedback, ConvertReceiverMode convert_mode, SpeculationMode speculation_mode, CallFeedbackRelation feedback_relation)
ConvertReceiverMode convert_mode() const
CallFrequency const frequency_
bool operator!=(CallParameters const &that) const
bool operator==(CallParameters const &that) const
CallFeedbackRelation feedback_relation() const
CallFrequency const & frequency() const
int arity_without_implicit_args() const
uint32_t const bit_field_
friend size_t hash_value(CallParameters const &p)
FeedbackSource const feedback_
FeedbackSource const & feedback() const
SpeculationMode speculation_mode() const
CallRuntimeParameters(Runtime::FunctionId id, size_t arity)
Runtime::FunctionId id() const
const Runtime::FunctionId id_
FeedbackSource const & feedback() const
CloneObjectParameters(FeedbackSource const &feedback, int flags)
FeedbackSource const feedback_
uint32_t start_index() const
ConstructForwardVarargsParameters(size_t arity, uint32_t start_index)
bool operator==(ConstructForwardVarargsParameters const &that) const
uint32_t const bit_field_
bool operator!=(ConstructForwardVarargsParameters const &that) const
friend size_t hash_value(ConstructForwardVarargsParameters const &p)
CallFrequency const frequency_
FeedbackSource const feedback_
int arity_without_implicit_args() const
ConstructParameters(uint32_t arity, CallFrequency const &frequency, FeedbackSource const &feedback)
static constexpr int kExtraConstructInputCount
FeedbackSource const & feedback() const
CallFrequency const & frequency() const
ContextAccess(size_t depth, size_t index, bool immutable)
IterationKind const kind_
CreateArrayIteratorParameters(IterationKind kind)
IterationKind kind() const
CreateArrayParameters(size_t arity, OptionalAllocationSiteRef site)
OptionalAllocationSiteRef const site_
friend bool operator==(CreateArrayParameters const &, CreateArrayParameters const &)
friend size_t hash_value(CreateArrayParameters const &)
OptionalAllocationSiteRef site() const
friend bool operator!=(CreateArrayParameters const &, CreateArrayParameters const &)
friend std::ostream & operator<<(std::ostream &, CreateArrayParameters const &)
friend bool operator!=(CreateBoundFunctionParameters const &, CreateBoundFunctionParameters const &)
CreateBoundFunctionParameters(size_t arity, MapRef map)
friend std::ostream & operator<<(std::ostream &, CreateBoundFunctionParameters const &)
friend size_t hash_value(CreateBoundFunctionParameters const &)
friend bool operator==(CreateBoundFunctionParameters const &, CreateBoundFunctionParameters const &)
friend bool operator!=(CreateClosureParameters const &, CreateClosureParameters const &)
const SharedFunctionInfoRef shared_info_
friend size_t hash_value(CreateClosureParameters const &)
AllocationType allocation() const
friend std::ostream & operator<<(std::ostream &, CreateClosureParameters const &)
SharedFunctionInfoRef shared_info() const
friend bool operator==(CreateClosureParameters const &, CreateClosureParameters const &)
CreateClosureParameters(SharedFunctionInfoRef shared_info, CodeRef code, AllocationType allocation)
AllocationType const allocation_
IterationKind iteration_kind() const
CollectionKind const collection_kind_
CollectionKind collection_kind() const
IterationKind const iteration_kind_
CreateCollectionIteratorParameters(CollectionKind collection_kind, IterationKind iteration_kind)
friend bool operator!=(CreateFunctionContextParameters const &lhs, CreateFunctionContextParameters const &rhs)
ScopeType scope_type() const
friend bool operator==(CreateFunctionContextParameters const &lhs, CreateFunctionContextParameters const &rhs)
CreateFunctionContextParameters(ScopeInfoRef scope_info, int slot_count, ScopeType scope_type)
ScopeType const scope_type_
friend std::ostream & operator<<(std::ostream &os, CreateFunctionContextParameters const ¶meters)
ScopeInfoRef scope_info() const
const ScopeInfoRef scope_info_
friend size_t hash_value(CreateFunctionContextParameters const ¶meters)
FeedbackSource const feedback_
friend size_t hash_value(CreateLiteralParameters const &)
friend std::ostream & operator<<(std::ostream &, CreateLiteralParameters const &)
const HeapObjectRef constant_
HeapObjectRef constant() const
FeedbackSource const & feedback() const
friend bool operator==(CreateLiteralParameters const &, CreateLiteralParameters const &)
friend bool operator!=(CreateLiteralParameters const &, CreateLiteralParameters const &)
CreateLiteralParameters(HeapObjectRef constant, FeedbackSource const &feedback, int length, int flags)
FeedbackSource const & feedback() const
FeedbackSource const feedback_
friend bool operator!=(DefineNamedOwnPropertyParameters const &, DefineNamedOwnPropertyParameters const &)
friend size_t hash_value(DefineNamedOwnPropertyParameters const &)
friend std::ostream & operator<<(std::ostream &, DefineNamedOwnPropertyParameters const &)
friend bool operator==(DefineNamedOwnPropertyParameters const &, DefineNamedOwnPropertyParameters const &)
DefineNamedOwnPropertyParameters(NameRef name, FeedbackSource const &feedback)
FeedbackSource const feedback_
FeedbackSource const & feedback() const
FeedbackParameter(FeedbackSource const &feedback)
const FeedbackSource feedback_
ForInParameters(const FeedbackSource &feedback, ForInMode mode)
const FeedbackSource & feedback() const
FeedbackSource const call_feedback_
FeedbackSource const & callFeedback() const
FeedbackSource const load_feedback_
GetIteratorParameters(const FeedbackSource &load_feedback, const FeedbackSource &call_feedback)
FeedbackSource const & loadFeedback() const
GetTemplateObjectParameters(TemplateObjectDescriptionRef description, SharedFunctionInfoRef shared, FeedbackSource const &feedback)
friend std::ostream & operator<<(std::ostream &, GetTemplateObjectParameters const &)
SharedFunctionInfoRef shared() const
const SharedFunctionInfoRef shared_
friend bool operator!=(GetTemplateObjectParameters const &, GetTemplateObjectParameters const &)
friend size_t hash_value(GetTemplateObjectParameters const &)
friend bool operator==(GetTemplateObjectParameters const &, GetTemplateObjectParameters const &)
FeedbackSource const feedback_
const TemplateObjectDescriptionRef description_
TemplateObjectDescriptionRef description() const
FeedbackSource const & feedback() const
const FeedbackParameter & Parameters() const
constexpr JSBinaryOpNode(Node *node)
const CallParameters & Parameters() const
constexpr JSCallNodeBase(Node *node)
int ArgumentCount() const override
static constexpr int kReceiverInputCount
TNode< Object > Argument(int i) const
static constexpr int kFeedbackVectorInputCount
static constexpr int ArityForArgc(int parameters)
static constexpr int kReceiverOrNewTargetInputCount
constexpr JSCallOrConstructNode(Node *node)
static constexpr bool kHaveIdenticalLayouts
int LastArgumentIndex() const
TNode< Object > LastArgument() const
int FeedbackVectorIndex() const
static constexpr int kTargetInputCount
static constexpr int FeedbackVectorIndexForArgc(int argc)
TNode< HeapObject > feedback_vector() const
static constexpr int ArgumentIndex(int i)
virtual int ArgumentCount() const =0
static constexpr int FirstArgumentIndex()
TNode< Object > ArgumentOr(int i, TNode< Object > default_value) const
static constexpr bool kFeedbackVectorIsLastInput
TNode< Object > ArgumentOrUndefined(int i, JSGraph *jsgraph) const
static constexpr bool IsValidNode(Node *node)
static constexpr int kExtraInputCount
constexpr JSCloneObjectNode(Node *node)
const CloneObjectParameters & Parameters() const
int ArgumentCount() const
constexpr JSConstructNodeBase(Node *node)
static constexpr int kNewTargetInputCount
const ConstructParameters & Parameters() const
constexpr JSCreateClosureNode(Node *node)
FeedbackCellRef GetFeedbackCellRefChecked(JSHeapBroker *broker) const
const CreateClosureParameters & Parameters() const
const FeedbackParameter & Parameters() const
constexpr JSCreateEmptyLiteralArrayNode(Node *node)
const CreateLiteralParameters & Parameters() const
constexpr JSCreateLiteralOpNode(Node *node)
constexpr JSDefineKeyedOwnPropertyInLiteralNode(Node *node)
const FeedbackParameter & Parameters() const
const PropertyAccess & Parameters() const
constexpr JSDefineKeyedOwnPropertyNode(Node *node)
constexpr JSDefineNamedOwnPropertyNode(Node *node)
const DefineNamedOwnPropertyParameters & Parameters() const
constexpr JSFindNonDefaultConstructorOrConstructNode(Node *node)
const ForInParameters & Parameters() const
constexpr JSForInNextNode(Node *node)
constexpr JSForInPrepareNode(Node *node)
const ForInParameters & Parameters() const
const GetIteratorParameters & Parameters() const
constexpr JSGetIteratorNode(Node *node)
constexpr JSGetTemplateObjectNode(Node *node)
const GetTemplateObjectParameters & Parameters() const
const PropertyAccess & Parameters() const
constexpr JSHasPropertyNode(Node *node)
constexpr JSLoadGlobalNode(Node *node)
const LoadGlobalParameters & Parameters() const
constexpr JSLoadNamedFromSuperNode(Node *node)
const NamedAccess & Parameters() const
const NamedAccess & Parameters() const
constexpr JSLoadNamedNode(Node *node)
const PropertyAccess & Parameters() const
constexpr JSLoadPropertyNode(Node *node)
FrameState frame_state() const
TNode< Object > context() const
constexpr JSNodeWrapperBase(Node *node)
const Operator * StrictEqual(FeedbackSource const &feedback)
const Operator * GreaterThanOrEqual(FeedbackSource const &feedback)
const Operator * ToNumber()
const Operator * ToNumberConvertBigInt()
const Operator * ShiftRightLogical(FeedbackSource const &feedback)
const Operator * Equal(FeedbackSource const &feedback)
const Operator * Create()
const Operator * AsyncFunctionEnter()
const Operator * StoreMessage()
const Operator * ObjectIsArray()
const Operator * RejectPromise()
const Operator * ToLength()
const Operator * ParseInt()
const Operator * GeneratorRestoreContinuation()
const Operator * Increment(FeedbackSource const &feedback)
const Operator * GeneratorRestoreInputOrDebugPos()
const Operator * PerformPromiseThen()
const Operator * ToObject()
const Operator * ShiftRight(FeedbackSource const &feedback)
const Operator * ToName()
const JSOperatorGlobalCache & cache_
const Operator * BitwiseAnd(FeedbackSource const &feedback)
const Operator * ToBigInt()
const Operator * CreateTypedArray()
const Operator * FulfillPromise()
const Operator * RegExpTest()
const Operator * ShiftLeft(FeedbackSource const &feedback)
const Operator * AsyncFunctionResolve()
const Operator * FindNonDefaultConstructorOrConstruct()
const Operator * Negate(FeedbackSource const &feedback)
const Operator * GreaterThan(FeedbackSource const &feedback)
const Operator * Multiply(FeedbackSource const &feedback)
const Operator * LessThan(FeedbackSource const &feedback)
const Operator * CreateKeyValueArray()
const Operator * GetSuperConstructor()
const Operator * Decrement(FeedbackSource const &feedback)
const Operator * Modulus(FeedbackSource const &feedback)
const Operator * GeneratorRestoreContext()
const Operator * LoadMessage()
const Operator * LessThanOrEqual(FeedbackSource const &feedback)
const Operator * Divide(FeedbackSource const &feedback)
const Operator * BitwiseOr(FeedbackSource const &feedback)
const Operator * InstanceOf(const FeedbackSource &feedback)
const Operator * Exponentiate(FeedbackSource const &feedback)
const Operator * CreatePromise()
const Operator * CreateObject()
const Operator * AsyncFunctionReject()
const Operator * BitwiseXor(FeedbackSource const &feedback)
const Operator * ResolvePromise()
const Operator * ToBigIntConvertNumber()
const Operator * BitwiseNot(FeedbackSource const &feedback)
const Operator * Add(FeedbackSource const &feedback)
JSOperatorBuilder(const JSOperatorBuilder &)=delete
const Operator * CreateIterResultObject()
const Operator * OrdinaryHasInstance()
const Operator * CreateStringIterator()
const Operator * Subtract(FeedbackSource const &feedback)
const Operator * ToNumeric()
const Operator * CreateStringWrapper()
const Operator * ForInEnumerate()
const Operator * PromiseResolve()
const Operator * HasInPrototypeChain()
const Operator * Debugger()
const Operator * ToString()
JSOperatorBuilder & operator=(const JSOperatorBuilder &)=delete
static constexpr bool IsUnaryWithFeedback(Operator::Opcode opcode)
static constexpr bool IsBinaryWithFeedback(Operator::Opcode opcode)
const PropertyAccess & Parameters() const
constexpr JSSetKeyedPropertyNode(Node *node)
constexpr JSSetNamedPropertyNode(Node *node)
const NamedAccess & Parameters() const
const StoreGlobalParameters & Parameters() const
constexpr JSStoreGlobalNode(Node *node)
constexpr JSStoreInArrayLiteralNode(Node *node)
const FeedbackParameter & Parameters() const
constexpr JSUnaryOpNode(Node *node)
const TypeofMode typeof_mode_
TypeofMode typeof_mode() const
friend size_t hash_value(LoadGlobalParameters const &)
friend std::ostream & operator<<(std::ostream &, LoadGlobalParameters const &)
friend bool operator==(LoadGlobalParameters const &, LoadGlobalParameters const &)
const FeedbackSource feedback_
const FeedbackSource & feedback() const
friend bool operator!=(LoadGlobalParameters const &, LoadGlobalParameters const &)
LoadGlobalParameters(NameRef name, const FeedbackSource &feedback, TypeofMode typeof_mode)
friend size_t hash_value(NamedAccess const &)
NamedAccess(LanguageMode language_mode, NameRef name, FeedbackSource const &feedback)
LanguageMode const language_mode_
friend std::ostream & operator<<(std::ostream &, NamedAccess const &)
LanguageMode language_mode() const
FeedbackSource const & feedback() const
friend bool operator==(NamedAccess const &, NamedAccess const &)
FeedbackSource const feedback_
friend bool operator!=(NamedAccess const &, NamedAccess const &)
static Node * GetEffectInput(Node *node, int index=0)
static Node * GetContextInput(Node *node)
static Node * GetFrameStateInput(Node *node)
static Node * GetValueInput(Node *node, int index)
static Node * GetControlInput(Node *node, int index=0)
PropertyAccess(LanguageMode language_mode, FeedbackSource const &feedback)
LanguageMode language_mode() const
LanguageMode const language_mode_
FeedbackSource const & feedback() const
FeedbackSource const feedback_
FeedbackSource const & feedback() const
LanguageMode const language_mode_
friend size_t hash_value(StoreGlobalParameters const &)
friend bool operator==(StoreGlobalParameters const &, StoreGlobalParameters const &)
StoreGlobalParameters(LanguageMode language_mode, const FeedbackSource &feedback, NameRef name)
FeedbackSource const feedback_
friend std::ostream & operator<<(std::ostream &, StoreGlobalParameters const &)
friend bool operator!=(StoreGlobalParameters const &, StoreGlobalParameters const &)
LanguageMode language_mode() const
#define DEFINE_INPUT_ACCESSORS(Name, name, TheIndex, Type)
#define JS_BINOP_WITH_FEEDBACK(V)
#define JS_UNOP_WITH_FEEDBACK(V)
std::shared_ptr< NativeModule > native_module_
V8_INLINE size_t hash_combine(size_t seed, size_t hash)
V8_INLINE Dest bit_cast(Source const &source)
TNode< Oddball > UndefinedConstant(JSGraph *jsgraph)
constexpr size_t input_count()
const CreateArrayIteratorParameters & CreateArrayIteratorParametersOf(const Operator *op)
bool IsExpectedOpcode(int opcode)
@ 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)
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)
const CloneObjectParameters & CloneObjectParametersOf(const Operator *op)
#define NON_EXPORTED_BASE(code)
#define DCHECK_NOT_NULL(val)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK_GE(v1, v2)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_EQ(v1, v2)
#define DCHECK_GT(v1, v2)
#define V8_EXPORT_PRIVATE
#define V8_WARN_UNUSED_RESULT
const wasm::WasmModule * module_