5#ifndef V8_COMPILER_COMMON_OPERATOR_H_
6#define V8_COMPILER_COMMON_OPERATOR_H_
31struct CommonOperatorGlobalCache;
59#if V8_ENABLE_WEBASSEMBLY
60enum class TrapId : int32_t {
61#define DEF_ENUM(Name, ...) \
62 k##Name = static_cast<uint32_t>(Builtin::kThrowWasm##Name),
67static_assert(std::is_same_v<std::underlying_type_t<Builtin>,
68 std::underlying_type_t<TrapId>>);
70inline size_t hash_value(TrapId
id) {
return static_cast<uint32_t
>(id); }
72std::ostream&
operator<<(std::ostream&, TrapId trap_id);
74TrapId TrapIdOf(
const Operator*
const op);
98std::ostream&
operator<<(std::ostream&,
const BranchParameters& p);
109 const char* file,
int line)
232std::ostream&
operator<<(std::ostream&, ObjectStateInfo
const&);
236 : std::pair<uint32_t, const ZoneVector<MachineType>*> {
244std::ostream&
operator<<(std::ostream&, TypedObjectStateInfo
const&);
245size_t hash_value(TypedObjectStateInfo
const& p);
564 const Operator* StaticAssert(
const char* source);
570 const std::optional<Type>& override_output_type);
571 const Operator* End(
size_t control_input_count);
581 const Operator* Switch(
size_t control_output_count);
582 const Operator* IfValue(int32_t value, int32_t order = 0,
593 const char* condition_string,
const char* file,
596#if V8_ENABLE_WEBASSEMBLY
597 const Operator* TrapIf(TrapId trap_id,
bool has_frame_state);
598 const Operator* TrapUnless(TrapId trap_id,
bool has_frame_state);
600 const Operator* Return(
int value_input_count = 1);
603 const Operator* Start(
int value_output_count);
604 const Operator* Loop(
int control_input_count);
605 const Operator* Merge(
int control_input_count);
606 const Operator* Parameter(
int index,
const char* debug_name =
nullptr);
608 const Operator* OsrValue(
int index);
610 const Operator* Int32Constant(int32_t);
611 const Operator* Int64Constant(int64_t);
612 const Operator* TaggedIndexConstant(int32_t value);
613 const Operator* Float32Constant(
float);
614 const Operator* Float64Constant(
double);
617 const Operator* PointerConstant(intptr_t);
623 const Operator* RelocatableInt32Constant(int32_t value,
625 const Operator* RelocatableInt64Constant(int64_t value,
632 int value_input_count);
633 const Operator* EffectPhi(
int effect_input_count);
634 const Operator* InductionVariablePhi(
int value_input_count);
645 const Operator* ArgumentsLengthState();
646 const Operator* ObjectState(uint32_t object_id,
int pointer_slots);
647 const Operator* TypedObjectState(uint32_t object_id,
654 const Operator* Projection(
size_t index);
670#if V8_ENABLE_WEBASSEMBLY
703#define DEFINE_INPUT_ACCESSORS(Name, name, TheIndex, Type) \
704 static constexpr int Name##Index() { return TheIndex; } \
705 TNode<Type> name() const { \
706 return TNode<Type>::UncheckedCast( \
707 NodeProperties::GetValueInput(node(), TheIndex)); \
717 DCHECK_EQ(node->opcode(), IrOpcode::kFrameState);
735 DCHECK(n->opcode() == IrOpcode::kStateValues ||
736 n->opcode() == IrOpcode::kTypedStateValues ||
737 n->opcode() == IrOpcode::kDeadValue);
742 DCHECK(n->opcode() == IrOpcode::kStateValues ||
743 n->opcode() == IrOpcode::kTypedStateValues);
757 result->opcode() == IrOpcode::kStart ||
758 result->opcode() == IrOpcode::kDeadValue);
766 DCHECK_EQ(IrOpcode::kStart, node->opcode());
778 constexpr int kClosure = 1;
779 constexpr int kNewTarget = 1;
780 constexpr int kArgCount = 1;
781 constexpr int kDispatchHandle =
783 constexpr int kContext = 1;
784 static_assert(kClosure + kNewTarget + kArgCount + kDispatchHandle +
792#ifdef V8_JS_LINKAGE_INCLUDES_DISPATCH_HANDLE
793 DCHECK_EQ(argc + 2, Linkage::GetJSCallDispatchHandleParamIndex(argc));
798 return argc + kClosure + kNewTarget + kArgCount + kDispatchHandle +
824#ifdef V8_JS_LINKAGE_INCLUDES_DISPATCH_HANDLE
825 int DispatchHandleOutputIndex()
const {
847 return node()->
op()->ValueOutputCount() - 2;
873#undef DEFINE_INPUT_ACCESSORS
#define Assert(condition)
BranchSemantics semantics() const
const char * condition_string_
const BranchSemantics semantics_
AssertParameters(BranchSemantics semantics, const char *condition_string, const char *file, int line)
const char * condition_string() const
const char * file() const
BranchParameters(BranchSemantics semantics, BranchHint hint)
BranchSemantics semantics() const
const BranchSemantics semantics_
constexpr CommonNodeWrapperBase(Node *node)
const Operator * LoopExitEffect()
const Operator * Retain()
const Operator * IfFalse()
const Operator * IfTrue()
CommonOperatorBuilder & operator=(const CommonOperatorBuilder &)=delete
const Operator * LoopExit()
const Operator * Unreachable()
const Operator * Terminate()
const CommonOperatorGlobalCache & cache_
const Operator * Checkpoint()
const Operator * IfException()
const Operator * FinishRegion()
CommonOperatorBuilder(const CommonOperatorBuilder &)=delete
const Operator * IfSuccess()
DeoptimizeReason reason() const
FeedbackSource const feedback_
DeoptimizeParameters(DeoptimizeReason reason, FeedbackSource const &feedback)
DeoptimizeReason const reason_
const FeedbackSource & feedback() const
const MachineRepresentation output_representation_
ExitMachineGraphParameters(MachineRepresentation output_representation, Type output_type)
const Type & output_type() const
MachineRepresentation output_representation() const
Node * outer_frame_state() const
static constexpr int kFrameStateLocalsInput
static constexpr int kFrameStateInputCount
constexpr FrameState(Node *node)
static constexpr int kFrameStateContextInput
const FrameStateInfo & frame_state_info() const
static constexpr int kFrameStateParametersInput
Node * parameters() const
static constexpr int kFrameStateFunctionInput
static constexpr int kFrameStateOuterStateInput
static constexpr int kFrameStateStackInput
IfValueParameters(int32_t value, int32_t comparison_order, BranchHint hint=BranchHint::kNone)
int32_t comparison_order() const
int32_t comparison_order_
static constexpr int GetJSCallNewTargetParamIndex(int parameter_count)
static constexpr int GetJSCallContextParamIndex(int parameter_count)
static constexpr int GetJSCallArgCountParamIndex(int parameter_count)
static constexpr int kJSCallClosureParamIndex
static Node * GetEffectInput(Node *node, int index=0)
static Node * GetControlInput(Node *node, int index=0)
const Operator * op() const
Node * InputAt(int index) const
const char * debug_name() const
ParameterInfo(int index, const char *debug_name)
static constexpr int kMinIndex
RelocInfo::Mode rmode() const
RelocatablePtrConstantInfo(int64_t value, RelocInfo::Mode rmode)
RelocatablePtrConstantInfo(int32_t value, RelocInfo::Mode rmode)
const Operator * semantics_
const std::optional< Type > & override_output_type() const
const Operator * semantics() const
SLVerifierHintParameters(const Operator *semantics, std::optional< Type > override_output_type)
std::optional< Type > override_output_type_
MachineRepresentation representation() const
SelectParameters(MachineRepresentation representation, BranchHint hint=BranchHint::kNone, BranchSemantics semantics=BranchSemantics::kUnspecified)
const BranchSemantics semantics_
BranchSemantics semantics() const
const MachineRepresentation representation_
int ArgCountOutputIndex() const
int ContextParameterIndex() const
static constexpr int kExtraOutputCount
int NewTargetParameterIndex() const
int ContextOutputIndex() const
int ArgCountParameterIndex() const
constexpr StartNode(Node *node)
int NewTargetOutputIndex() const
static constexpr int OutputArityForFormalParameterCount(int argc)
int FormalParameterCountWithoutReceiver() const
int LastParameterIndex_MaybeNonStandardLayout() const
int LastOutputIndex() const
static constexpr int kReceiverOutputCount
int ContextParameterIndex_MaybeNonStandardLayout() const
int FormalParameterCount() const
ZoneVector< MachineType > const * machine_types_
SparseInputMask sparse_input_mask_
TypedStateValueInfo(ZoneVector< MachineType > const *machine_types, SparseInputMask sparse_input_mask)
SparseInputMask sparse_input_mask() const
ZoneVector< MachineType > const * machine_types() const
#define FOREACH_WASM_TRAPREASON(V)
#define V8_JS_LINKAGE_INCLUDES_DISPATCH_HANDLE_BOOL
ZoneVector< RpoNumber > & result
uint32_t ObjectIdOf(Operator const *op)
const BranchParameters & BranchParametersOf(const Operator *const op)
IfValueParameters const & IfValueParametersOf(const Operator *op)
RegionObservability RegionObservabilityOf(Operator const *op)
ZoneVector< MachineType > const * MachineTypesOf(Operator const *op)
size_t ProjectionIndexOf(const Operator *const op)
int ValueInputCountOfReturn(Operator const *const op)
ArgumentsStateType ArgumentsStateTypeOf(Operator const *op)
NumberConstant(std::numeric_limits< double >::quiet_NaN())) DEFINE_GETTER(EmptyStateValues
BranchHint BranchHintOf(const Operator *const op)
Handle< HeapObject > HeapConstantOf(const Operator *op)
const AssertParameters & AssertParametersOf(const Operator *const op)
const char * StaticAssertSourceOf(const Operator *op)
CallDescriptor const * CallDescriptorOf(const Operator *const op)
int ParameterIndexOf(const Operator *const op)
BranchHint NegateBranchHint(BranchHint hint)
const ParameterInfo & ParameterInfoOf(const Operator *const op)
const FrameStateInfo & FrameStateInfoOf(const Operator *op)
size_t hast_value(DeoptimizeParameters p)
DeoptimizeParameters const & DeoptimizeParametersOf(Operator const *const op)
Type TypeGuardTypeOf(Operator const *op)
size_t hash_value(const BranchParameters &p)
SelectParameters const & SelectParametersOf(const Operator *const op)
const SLVerifierHintParameters & SLVerifierHintParametersOf(const Operator *op)
bool operator!=(DeoptimizeParameters lhs, DeoptimizeParameters rhs)
bool operator==(const BranchParameters &lhs, const BranchParameters &rhs)
std::ostream & operator<<(std::ostream &os, AccessMode access_mode)
const ExitMachineGraphParameters & ExitMachineGraphParametersOf(const Operator *op)
MachineRepresentation LoopExitValueRepresentationOf(const Operator *const op)
SparseInputMask SparseInputMaskOf(Operator const *op)
MachineRepresentation PhiRepresentationOf(const Operator *const op)
MachineRepresentation DeadValueRepresentationOf(Operator const *op)
int OsrValueIndexOf(Operator const *op)
constexpr int kBitsPerByte
std::ostream & operator<<(std::ostream &os, AtomicMemoryOrder order)
#define NON_EXPORTED_BASE(code)
#define DCHECK_LE(v1, v2)
#define DCHECK_GE(v1, v2)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
#define V8_EXPORT_PRIVATE
uint32_t object_id() const
ObjectStateInfo(uint32_t object_id, int size)
uint32_t object_id() const
const ZoneVector< MachineType > * machine_types() const
TypedObjectStateInfo(uint32_t object_id, const ZoneVector< MachineType > *machine_types)
#define V8_WARN_UNUSED_RESULT