40 return os <<
"Machine";
42 return os <<
"Unspecified";
47#if V8_ENABLE_WEBASSEMBLY
48std::ostream&
operator<<(std::ostream& os, TrapId trap_id) {
50#define TRAP_CASE(Name) \
51 case TrapId::k##Name: \
59TrapId TrapIdOf(
const Operator*
const op) {
60 DCHECK(op->opcode() == IrOpcode::kTrapIf ||
61 op->opcode() == IrOpcode::kTrapUnless);
85 case IrOpcode::kIfValue:
87 case IrOpcode::kIfDefault:
91 case IrOpcode::kBranch:
135 return !(lhs == rhs);
149 op->
opcode() == IrOpcode::kDeoptimizeIf ||
150 op->
opcode() == IrOpcode::kDeoptimizeUnless);
161 return !(lhs == rhs);
182 op->
opcode() == IrOpcode::kTailCall);
220 return !(lhs == rhs);
229 if (
i.debug_name()) os <<
", debug name: " <<
i.debug_name();
234 return os <<
"id:" <<
i.object_id() <<
", size:" <<
i.
size();
242 return os <<
"id:" <<
i.object_id() <<
", " <<
i.machine_types();
257 return !(lhs == rhs);
266 return os << p.
value() <<
", " <<
static_cast<int>(p.
rmode()) <<
", "
272 : bit_mask_(bit_mask),
parent_(parent), real_index_(0) {
296 DCHECK(IsReal() || IsEnd());
302 return parent_->InputAt(real_index_);
313 real_index_ >=
parent_->InputCount());
332 return !(lhs == rhs);
341 return os <<
"dense";
368 return !(lhs == rhs);
380 return static_cast<size_t>(observability);
384 switch (observability) {
386 return os <<
"observable";
388 return os <<
"not-observable";
424 op->
opcode() == IrOpcode::kTypedStateValues);
426 if (op->
opcode() == IrOpcode::kTypedStateValues) {
434 op->
opcode() == IrOpcode::kTypedStateValues);
436 if (op->
opcode() == IrOpcode::kTypedStateValues) {
444 return l.value() ==
r.value() &&
445 l.comparison_order() ==
r.comparison_order() && l.hint() ==
r.hint();
466 return p1.semantics() ==
p2.semantics() &&
467 p1.override_output_type() ==
p2.override_output_type();
518#define COMMON_CACHED_OP_LIST(V) \
519 V(Plug, Operator::kNoProperties, 0, 0, 0, 1, 0, 0) \
520 V(Dead, Operator::kFoldable, 0, 0, 0, 1, 1, 1) \
521 V(Unreachable, Operator::kFoldable, 0, 1, 1, 1, 1, 0) \
522 V(IfTrue, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \
523 V(IfFalse, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \
524 V(IfSuccess, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \
525 V(IfException, Operator::kKontrol, 0, 1, 1, 1, 1, 1) \
526 V(Throw, Operator::kKontrol, 0, 1, 1, 0, 0, 1) \
527 V(Terminate, Operator::kKontrol, 0, 1, 1, 0, 0, 1) \
528 V(LoopExit, Operator::kKontrol, 0, 0, 2, 0, 0, 1) \
529 V(LoopExitEffect, Operator::kNoThrow, 0, 1, 1, 0, 1, 0) \
530 V(Checkpoint, Operator::kKontrol, 0, 1, 1, 0, 1, 0) \
531 V(FinishRegion, Operator::kKontrol, 1, 1, 0, 1, 1, 0) \
532 V(Retain, Operator::kKontrol, 1, 1, 0, 0, 1, 0)
534#define CACHED_LOOP_EXIT_VALUE_LIST(V) V(kTagged)
536#define CACHED_BRANCH_LIST(V) \
543 V(Unspecified, None) \
544 V(Unspecified, True) \
545 V(Unspecified, False)
547#define CACHED_RETURN_LIST(V) \
553#define CACHED_END_LIST(V) \
564#define CACHED_EFFECT_PHI_LIST(V) \
572#define CACHED_INDUCTION_VARIABLE_PHI_LIST(V) \
578#define CACHED_LOOP_LIST(V) \
583#define CACHED_MERGE_LIST(V) \
593#define CACHED_DEOPTIMIZE_LIST(V) \
596 V(InsufficientTypeFeedbackForGenericKeyedAccess) \
597 V(InsufficientTypeFeedbackForGenericNamedAccess)
599#define CACHED_DEOPTIMIZE_IF_LIST(V) \
606#define CACHED_DEOPTIMIZE_UNLESS_LIST(V) \
608 V(LostPrecisionOrNaN) \
610 V(NotANumberOrOddball) \
613 V(WrongInstanceType) \
616#define CACHED_TRAP_IF_LIST(V) \
617 V(TrapDivUnrepresentable) \
618 V(TrapFloatUnrepresentable)
621#define CACHED_TRAP_UNLESS_LIST(V) \
623 V(TrapMemOutOfBounds) \
625 V(TrapDivUnrepresentable) \
627 V(TrapFloatUnrepresentable) \
628 V(TrapTableOutOfBounds) \
629 V(TrapFuncSigMismatch)
631#define CACHED_PARAMETER_LIST(V) \
641#define CACHED_PHI_LIST(V) \
653#define CACHED_PROJECTION_LIST(V) \
658#define CACHED_STATE_VALUES_LIST(V) \
676#define CACHED(Name, properties, value_input_count, effect_input_count, \
677 control_input_count, value_output_count, effect_output_count, \
678 control_output_count) \
679 struct Name##Operator final : public Operator { \
681 : Operator(IrOpcode::k##Name, properties, #Name, value_input_count, \
682 effect_input_count, control_input_count, \
683 value_output_count, effect_output_count, \
684 control_output_count) {} \
686 Name##Operator k##Name##Operator;
690 template <
size_t kInputCount>
696 0, 0, kInputCount, 0, 0, 0) {}
698#define CACHED_END(input_count) \
699 EndOperator<input_count> kEnd##input_count##Operator;
703 template <
size_t kValueInputCount>
709 kValueInputCount + 1, 1, 1, 0, 0, 1) {}
711#define CACHED_RETURN(value_input_count) \
712 ReturnOperator<value_input_count> kReturn##value_input_count##Operator;
716 template <BranchSemantics semantics, BranchH
int h
int>
723 {semantics, hint}) {}
725#define CACHED_BRANCH(Semantics, Hint) \
726 BranchOperator<BranchSemantics::k##Semantics, BranchHint::k##Hint> \
727 kBranch##Semantics##Hint##Operator;
731 template <
int kEffectInputCount>
737 0, kEffectInputCount, 1, 0, 1, 0) {}
739#define CACHED_EFFECT_PHI(input_count) \
740 EffectPhiOperator<input_count> kEffectPhi##input_count##Operator;
742#undef CACHED_EFFECT_PHI
744 template <RegionObservability kRegionObservability>
751 kRegionObservability) {}
753 BeginRegionOperator<RegionObservability::kObservable>
758 template <
size_t kInputCount>
764 0, 0, kInputCount, 0, 0, 1) {}
766#define CACHED_LOOP(input_count) \
767 LoopOperator<input_count> kLoop##input_count##Operator;
771 template <
size_t kInputCount>
777 0, 0, kInputCount, 0, 0, 1) {}
779#define CACHED_MERGE(input_count) \
780 MergeOperator<input_count> kMerge##input_count##Operator;
784 template <MachineRepresentation kRep>
788 Operator::kPure,
"LoopExitValue", 1,
789 0, 1, 1, 0, 0, kRep) {}
791#define CACHED_LOOP_EXIT_VALUE(rep) \
792 LoopExitValueOperator<MachineRepresentation::rep> \
793 kLoopExitValue##rep##Operator;
795#undef CACHED_LOOP_EXIT_VALUE
797 template <DeoptimizeReason kReason>
807#define CACHED_DEOPTIMIZE(Reason) \
808 DeoptimizeOperator<DeoptimizeReason::k##Reason> kDeoptimize##Reason##Operator;
810#undef CACHED_DEOPTIMIZE
812 template <DeoptimizeReason kReason>
822#define CACHED_DEOPTIMIZE_IF(Reason) \
823 DeoptimizeIfOperator<DeoptimizeReason::k##Reason> \
824 kDeoptimizeIf##Reason##Operator;
826#undef CACHED_DEOPTIMIZE_IF
828 template <DeoptimizeReason kReason>
830 :
public Operator1<DeoptimizeParameters> {
839#define CACHED_DEOPTIMIZE_UNLESS(Reason) \
840 DeoptimizeUnlessOperator<DeoptimizeReason::k##Reason> \
841 kDeoptimizeUnless##Reason##Operator;
843#undef CACHED_DEOPTIMIZE_UNLESS
845#if V8_ENABLE_WEBASSEMBLY
846 template <TrapId trap_
id,
bool has_frame_state>
847 struct TrapIfOperator final :
public Operator1<TrapId> {
851 Operator::kFoldable | Operator::kNoThrow,
853 1 + has_frame_state, 1, 1, 0, 1, 1,
856#define CACHED_TRAP_IF(Trap) \
857 TrapIfOperator<TrapId::k##Trap, true> kTrapIf##Trap##OperatorWithFrameState;
861#define CACHED_TRAP_IF(Trap) \
862 TrapIfOperator<TrapId::k##Trap, false> \
863 kTrapIf##Trap##OperatorWithoutFrameState;
867 template <TrapId trap_
id,
bool has_frame_state>
868 struct TrapUnlessOperator final :
public Operator1<TrapId> {
871 IrOpcode::kTrapUnless,
872 Operator::kFoldable | Operator::kNoThrow,
874 1 + has_frame_state, 1, 1, 0, 1, 1,
877#define CACHED_TRAP_UNLESS(Trap) \
878 TrapUnlessOperator<TrapId::k##Trap, true> \
879 kTrapUnless##Trap##OperatorWithFrameState;
881#undef CACHED_TRAP_UNLESS
883#define CACHED_TRAP_UNLESS(Trap) \
884 TrapUnlessOperator<TrapId::k##Trap, false> \
885 kTrapUnless##Trap##OperatorWithoutFrameState;
887#undef CACHED_TRAP_UNLESS
891 template <MachineRepresentation kRep,
int kInputCount>
897 kInputCount, 0, 1, 1, 0, 0,
900#define CACHED_PHI(rep, input_count) \
901 PhiOperator<MachineRepresentation::rep, input_count> \
902 kPhi##rep##input_count##Operator;
906 template <
int kInputCount>
911 "InductionVariablePhi",
912 kInputCount, 0, 1, 1, 0, 0) {}
914#define CACHED_INDUCTION_VARIABLE_PHI(input_count) \
915 InductionVariablePhiOperator<input_count> \
916 kInductionVariablePhi##input_count##Operator;
918#undef CACHED_INDUCTION_VARIABLE_PHI
920 template <
int kIndex>
929#define CACHED_PARAMETER(index) \
930 ParameterOperator<index> kParameter##index##Operator;
932#undef CACHED_PARAMETER
934 template <
size_t kIndex>
944#define CACHED_PROJECTION(index) \
945 ProjectionOperator<index> kProjection##index##Operator;
947#undef CACHED_PROJECTION
949 template <
int kInputCount>
956 kInputCount, 0, 0, 1, 0, 0,
959#define CACHED_STATE_VALUES(input_count) \
960 StateValuesOperator<input_count> kStateValues##input_count##Operator;
962#undef CACHED_STATE_VALUES
967 GetCommonOperatorGlobalCache)
971 : cache_(*GetCommonOperatorGlobalCache()),
zone_(zone) {}
973#define CACHED(Name, properties, value_input_count, effect_input_count, \
974 control_input_count, value_output_count, effect_output_count, \
975 control_output_count) \
976 const Operator* CommonOperatorBuilder::Name() { \
977 return &cache_.k##Name##Operator; \
984 switch (control_input_count) {
985#define CACHED_END(input_count) \
987 return &cache_.kEnd##input_count##Operator;
997 0, 0, control_input_count, 0, 0, 0);
1001 switch (value_input_count) {
1002#define CACHED_RETURN(input_count) \
1004 return &cache_.kReturn##input_count##Operator;
1014 value_input_count + 1, 1, 1, 0, 0, 1);
1025 const std::optional<Type>& override_output_type) {
1033#define CACHED_BRANCH(Semantics, Hint) \
1034 if (semantics == BranchSemantics::k##Semantics && \
1035 hint == BranchHint::k##Hint) { \
1036 return &cache_.kBranch##Semantics##Hint##Operator; \
1045#define CACHED_DEOPTIMIZE(Reason) \
1046 if (reason == DeoptimizeReason::k##Reason && !feedback.IsValid()) { \
1047 return &cache_.kDeoptimize##Reason##Operator; \
1050#undef CACHED_DEOPTIMIZE
1054 IrOpcode::kDeoptimize,
1063#define CACHED_DEOPTIMIZE_IF(Reason) \
1064 if (reason == DeoptimizeReason::k##Reason && !feedback.IsValid()) { \
1065 return &cache_.kDeoptimizeIf##Reason##Operator; \
1068#undef CACHED_DEOPTIMIZE_IF
1072 IrOpcode::kDeoptimizeIf,
1081#define CACHED_DEOPTIMIZE_UNLESS(Reason) \
1082 if (reason == DeoptimizeReason::k##Reason && !feedback.IsValid()) { \
1083 return &cache_.kDeoptimizeUnless##Reason##Operator; \
1086#undef CACHED_DEOPTIMIZE_UNLESS
1090 IrOpcode::kDeoptimizeUnless,
1098 const char* condition_string,
1099 const char* file,
int line) {
1109#if V8_ENABLE_WEBASSEMBLY
1110const Operator* CommonOperatorBuilder::TrapIf(TrapId trap_id,
1111 bool has_frame_state) {
1113#define CACHED_TRAP_IF(Trap) \
1114 case TrapId::k##Trap: \
1115 return has_frame_state \
1116 ? static_cast<const Operator*>( \
1117 &cache_.kTrapIf##Trap##OperatorWithFrameState) \
1118 : &cache_.kTrapIf##Trap##OperatorWithoutFrameState;
1120#undef CACHED_TRAP_IF
1125 return zone()->
New<Operator1<TrapId>>(
1129 1 + has_frame_state, 1, 1, 0, 1, 1,
1133const Operator* CommonOperatorBuilder::TrapUnless(TrapId trap_id,
1134 bool has_frame_state) {
1136#define CACHED_TRAP_UNLESS(Trap) \
1137 case TrapId::k##Trap: \
1138 return has_frame_state \
1139 ? static_cast<const Operator*>( \
1140 &cache_.kTrapUnless##Trap##OperatorWithFrameState) \
1141 : &cache_.kTrapUnless##Trap##OperatorWithoutFrameState;
1143#undef CACHED_TRAP_UNLESS
1148 return zone()->
New<Operator1<TrapId>>(
1149 IrOpcode::kTrapUnless,
1152 1 + has_frame_state, 1, 1, 0, 1, 1,
1162 1, 0, 1, 0, 0, control_output_count);
1166 int32_t comparison_order,
1187 0, 0, 0, value_output_count, 1, 1);
1192 switch (control_input_count) {
1193#define CACHED_LOOP(input_count) \
1195 return &cache_.kLoop##input_count##Operator;
1205 0, 0, control_input_count, 0, 0, 1);
1210 switch (control_input_count) {
1211#define CACHED_MERGE(input_count) \
1213 return &cache_.kMerge##input_count##Operator;
1223 0, 0, control_input_count, 0, 0, 1);
1229#define CACHED_LOOP_EXIT_VALUE(kRep) \
1230 case MachineRepresentation::kRep: \
1231 return &cache_.kLoopExitValue##kRep##Operator;
1234#undef CACHED_LOOP_EXIT_VALUE
1246 const char* debug_name) {
1249#define CACHED_PARAMETER(index) \
1251 return &cache_.kParameter##index##Operator;
1253#undef CACHED_PARAMETER
1294 "TaggedIndexConstant",
1356 "CompressedHeapConstant",
1365 "TrustedHeapConstant",
1372 IrOpcode::kCompressedHeapConstant == op->
opcode() ||
1373 IrOpcode::kTrustedHeapConstant == op->
opcode());
1386 "RelocatableInt32Constant",
1395 "RelocatableInt64Constant",
1419 int value_input_count) {
1421#define CACHED_PHI(kRep, kValueInputCount) \
1422 if (MachineRepresentation::kRep == rep && \
1423 kValueInputCount == value_input_count) { \
1424 return &cache_.kPhi##kRep##kValueInputCount##Operator; \
1432 value_input_count, 0, 1, 1, 0, 0,
1447 1, 0, 0, 1, 0, 0, use_info);
1453 IrOpcode::kExitMachineGraph,
Operator::kPure,
"ExitMachineGraph", 1, 0, 0,
1459 switch (effect_input_count) {
1460#define CACHED_EFFECT_PHI(input_count) \
1462 return &cache_.kEffectPhi##input_count##Operator;
1464#undef CACHED_EFFECT_PHI
1472 0, effect_input_count, 1, 0, 1, 0);
1478 switch (input_count) {
1479#define CACHED_INDUCTION_VARIABLE_PHI(input_count) \
1481 return &cache_.kInductionVariablePhi##input_count##Operator;
1483#undef CACHED_INDUCTION_VARIABLE_PHI
1490 "InductionVariablePhi",
1491 input_count, 0, 1, 1, 0, 0);
1496 switch (region_observability) {
1498 return &
cache_.kBeginRegionObservableOperator;
1500 return &
cache_.kBeginRegionNotObservableOperator;
1508 switch (arguments) {
1509#define CACHED_STATE_VALUES(arguments) \
1511 return &cache_.kStateValues##arguments##Operator;
1513#undef CACHED_STATE_VALUES
1527 arguments, 0, 0, 1, 0, 0,
1541 static_cast<int>(types->
size()), 0, 0, 1, 0, 0,
1549 "ArgumentsElementsState",
1557 "ArgumentsLengthState",
1562 DCHECK(op->
opcode() == IrOpcode::kArgumentsElementsState);
1567 int pointer_slots) {
1571 pointer_slots, 0, 0, 1, 0, 0,
1580 static_cast<int>(types->
size()), 0, 0, 1, 0, 0,
1586 case IrOpcode::kObjectState:
1588 case IrOpcode::kTypedObjectState:
1590 case IrOpcode::kObjectId:
1605 FrameStateInfo state_info(bailout_id, state_combine, function_info);
1615 class CallOperator final :
public Operator1<const CallDescriptor*> {
1619 IrOpcode::kCall, call_descriptor->
properties(),
"Call",
1622 Operator::ZeroIfPure(call_descriptor->
properties()),
1623 Operator::ZeroIfEliminatable(call_descriptor->
properties()),
1625 Operator::ZeroIfPure(call_descriptor->
properties()),
1626 Operator::ZeroIfNoThrow(call_descriptor->
properties()),
1629 void PrintParameter(std::ostream& os,
1630 PrintVerbosity verbose)
const override {
1631 os <<
"[" << *parameter() <<
"]";
1634 return zone()->
New<CallOperator>(call_descriptor);
1639 class TailCallOperator final :
public Operator1<const CallDescriptor*> {
1643 IrOpcode::kTailCall,
1644 call_descriptor->
properties() | Operator::kNoThrow,
"TailCall",
1647 1, 1, 0, 0, 1, call_descriptor) {}
1649 void PrintParameter(std::ostream& os,
1650 PrintVerbosity verbose)
const override {
1651 os <<
"[" << *parameter() <<
"]";
1654 return zone()->
New<TailCallOperator>(call_descriptor);
1659#define CACHED_PROJECTION(index) \
1661 return &cache_.kProjection##index##Operator;
1663#undef CACHED_PROJECTION
1669 IrOpcode::kProjection,
1679 if (op->
opcode() == IrOpcode::kPhi) {
1681 }
else if (op->
opcode() == IrOpcode::kEffectPhi) {
1683 }
else if (op->
opcode() == IrOpcode::kMerge) {
1685 }
else if (op->
opcode() == IrOpcode::kLoop) {
1698 max_arguments, local_count,
1699 shared_info, bytecode_array);
1702#if V8_ENABLE_WEBASSEMBLY
1704CommonOperatorBuilder::CreateJSToWasmFrameStateFunctionInfo(
1708 DCHECK_EQ(type, FrameStateType::kJSToWasmBuiltinContinuation);
1710 return zone()->
New<JSToWasmFrameStateFunctionInfo>(
1719 const char* mnemonic;
1721 case IrOpcode::kChangeInt64ToBigInt:
1722 mnemonic =
"Chained[ChangeInt64ToBigInt]";
1724 case IrOpcode::kChangeUint64ToBigInt:
1725 mnemonic =
"Chained[ChangeUint64ToBigInt]";
1751#undef COMMON_CACHED_OP_LIST
1752#undef CACHED_BRANCH_LIST
1753#undef CACHED_RETURN_LIST
1754#undef CACHED_END_LIST
1755#undef CACHED_EFFECT_PHI_LIST
1756#undef CACHED_INDUCTION_VARIABLE_PHI_LIST
1757#undef CACHED_LOOP_LIST
1758#undef CACHED_MERGE_LIST
1759#undef CACHED_DEOPTIMIZE_LIST
1760#undef CACHED_DEOPTIMIZE_IF_LIST
1761#undef CACHED_DEOPTIMIZE_UNLESS_LIST
1762#undef CACHED_TRAP_IF_LIST
1763#undef CACHED_TRAP_UNLESS_LIST
1764#undef CACHED_PARAMETER_LIST
1765#undef CACHED_PHI_LIST
1766#undef CACHED_PROJECTION_LIST
1767#undef CACHED_STATE_VALUES_LIST
BranchSemantics semantics() const
const char * condition_string() const
const char * file() const
BranchSemantics semantics() const
size_t FrameStateCount() const
size_t ReturnCount() const
size_t InputCount() const
Operator::Properties properties() const
const Operator * InductionVariablePhi(int value_input_count)
const Operator * End(size_t control_input_count)
const Operator * Phi(MachineRepresentation representation, int value_input_count)
const Operator * RelocatableInt64Constant(int64_t value, RelocInfo::Mode rmode)
const Operator * Loop(int control_input_count)
const Operator * CompressedHeapConstant(const Handle< HeapObject > &)
CommonOperatorBuilder(Zone *zone)
const Operator * StateValues(int arguments, SparseInputMask bitmask)
const Operator * LoopExitValue(MachineRepresentation rep)
const Operator * StaticAssert(const char *source)
const Operator * EffectPhi(int effect_input_count)
const Operator * Int64Constant(int64_t)
const Operator * ResizeMergeOrPhi(const Operator *op, int size)
const Operator * Float32Constant(float)
const Operator * Float64Constant(double)
const Operator * ArgumentsElementsState(ArgumentsStateType type)
const Operator * Assert(BranchSemantics semantics, const char *condition_string, const char *file, int line)
const Operator * ExternalConstant(const ExternalReference &)
const Operator * IfDefault(BranchHint hint=BranchHint::kNone)
const Operator * OsrValue(int index)
const Operator * ObjectState(uint32_t object_id, int pointer_slots)
const Operator * TailCall(const CallDescriptor *call_descriptor)
const Operator * TypedStateValues(const ZoneVector< MachineType > *types, SparseInputMask bitmask)
const Operator * RelocatableInt32Constant(int32_t value, RelocInfo::Mode rmode)
const Operator * EnterMachineGraph(UseInfo use_info)
const Operator * DeadValue(MachineRepresentation rep)
const Operator * Select(MachineRepresentation, BranchHint=BranchHint::kNone, BranchSemantics semantics=BranchSemantics::kUnspecified)
const Operator * TypedObjectState(uint32_t object_id, const ZoneVector< MachineType > *types)
const Operator * FrameState(BytecodeOffset bailout_id, OutputFrameStateCombine state_combine, const FrameStateFunctionInfo *function_info)
const Operator * Return(int value_input_count=1)
const Operator * Chained(const Operator *op)
const Operator * TypeGuard(Type type)
const Operator * PointerConstant(intptr_t)
const Operator * ArgumentsLengthState()
const Operator * BeginRegion(RegionObservability)
const Operator * Merge(int control_input_count)
const Operator * TrustedHeapConstant(const Handle< HeapObject > &)
const Operator * NumberConstant(double)
const Operator * Projection(size_t index)
const Operator * Start(int value_output_count)
const Operator * IfValue(int32_t value, int32_t order=0, BranchHint hint=BranchHint::kNone)
const Operator * ObjectId(uint32_t)
const CommonOperatorGlobalCache & cache_
const Operator * DeoptimizeUnless(DeoptimizeReason reason, FeedbackSource const &feedback)
const Operator * Int32Constant(int32_t)
const Operator * Deoptimize(DeoptimizeReason reason, FeedbackSource const &feedback)
const Operator * ExitMachineGraph(MachineRepresentation output_representation, Type output_type)
const Operator * DeoptimizeIf(DeoptimizeReason reason, FeedbackSource const &feedback)
const Operator * Switch(size_t control_output_count)
const Operator * Branch(BranchHint=BranchHint::kNone, BranchSemantics semantics=BranchSemantics::kUnspecified)
const Operator * HeapConstant(const Handle< HeapObject > &)
const Operator * Call(const CallDescriptor *call_descriptor)
const Operator * TaggedIndexConstant(int32_t value)
const FrameStateFunctionInfo * CreateFrameStateFunctionInfo(FrameStateType type, uint16_t parameter_count, uint16_t max_arguments, int local_count, IndirectHandle< SharedFunctionInfo > shared_info, IndirectHandle< BytecodeArray > bytecode_array)
const Operator * SLVerifierHint(const Operator *semantics, const std::optional< Type > &override_output_type)
const Operator * Parameter(int index, const char *debug_name=nullptr)
DeoptimizeReason reason() const
const FeedbackSource & feedback() const
const Type & output_type() const
MachineRepresentation output_representation() const
int32_t comparison_order() const
int ControlInputCount() const
int ValueInputCount() const
Properties properties() const
int ValueOutputCount() const
int EffectInputCount() const
constexpr Opcode opcode() const
RelocInfo::Mode rmode() const
const std::optional< Type > & override_output_type() const
const Operator * semantics() const
MachineRepresentation representation() const
BranchSemantics semantics() const
SparseInputMask sparse_input_mask() const
ZoneVector< MachineType > const * machine_types() const
#define CACHED_DEOPTIMIZE(Reason)
#define CACHED_DEOPTIMIZE_UNLESS(Reason)
#define CACHED_END_LIST(V)
#define CACHED_LOOP_EXIT_VALUE_LIST(V)
#define COMMON_CACHED_OP_LIST(V)
#define CACHED_EFFECT_PHI_LIST(V)
#define CACHED_RETURN_LIST(V)
#define CACHED_LOOP_EXIT_VALUE(rep)
#define CACHED_LOOP_LIST(V)
#define CACHED_STATE_VALUES_LIST(V)
#define CACHED_PARAMETER(index)
#define CACHED_PARAMETER_LIST(V)
#define CACHED_RETURN(value_input_count)
#define CACHED_BRANCH(Semantics, Hint)
#define CACHED_DEOPTIMIZE_IF(Reason)
#define CACHED_EFFECT_PHI(input_count)
#define CACHED_TRAP_IF_LIST(V)
#define CACHED_STATE_VALUES(input_count)
#define CACHED_PROJECTION(index)
#define CACHED_END(input_count)
#define CACHED_INDUCTION_VARIABLE_PHI_LIST(V)
#define CACHED_PROJECTION_LIST(V)
#define CACHED_BRANCH_LIST(V)
#define CACHED_DEOPTIMIZE_LIST(V)
#define CACHED(Name, properties, value_input_count, effect_input_count, control_input_count, value_output_count, effect_output_count, control_output_count)
#define CACHED_DEOPTIMIZE_IF_LIST(V)
#define CACHED_TRAP_UNLESS_LIST(V)
#define CACHED_INDUCTION_VARIABLE_PHI(input_count)
#define CACHED_PHI_LIST(V)
#define CACHED_MERGE(input_count)
#define CACHED_DEOPTIMIZE_UNLESS_LIST(V)
#define CACHED_LOOP(input_count)
#define CACHED_PHI(rep, input_count)
#define CACHED_MERGE_LIST(V)
#define FOREACH_WASM_TRAPREASON(V)
#define DEFINE_LAZY_LEAKY_OBJECT_GETTER(T, FunctionName,...)
InstructionOperand source
constexpr unsigned CountTrailingZeros(T value)
constexpr unsigned CountPopulation(T value)
V8_INLINE size_t hash_value(unsigned int v)
V8_INLINE size_t hash_combine(size_t seed, size_t hash)
V8_INLINE size_t hash_range(Iterator first, Iterator last)
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)
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)
const ParameterInfo & ParameterInfoOf(const Operator *const op)
const FrameStateInfo & FrameStateInfoOf(const Operator *op)
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)
T const & OpParameter(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)
std::ostream & operator<<(std::ostream &os, AtomicMemoryOrder order)
BytecodeSequenceNode * parent_
#define DCHECK_LE(v1, v2)
#define DCHECK_NOT_NULL(val)
#define DCHECK_NE(v1, v2)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_EQ(v1, v2)
#define V8_EXPORT_PRIVATE
DeoptimizeUnlessOperator()
InductionVariablePhiOperator()
BeginRegionOperator< RegionObservability::kObservable > kBeginRegionObservableOperator
BeginRegionOperator< RegionObservability::kNotObservable > kBeginRegionNotObservableOperator
uint32_t object_id() const
uint32_t object_id() const
const ZoneVector< MachineType > * machine_types() const