19#if V8_ENABLE_WEBASSEMBLY
28 return static_cast<uint8_t
>(base_taggedness);
32 switch (base_taggedness) {
34 return os <<
"untagged base";
36 return os <<
"tagged base";
43 if (const_field_info.
IsConst()) {
44 return os <<
"const (field owner: "
47 return os <<
"mutable";
75 access.machine_type, access.const_field_info,
76 access.is_store_in_literal);
81 if (access.creator_mnemonic !=
nullptr) {
82 os << access.creator_mnemonic <<
", ";
84 os << access.base_is_tagged <<
", " << access.offset <<
", ";
87 if (access.name.ToHandle(&name)) {
91 if (access.map.has_value()) {
92 os <<
Brief(*access.map->object()) <<
", ";
95 os << access.type <<
", " << access.machine_type <<
", "
96 << access.write_barrier_kind <<
", " << access.const_field_info;
97 if (access.is_store_in_literal) {
98 os <<
" (store in literal)";
100 if (access.maybe_initializing_or_transitioning_store) {
101 os <<
" (initializing or transitioning store)";
110 if (verbose == PrintVerbosity::kVerbose) {
113 os <<
"[+" << parameter().offset <<
"]";
131 access.machine_type);
135 os << access.base_is_tagged <<
", " << access.header_size <<
", "
136 << access.type <<
", " << access.machine_type <<
", "
137 << access.write_barrier_kind;
151 os << access.machine_type <<
", " << access.write_barrier_kind;
155#if V8_ENABLE_WEBASSEMBLY
158 WasmFieldInfo
const& rhs) {
159 return lhs.field_index == rhs.field_index && lhs.type == rhs.type &&
160 lhs.is_signed == rhs.is_signed && lhs.null_check == rhs.null_check;
169 WasmFieldInfo
const& info) {
170 return os << info.field_index <<
", "
171 << (info.is_signed ?
"signed" :
"unsigned") <<
", "
177 WasmElementInfo
const& rhs) {
178 return lhs.type == rhs.type && lhs.is_signed == rhs.is_signed;
181size_t hash_value(WasmElementInfo
const& info) {
186 WasmElementInfo
const& info) {
187 return os << (info.is_signed ?
"signed" :
"unsigned");
195 op->
opcode() == IrOpcode::kStoreField);
202 op->
opcode() == IrOpcode::kStoreElement);
209 op->
opcode() == IrOpcode::kLoadImmutableFromObject ||
210 op->
opcode() == IrOpcode::kStoreToObject ||
211 op->
opcode() == IrOpcode::kInitializeImmutableInObject);
217 op->
opcode() == IrOpcode::kLoadDataViewElement ||
218 op->
opcode() == IrOpcode::kStoreTypedElement ||
219 op->
opcode() == IrOpcode::kStoreDataViewElement);
229 return static_cast<size_t>(
mode);
235 return os <<
"allow-return-hole";
237 return os <<
"never-return-hole";
250 return os << params.mode() <<
", " << params.feedback();
265 return !(lhs == rhs);
269 DCHECK(op->
opcode() == IrOpcode::kChangeFloat64ToTagged ||
270 op->
opcode() == IrOpcode::kCheckedInt32Mul);
276 return os <<
"TryMigrateInstance";
278 return os <<
"TryMigrateInstanceAndDeopt";
315 return static_cast<size_t>(
mode);
321 return os <<
"AdditiveSafeInteger";
323 return os <<
"Number";
325 return os <<
"NumberOrBoolean";
327 return os <<
"NumberOrOddball";
335 return os <<
"DoubleElements";
337 return os <<
"SmiOrObjectElements";
354 return os << params.mode() <<
", " << params.feedback();
384 switch (transition.
mode()) {
386 return os <<
"fast-transition from "
390 return os <<
"slow-transition from "
399 os <<
"transition from (";
406 os <<
Brief(*source.object());
417ElementsTransitionWithMultipleSources
const&
426class TransitionAndStoreElementParameters final {
428 TransitionAndStoreElementParameters(MapRef double_map, MapRef fast_map);
431 MapRef fast_map()
const {
return fast_map_; }
438TransitionAndStoreElementParameters::TransitionAndStoreElementParameters(
439 MapRef double_map, MapRef fast_map)
442bool operator==(TransitionAndStoreElementParameters
const& lhs,
443 TransitionAndStoreElementParameters
const& rhs) {
444 return lhs.fast_map() == rhs.fast_map() &&
445 lhs.double_map() == rhs.double_map();
448size_t hash_value(TransitionAndStoreElementParameters parameters) {
449 return base::hash_combine(parameters.fast_map(), parameters.double_map());
453 TransitionAndStoreElementParameters parameters) {
454 return os <<
"fast-map" << Brief(*parameters.fast_map().object())
455 <<
" double-map" << Brief(*parameters.double_map().object());
463class TransitionAndStoreNonNumberElementParameters final {
465 TransitionAndStoreNonNumberElementParameters(MapRef fast_map,
468 MapRef fast_map()
const {
return fast_map_; }
476TransitionAndStoreNonNumberElementParameters::
477 TransitionAndStoreNonNumberElementParameters(MapRef fast_map,
481bool operator==(TransitionAndStoreNonNumberElementParameters
const& lhs,
482 TransitionAndStoreNonNumberElementParameters
const& rhs) {
483 return lhs.fast_map() == rhs.fast_map() &&
484 lhs.value_type() == rhs.value_type();
487size_t hash_value(TransitionAndStoreNonNumberElementParameters parameters) {
488 return base::hash_combine(parameters.fast_map(), parameters.value_type());
492 std::ostream& os, TransitionAndStoreNonNumberElementParameters parameters) {
493 return os << parameters.value_type() <<
", fast-map"
494 << Brief(*parameters.fast_map().object());
502class TransitionAndStoreNumberElementParameters final {
504 explicit TransitionAndStoreNumberElementParameters(MapRef double_map);
512TransitionAndStoreNumberElementParameters::
513 TransitionAndStoreNumberElementParameters(MapRef double_map)
516bool operator==(TransitionAndStoreNumberElementParameters
const& lhs,
517 TransitionAndStoreNumberElementParameters
const& rhs) {
518 return lhs.double_map() == rhs.double_map();
521size_t hash_value(TransitionAndStoreNumberElementParameters parameters) {
522 return base::hash_combine(parameters.double_map());
526 TransitionAndStoreNumberElementParameters parameters) {
527 return os <<
"double-map" << Brief(*parameters.double_map().object());
533 if (op->
opcode() == IrOpcode::kTransitionAndStoreElement) {
534 return OpParameter<TransitionAndStoreElementParameters>(op).double_map();
535 }
else if (op->
opcode() == IrOpcode::kTransitionAndStoreNumberElement) {
536 return OpParameter<TransitionAndStoreNumberElementParameters>(op)
543 DCHECK_EQ(IrOpcode::kTransitionAndStoreNonNumberElement, op->
opcode());
544 return OpParameter<TransitionAndStoreNonNumberElementParameters>(op)
549 if (op->
opcode() == IrOpcode::kTransitionAndStoreElement) {
550 return OpParameter<TransitionAndStoreElementParameters>(op).fast_map();
551 }
else if (op->
opcode() == IrOpcode::kTransitionAndStoreNonNumberElement) {
552 return OpParameter<TransitionAndStoreNonNumberElementParameters>(op)
560 case BigIntOperationHint::kBigInt:
561 return os <<
"BigInt";
562 case BigIntOperationHint::kBigInt64:
563 return os <<
"BigInt64";
569 return static_cast<uint8_t
>(hint);
574 case NumberOperationHint::kSignedSmall:
575 return os <<
"SignedSmall";
576 case NumberOperationHint::kSignedSmallInputs:
577 return os <<
"SignedSmallInputs";
578 case NumberOperationHint::kAdditiveSafeInteger:
579 return os <<
"AdditiveSafeInteger";
580 case NumberOperationHint::kNumber:
581 return os <<
"Number";
582 case NumberOperationHint::kNumberOrBoolean:
583 return os <<
"NumberOrBoolean";
584 case NumberOperationHint::kNumberOrOddball:
585 return os <<
"NumberOrOddball";
591 return static_cast<uint8_t
>(hint);
595 DCHECK(op->
opcode() == IrOpcode::kSpeculativeNumberAdd ||
596 op->
opcode() == IrOpcode::kSpeculativeNumberSubtract ||
597 op->
opcode() == IrOpcode::kSpeculativeNumberMultiply ||
598 op->
opcode() == IrOpcode::kSpeculativeNumberPow ||
599 op->
opcode() == IrOpcode::kSpeculativeNumberDivide ||
600 op->
opcode() == IrOpcode::kSpeculativeNumberModulus ||
601 op->
opcode() == IrOpcode::kSpeculativeNumberShiftLeft ||
602 op->
opcode() == IrOpcode::kSpeculativeNumberShiftRight ||
603 op->
opcode() == IrOpcode::kSpeculativeNumberShiftRightLogical ||
604 op->
opcode() == IrOpcode::kSpeculativeNumberBitwiseAnd ||
605 op->
opcode() == IrOpcode::kSpeculativeNumberBitwiseOr ||
606 op->
opcode() == IrOpcode::kSpeculativeNumberBitwiseXor ||
607 op->
opcode() == IrOpcode::kSpeculativeNumberEqual ||
608 op->
opcode() == IrOpcode::kSpeculativeNumberLessThan ||
609 op->
opcode() == IrOpcode::kSpeculativeNumberLessThanOrEqual ||
610 op->
opcode() == IrOpcode::kSpeculativeAdditiveSafeIntegerAdd ||
611 op->
opcode() == IrOpcode::kSpeculativeAdditiveSafeIntegerSubtract ||
612 op->
opcode() == IrOpcode::kSpeculativeSmallIntegerAdd ||
613 op->
opcode() == IrOpcode::kSpeculativeSmallIntegerSubtract);
614 return OpParameter<NumberOperationHint>(op);
619 DCHECK(op->
opcode() == IrOpcode::kSpeculativeBigIntAdd ||
620 op->
opcode() == IrOpcode::kSpeculativeBigIntSubtract ||
621 op->
opcode() == IrOpcode::kSpeculativeBigIntMultiply ||
622 op->
opcode() == IrOpcode::kSpeculativeBigIntDivide ||
623 op->
opcode() == IrOpcode::kSpeculativeBigIntModulus ||
624 op->
opcode() == IrOpcode::kSpeculativeBigIntBitwiseAnd ||
625 op->
opcode() == IrOpcode::kSpeculativeBigIntBitwiseOr ||
626 op->
opcode() == IrOpcode::kSpeculativeBigIntBitwiseXor ||
627 op->
opcode() == IrOpcode::kSpeculativeBigIntShiftLeft ||
628 op->
opcode() == IrOpcode::kSpeculativeBigIntShiftRight ||
629 op->
opcode() == IrOpcode::kSpeculativeBigIntEqual ||
630 op->
opcode() == IrOpcode::kSpeculativeBigIntLessThan ||
631 op->
opcode() == IrOpcode::kSpeculativeBigIntLessThanOrEqual);
644 return base::hash_combine(p.
hint(), feedback_hash(p.
feedback()));
654 return OpParameter<NumberOperationParameters>(op);
664 return base::hash_combine(p.
hint(), feedback_hash(p.
feedback()));
674 return OpParameter<BigIntOperationParameters>(op);
684 return base::hash_combine(p.
bits(), feedback_hash(p.
feedback()));
694 DCHECK(op->
opcode() == IrOpcode::kSpeculativeBigIntAsUintN ||
695 op->
opcode() == IrOpcode::kSpeculativeBigIntAsIntN);
696 return OpParameter<SpeculativeBigIntAsNParameters>(op);
700 return base::hash_combine(info.type(),
701 static_cast<int>(info.allocation_type()));
706 return os << info.type() <<
", " << info.allocation_type();
716 op->
opcode() == IrOpcode::kAllocateRaw);
717 return OpParameter<AllocateParameters>(op);
721 if (op->
opcode() == IrOpcode::kNewDoubleElements ||
722 op->
opcode() == IrOpcode::kNewSmiOrObjectElements) {
723 return OpParameter<AllocationType>(op);
735 return static_cast<AbortReason>(OpParameter<int>(op));
740 DCHECK(op->
opcode() == IrOpcode::kCheckedTruncateTaggedToWord32 ||
741 op->
opcode() == IrOpcode::kCheckedTaggedToFloat64);
742 return OpParameter<CheckTaggedInputParameters>(op);
747 return os << params.mode() <<
", " << params.feedback();
752 return base::hash_combine(params.mode(), feedback_hash(params.feedback()));
761 DCHECK(op->
opcode() == IrOpcode::kCheckedTaggedToInt32 ||
762 op->
opcode() == IrOpcode::kCheckedTaggedToAdditiveSafeInteger ||
763 op->
opcode() == IrOpcode::kCheckedTaggedToInt64 ||
764 op->
opcode() == IrOpcode::kCheckedFloat64ToInt32 ||
765 op->
opcode() == IrOpcode::kCheckedFloat64ToAdditiveSafeInteger ||
766 op->
opcode() == IrOpcode::kCheckedFloat64ToInt64);
767 return OpParameter<CheckMinusZeroParameters>(op);
772 return os << params.mode() <<
", " << params.feedback();
777 return base::hash_combine(params.mode(), feedback_hash(params.feedback()));
785#if V8_ENABLE_WEBASSEMBLY
787 std::ostream& os, AssertNotNullParameters
const& params) {
788 return os << params.type <<
", " << params.trap_id;
791size_t hash_value(AssertNotNullParameters
const& params) {
792 return base::hash_combine(params.type, params.trap_id);
795bool operator==(AssertNotNullParameters
const& lhs,
796 AssertNotNullParameters
const& rhs) {
797 return lhs.type == rhs.type && lhs.trap_id == rhs.trap_id;
801#define PURE_OP_LIST(V) \
802 V(BooleanNot, Operator::kNoProperties, 1, 0) \
803 V(NumberEqual, Operator::kCommutative, 2, 0) \
804 V(NumberLessThan, Operator::kNoProperties, 2, 0) \
805 V(NumberLessThanOrEqual, Operator::kNoProperties, 2, 0) \
806 V(NumberAdd, Operator::kCommutative, 2, 0) \
807 V(NumberSubtract, Operator::kNoProperties, 2, 0) \
808 V(NumberMultiply, Operator::kCommutative, 2, 0) \
809 V(NumberDivide, Operator::kNoProperties, 2, 0) \
810 V(NumberModulus, Operator::kNoProperties, 2, 0) \
811 V(NumberBitwiseOr, Operator::kCommutative, 2, 0) \
812 V(NumberBitwiseXor, Operator::kCommutative, 2, 0) \
813 V(NumberBitwiseAnd, Operator::kCommutative, 2, 0) \
814 V(NumberShiftLeft, Operator::kNoProperties, 2, 0) \
815 V(NumberShiftRight, Operator::kNoProperties, 2, 0) \
816 V(NumberShiftRightLogical, Operator::kNoProperties, 2, 0) \
817 V(NumberImul, Operator::kCommutative, 2, 0) \
818 V(NumberAbs, Operator::kNoProperties, 1, 0) \
819 V(NumberClz32, Operator::kNoProperties, 1, 0) \
820 V(NumberCeil, Operator::kNoProperties, 1, 0) \
821 V(NumberFloor, Operator::kNoProperties, 1, 0) \
822 V(NumberFround, Operator::kNoProperties, 1, 0) \
823 V(NumberAcos, Operator::kNoProperties, 1, 0) \
824 V(NumberAcosh, Operator::kNoProperties, 1, 0) \
825 V(NumberAsin, Operator::kNoProperties, 1, 0) \
826 V(NumberAsinh, Operator::kNoProperties, 1, 0) \
827 V(NumberAtan, Operator::kNoProperties, 1, 0) \
828 V(NumberAtan2, Operator::kNoProperties, 2, 0) \
829 V(NumberAtanh, Operator::kNoProperties, 1, 0) \
830 V(NumberCbrt, Operator::kNoProperties, 1, 0) \
831 V(NumberCos, Operator::kNoProperties, 1, 0) \
832 V(NumberCosh, Operator::kNoProperties, 1, 0) \
833 V(NumberExp, Operator::kNoProperties, 1, 0) \
834 V(NumberExpm1, Operator::kNoProperties, 1, 0) \
835 V(NumberLog, Operator::kNoProperties, 1, 0) \
836 V(NumberLog1p, Operator::kNoProperties, 1, 0) \
837 V(NumberLog10, Operator::kNoProperties, 1, 0) \
838 V(NumberLog2, Operator::kNoProperties, 1, 0) \
839 V(NumberMax, Operator::kNoProperties, 2, 0) \
840 V(NumberMin, Operator::kNoProperties, 2, 0) \
841 V(NumberPow, Operator::kNoProperties, 2, 0) \
842 V(NumberRound, Operator::kNoProperties, 1, 0) \
843 V(NumberSign, Operator::kNoProperties, 1, 0) \
844 V(NumberSin, Operator::kNoProperties, 1, 0) \
845 V(NumberSinh, Operator::kNoProperties, 1, 0) \
846 V(NumberSqrt, Operator::kNoProperties, 1, 0) \
847 V(NumberTan, Operator::kNoProperties, 1, 0) \
848 V(NumberTanh, Operator::kNoProperties, 1, 0) \
849 V(NumberTrunc, Operator::kNoProperties, 1, 0) \
850 V(NumberToBoolean, Operator::kNoProperties, 1, 0) \
851 V(NumberToInt32, Operator::kNoProperties, 1, 0) \
852 V(NumberToString, Operator::kNoProperties, 1, 0) \
853 V(NumberToUint32, Operator::kNoProperties, 1, 0) \
854 V(NumberToUint8Clamped, Operator::kNoProperties, 1, 0) \
855 V(Integral32OrMinusZeroToBigInt, Operator::kNoProperties, 1, 0) \
856 V(NumberSilenceNaN, Operator::kNoProperties, 1, 0) \
857 V(BigIntEqual, Operator::kNoProperties, 2, 0) \
858 V(BigIntLessThan, Operator::kNoProperties, 2, 0) \
859 V(BigIntLessThanOrEqual, Operator::kNoProperties, 2, 0) \
860 V(BigIntNegate, Operator::kNoProperties, 1, 0) \
861 V(StringConcat, Operator::kNoProperties, 3, 0) \
862 V(StringToNumber, Operator::kNoProperties, 1, 0) \
863 V(StringFromSingleCharCode, Operator::kNoProperties, 1, 0) \
864 V(StringFromSingleCodePoint, Operator::kNoProperties, 1, 0) \
865 V(StringIndexOf, Operator::kNoProperties, 3, 0) \
866 V(StringLength, Operator::kNoProperties, 1, 0) \
867 V(StringWrapperLength, Operator::kNoProperties, 1, 0) \
868 V(StringToLowerCaseIntl, Operator::kNoProperties, 1, 0) \
869 V(StringToUpperCaseIntl, Operator::kNoProperties, 1, 0) \
870 V(TypeOf, Operator::kNoProperties, 1, 1) \
871 V(PlainPrimitiveToNumber, Operator::kNoProperties, 1, 0) \
872 V(PlainPrimitiveToWord32, Operator::kNoProperties, 1, 0) \
873 V(PlainPrimitiveToFloat64, Operator::kNoProperties, 1, 0) \
874 V(ChangeTaggedSignedToInt32, Operator::kNoProperties, 1, 0) \
875 V(ChangeTaggedSignedToInt64, Operator::kNoProperties, 1, 0) \
876 V(ChangeTaggedToInt32, Operator::kNoProperties, 1, 0) \
877 V(ChangeTaggedToInt64, Operator::kNoProperties, 1, 0) \
878 V(ChangeTaggedToUint32, Operator::kNoProperties, 1, 0) \
879 V(ChangeTaggedToFloat64, Operator::kNoProperties, 1, 0) \
880 V(ChangeTaggedToTaggedSigned, Operator::kNoProperties, 1, 0) \
881 V(ChangeFloat64ToTaggedPointer, Operator::kNoProperties, 1, 0) \
882 V(ChangeFloat64HoleToTagged, Operator::kNoProperties, 1, 0) \
883 V(ChangeInt31ToTaggedSigned, Operator::kNoProperties, 1, 0) \
884 V(ChangeInt32ToTagged, Operator::kNoProperties, 1, 0) \
885 V(ChangeInt64ToTagged, Operator::kNoProperties, 1, 0) \
886 V(ChangeUint32ToTagged, Operator::kNoProperties, 1, 0) \
887 V(ChangeUint64ToTagged, Operator::kNoProperties, 1, 0) \
888 V(ChangeTaggedToBit, Operator::kNoProperties, 1, 0) \
889 V(ChangeBitToTagged, Operator::kNoProperties, 1, 0) \
890 V(TruncateBigIntToWord64, Operator::kNoProperties, 1, 0) \
891 V(ChangeInt64ToBigInt, Operator::kNoProperties, 1, 0) \
892 V(ChangeUint64ToBigInt, Operator::kNoProperties, 1, 0) \
893 V(TruncateTaggedToBit, Operator::kNoProperties, 1, 0) \
894 V(TruncateTaggedPointerToBit, Operator::kNoProperties, 1, 0) \
895 V(TruncateTaggedToWord32, Operator::kNoProperties, 1, 0) \
896 V(TruncateTaggedToFloat64, Operator::kNoProperties, 1, 0) \
897 V(ObjectIsArrayBufferView, Operator::kNoProperties, 1, 0) \
898 V(ObjectIsBigInt, Operator::kNoProperties, 1, 0) \
899 V(ObjectIsCallable, Operator::kNoProperties, 1, 0) \
900 V(ObjectIsConstructor, Operator::kNoProperties, 1, 0) \
901 V(ObjectIsDetectableCallable, Operator::kNoProperties, 1, 0) \
902 V(ObjectIsMinusZero, Operator::kNoProperties, 1, 0) \
903 V(NumberIsMinusZero, Operator::kNoProperties, 1, 0) \
904 V(ObjectIsNaN, Operator::kNoProperties, 1, 0) \
905 V(NumberIsNaN, Operator::kNoProperties, 1, 0) \
906 V(ObjectIsNonCallable, Operator::kNoProperties, 1, 0) \
907 V(ObjectIsNumber, Operator::kNoProperties, 1, 0) \
908 V(ObjectIsReceiver, Operator::kNoProperties, 1, 0) \
909 V(ObjectIsSmi, Operator::kNoProperties, 1, 0) \
910 V(ObjectIsString, Operator::kNoProperties, 1, 0) \
911 V(ObjectIsSymbol, Operator::kNoProperties, 1, 0) \
912 V(ObjectIsUndetectable, Operator::kNoProperties, 1, 0) \
913 V(NumberIsFloat64Hole, Operator::kNoProperties, 1, 0) \
914 V(NumberIsFinite, Operator::kNoProperties, 1, 0) \
915 V(ObjectIsFiniteNumber, Operator::kNoProperties, 1, 0) \
916 V(NumberIsInteger, Operator::kNoProperties, 1, 0) \
917 V(ObjectIsSafeInteger, Operator::kNoProperties, 1, 0) \
918 V(NumberIsSafeInteger, Operator::kNoProperties, 1, 0) \
919 V(ObjectIsInteger, Operator::kNoProperties, 1, 0) \
920 V(ConvertTaggedHoleToUndefined, Operator::kNoProperties, 1, 0) \
921 V(SameValue, Operator::kCommutative, 2, 0) \
922 V(SameValueNumbersOnly, Operator::kCommutative, 2, 0) \
923 V(NumberSameValue, Operator::kCommutative, 2, 0) \
924 V(ReferenceEqual, Operator::kCommutative, 2, 0) \
925 V(StringEqual, Operator::kCommutative, 2, 0) \
926 V(StringLessThan, Operator::kNoProperties, 2, 0) \
927 V(StringLessThanOrEqual, Operator::kNoProperties, 2, 0) \
928 V(ToBoolean, Operator::kNoProperties, 1, 0) \
929 V(NewConsString, Operator::kNoProperties, 3, 0) \
930 V(Unsigned32Divide, Operator::kNoProperties, 2, 0)
932#define EFFECT_DEPENDENT_OP_LIST(V) \
933 V(BigIntAdd, Operator::kNoProperties, 2, 1) \
934 V(BigIntSubtract, Operator::kNoProperties, 2, 1) \
935 V(BigIntMultiply, Operator::kNoProperties, 2, 1) \
936 V(BigIntDivide, Operator::kNoProperties, 2, 1) \
937 V(BigIntModulus, Operator::kNoProperties, 2, 1) \
938 V(BigIntBitwiseAnd, Operator::kNoProperties, 2, 1) \
939 V(BigIntBitwiseOr, Operator::kNoProperties, 2, 1) \
940 V(BigIntBitwiseXor, Operator::kNoProperties, 2, 1) \
941 V(BigIntShiftLeft, Operator::kNoProperties, 2, 1) \
942 V(BigIntShiftRight, Operator::kNoProperties, 2, 1) \
943 V(StringCharCodeAt, Operator::kNoProperties, 2, 1) \
944 V(StringCodePointAt, Operator::kNoProperties, 2, 1) \
945 V(StringFromCodePointAt, Operator::kNoProperties, 2, 1) \
946 V(StringSubstring, Operator::kNoProperties, 3, 1) \
947 V(DateNow, Operator::kNoProperties, 0, 1) \
948 V(DoubleArrayMax, Operator::kNoProperties, 1, 1) \
949 V(DoubleArrayMin, Operator::kNoProperties, 1, 1)
951#define SPECULATIVE_NUMBER_BINOP_LIST(V) \
952 SIMPLIFIED_SPECULATIVE_NUMBER_BINOP_LIST(V) \
953 V(SpeculativeNumberEqual) \
954 V(SpeculativeNumberLessThan) \
955 V(SpeculativeNumberLessThanOrEqual)
957#define CHECKED_OP_LIST(V) \
958 V(CheckEqualsInternalizedString, 2, 0) \
959 V(CheckEqualsSymbol, 2, 0) \
960 V(CheckHeapObject, 1, 1) \
961 V(CheckInternalizedString, 1, 1) \
962 V(CheckNotTaggedHole, 1, 1) \
963 V(CheckReceiver, 1, 1) \
964 V(CheckReceiverOrNullOrUndefined, 1, 1) \
965 V(CheckSymbol, 1, 1) \
966 V(CheckedInt32Add, 2, 1) \
967 V(CheckedInt32Div, 2, 1) \
968 V(CheckedInt32Mod, 2, 1) \
969 V(CheckedInt32Sub, 2, 1) \
970 V(CheckedUint32Div, 2, 1) \
971 V(CheckedUint32Mod, 2, 1) \
972 V(CheckedAdditiveSafeIntegerAdd, 2, 1) \
973 V(CheckedAdditiveSafeIntegerSub, 2, 1) \
974 V(CheckedInt64Add, 2, 1) \
975 V(CheckedInt64Sub, 2, 1) \
976 V(CheckedInt64Mul, 2, 1) \
977 V(CheckedInt64Div, 2, 1) \
978 V(CheckedInt64Mod, 2, 1)
980#define CHECKED_WITH_FEEDBACK_OP_LIST(V) \
981 V(CheckNumber, 1, 1) \
982 V(CheckNumberFitsInt32, 1, 1) \
984 V(CheckString, 1, 1) \
985 V(CheckStringOrStringWrapper, 1, 1) \
986 V(CheckBigInt, 1, 1) \
987 V(CheckedBigIntToBigInt64, 1, 1) \
988 V(CheckedInt32ToTaggedSigned, 1, 1) \
989 V(CheckedInt64ToInt32, 1, 1) \
990 V(CheckedInt64ToTaggedSigned, 1, 1) \
991 V(CheckedTaggedToArrayIndex, 1, 1) \
992 V(CheckedTaggedSignedToInt32, 1, 1) \
993 V(CheckedTaggedToTaggedPointer, 1, 1) \
994 V(CheckedTaggedToTaggedSigned, 1, 1) \
995 V(CheckedUint32ToInt32, 1, 1) \
996 V(CheckedUint32ToTaggedSigned, 1, 1) \
997 V(CheckedUint64ToInt32, 1, 1) \
998 V(CheckedUint64ToInt64, 1, 1) \
999 V(CheckedUint64ToTaggedSigned, 1, 1)
1001#define CHECKED_BOUNDS_OP_LIST(V) \
1002 V(CheckedUint32Bounds) \
1003 V(CheckedUint64Bounds)
1006#define PURE(Name, properties, value_input_count, control_input_count) \
1007 struct Name##Operator final : public Operator { \
1009 : Operator(IrOpcode::k##Name, Operator::kPure | properties, #Name, \
1010 value_input_count, 0, control_input_count, 1, 0, 0) {} \
1012 Name##Operator k##Name;
1016#define EFFECT_DEPENDENT(Name, properties, value_input_count, \
1017 control_input_count) \
1018 struct Name##Operator final : public Operator { \
1020 : Operator(IrOpcode::k##Name, Operator::kEliminatable | properties, \
1021 #Name, value_input_count, 1, control_input_count, 1, 1, \
1024 Name##Operator k##Name;
1026#undef EFFECT_DEPENDENT
1028#define CHECKED(Name, value_input_count, value_output_count) \
1029 struct Name##Operator final : public Operator { \
1031 : Operator(IrOpcode::k##Name, \
1032 Operator::kFoldable | Operator::kNoThrow, #Name, \
1033 value_input_count, 1, 1, value_output_count, 1, 0) {} \
1035 Name##Operator k##Name;
1039#define CHECKED_WITH_FEEDBACK(Name, value_input_count, value_output_count) \
1040 struct Name##Operator final : public Operator1<CheckParameters> { \
1042 : Operator1<CheckParameters>( \
1043 IrOpcode::k##Name, Operator::kFoldable | Operator::kNoThrow, \
1044 #Name, value_input_count, 1, 1, value_output_count, 1, 0, \
1045 CheckParameters(FeedbackSource())) {} \
1047 Name##Operator k##Name;
1049#undef CHECKED_WITH_FEEDBACK
1051#define CHECKED_BOUNDS(Name) \
1052 struct Name##Operator final : public Operator1<CheckBoundsParameters> { \
1053 Name##Operator(FeedbackSource feedback, CheckBoundsFlags flags) \
1054 : Operator1<CheckBoundsParameters>( \
1055 IrOpcode::k##Name, Operator::kFoldable | Operator::kNoThrow, \
1056 #Name, 2, 1, 1, 1, 1, 0, \
1057 CheckBoundsParameters(feedback, flags)) {} \
1059 Name##Operator k##Name = {FeedbackSource(), CheckBoundsFlags()}; \
1060 Name##Operator k##Name##Aborting = {FeedbackSource(), \
1061 CheckBoundsFlag::kAbortOnOutOfBounds};
1065 CheckBoundsOperator kCheckBoundsConverting = {
1067 CheckBoundsOperator kCheckBoundsAbortingAndConverting = {
1071#undef CHECKED_BOUNDS
1073 template <DeoptimizeReason kDeoptimizeReason>
1078 "CheckIf", 1, 1, 1, 0, 1, 0,
1081#define CHECK_IF(Name, message) \
1082 CheckIfOperator<DeoptimizeReason::k##Name> kCheckIf##Name;
1089 "FindOrderedHashMapEntry", 2, 1, 1, 1, 1, 0) {}
1097 "FindOrderedHashMapEntryForInt32Key", 2, 1, 1, 1, 1, 0) {}
1099 FindOrderedHashMapEntryForInt32KeyOperator
1105 "FindOrderedHashSetEntry", 2, 1, 1, 1, 1, 0) {}
1109 template <CheckForMinusZeroMode kMode>
1111 :
public Operator1<CheckForMinusZeroMode> {
1115 "ChangeFloat64ToTagged", 1, 0, 0, 1, 0, 0, kMode) {}
1117 ChangeFloat64ToTaggedOperator<CheckForMinusZeroMode::kCheckForMinusZero>
1122 template <CheckForMinusZeroMode kMode>
1124 :
public Operator1<CheckForMinusZeroMode> {
1129 1, 1, 1, 0, kMode) {}
1131 CheckedInt32MulOperator<CheckForMinusZeroMode::kCheckForMinusZero>
1136 template <CheckForMinusZeroMode kMode>
1138 :
public Operator1<CheckMinusZeroParameters> {
1146 CheckedFloat64ToInt32Operator<CheckForMinusZeroMode::kCheckForMinusZero>
1151 template <CheckForMinusZeroMode kMode>
1153 :
public Operator1<CheckMinusZeroParameters> {
1156 IrOpcode::kCheckedFloat64ToAdditiveSafeInteger,
1158 "CheckedFloat64ToAdditiveSafeInteger", 1, 1, 1, 1, 1, 0,
1161 CheckedFloat64ToAdditiveSafeIntegerOperator<
1162 CheckForMinusZeroMode::kCheckForMinusZero>
1165 CheckForMinusZeroMode::kDontCheckForMinusZero>
1168 template <CheckForMinusZeroMode kMode>
1170 :
public Operator1<CheckMinusZeroParameters> {
1178 CheckedFloat64ToInt64Operator<CheckForMinusZeroMode::kCheckForMinusZero>
1183 template <CheckForMinusZeroMode kMode>
1185 :
public Operator1<CheckMinusZeroParameters> {
1193 CheckedTaggedToInt32Operator<CheckForMinusZeroMode::kCheckForMinusZero>
1198 template <CheckForMinusZeroMode kMode>
1200 :
public Operator1<CheckMinusZeroParameters> {
1203 IrOpcode::kCheckedTaggedToAdditiveSafeInteger,
1205 "CheckedTaggedToAdditiveSafeInteger", 1, 1, 1, 1, 1, 0,
1208 CheckedTaggedToAdditiveSafeIntegerOperator<
1209 CheckForMinusZeroMode::kCheckForMinusZero>
1212 CheckForMinusZeroMode::kDontCheckForMinusZero>
1215 template <CheckForMinusZeroMode kMode>
1217 :
public Operator1<CheckMinusZeroParameters> {
1225 CheckedTaggedToInt64Operator<CheckForMinusZeroMode::kCheckForMinusZero>
1230 template <CheckTaggedInputMode kMode>
1232 :
public Operator1<CheckTaggedInputParameters> {
1237 "CheckedTaggedToFloat64", 1, 1, 1, 1, 1, 0,
1240 CheckedTaggedToFloat64Operator<CheckTaggedInputMode::kNumber>
1247 template <CheckTaggedInputMode kMode>
1249 :
public Operator1<CheckTaggedInputParameters> {
1252 IrOpcode::kCheckedTruncateTaggedToWord32,
1254 "CheckedTruncateTaggedToWord32", 1, 1, 1, 1, 1, 0,
1257 CheckedTruncateTaggedToWord32Operator<
1258 CheckTaggedInputMode::kAdditiveSafeInteger>
1265 template <ConvertReceiverMode kMode>
1275 ConvertReceiverOperator<ConvertReceiverMode::kAny>
1282 template <CheckFloat64HoleMode kMode>
1284 :
public Operator1<CheckFloat64HoleParameters> {
1292 CheckFloat64HoleNaNOperator<CheckFloat64HoleMode::kAllowReturnHole>
1300 IrOpcode::kEnsureWritableFastElements,
1302 "EnsureWritableFastElements",
1303 2, 1, 1, 1, 1, 0) {}
1307 template <GrowFastElementsMode kMode>
1309 :
public Operator1<GrowFastElementsParameters> {
1312 "MaybeGrowFastElements", 4, 1, 1, 1, 1, 0,
1316 GrowFastElementsOperator<GrowFastElementsMode::kDoubleElements>
1327 2, 1, 1, 1, 1, 0) {}
1336 "LoadStackArgument",
1337 2, 1, 1, 1, 1, 0) {}
1341#if V8_ENABLE_WEBASSEMBLY
1342 struct WasmArrayLengthOperator final :
public Operator1<bool> {
1343 explicit WasmArrayLengthOperator(
bool null_check)
1344 :
Operator1<bool>(IrOpcode::kWasmArrayLength, Operator::kEliminatable,
1345 "WasmArrayLength", 1, 1, 1, 1, 1, 1, null_check) {}
1347 WasmArrayLengthOperator kWasmArrayLengthNullCheck{
true};
1348 WasmArrayLengthOperator kWasmArrayLengthNoNullCheck{
false};
1350 struct WasmArrayInitializeLengthOperator final :
public Operator {
1351 WasmArrayInitializeLengthOperator()
1352 : Operator(IrOpcode::kWasmArrayInitializeLength,
1353 Operator::kNoThrow | Operator::kNoRead | Operator::kNoDeopt,
1354 "WasmArrayInitializeLength", 2, 1, 1, 0, 1, 0) {}
1356 WasmArrayInitializeLengthOperator kWasmArrayInitializeLength;
1358 struct StringAsWtf16Operator final :
public Operator {
1359 StringAsWtf16Operator()
1360 : Operator(IrOpcode::kStringAsWtf16,
1361 Operator::kEliminatable | Operator::kIdempotent,
1362 "StringAsWtf16", 1, 1, 1, 1, 1, 1) {}
1364 StringAsWtf16Operator kStringAsWtf16;
1366 struct StringPrepareForGetCodeunitOperator final :
public Operator {
1367 StringPrepareForGetCodeunitOperator()
1368 : Operator(IrOpcode::kStringPrepareForGetCodeunit,
1369 Operator::kEliminatable,
"StringPrepareForGetCodeunit", 1, 1,
1372 StringPrepareForGetCodeunitOperator kStringPrepareForGetCodeunit;
1376#define SPECULATIVE_NUMBER_BINOP(Name) \
1377 template <NumberOperationHint kHint> \
1378 struct Name##Operator final : public Operator1<NumberOperationHint> { \
1380 : Operator1<NumberOperationHint>( \
1381 IrOpcode::k##Name, Operator::kFoldable | Operator::kNoThrow, \
1382 #Name, 2, 1, 1, 1, 1, 0, kHint) {} \
1384 Name##Operator<NumberOperationHint::kSignedSmall> \
1385 k##Name##SignedSmallOperator; \
1386 Name##Operator<NumberOperationHint::kSignedSmallInputs> \
1387 k##Name##SignedSmallInputsOperator; \
1388 Name##Operator<NumberOperationHint::kAdditiveSafeInteger> \
1389 k##Name##SafeIntOperator; \
1390 Name##Operator<NumberOperationHint::kNumber> k##Name##NumberOperator; \
1391 Name##Operator<NumberOperationHint::kNumberOrOddball> \
1392 k##Name##NumberOrOddballOperator;
1394#undef SPECULATIVE_NUMBER_BINOP
1395 SpeculativeNumberEqualOperator<NumberOperationHint::kNumberOrBoolean>
1398 template <NumberOperationH
int kH
int>
1400 :
public Operator1<NumberOperationParameters> {
1408 SpeculativeToNumberOperator<NumberOperationHint::kSignedSmall>
1415 template <BigIntOperationH
int kH
int>
1417 :
public Operator1<BigIntOperationParameters> {
1425 SpeculativeToBigIntOperator<BigIntOperationHint::kBigInt64>
1430#ifdef V8_ENABLE_CONTINUATION_PRESERVED_EMBEDDER_DATA
1431 struct GetContinuationPreservedEmbedderDataOperator :
public Operator {
1432 GetContinuationPreservedEmbedderDataOperator()
1433 :
Operator(IrOpcode::kGetContinuationPreservedEmbedderData,
1434 Operator::kNoThrow | Operator::kNoDeopt | Operator::kNoWrite,
1435 "GetContinuationPreservedEmbedderData", 0, 1, 0, 1, 1, 0) {}
1437 GetContinuationPreservedEmbedderDataOperator
1438 kGetContinuationPreservedEmbedderData;
1440 struct SetContinuationPreservedEmbedderDataOperator :
public Operator {
1441 SetContinuationPreservedEmbedderDataOperator()
1444 "SetContinuationPreservedEmbedderData", 1, 1, 0, 0, 1, 0) {}
1446 SetContinuationPreservedEmbedderDataOperator
1447 kSetContinuationPreservedEmbedderData;
1453 GetSimplifiedOperatorGlobalCache)
1456SimplifiedOperatorBuilder::SimplifiedOperatorBuilder(
Zone* zone)
1457 : cache_(*GetSimplifiedOperatorGlobalCache()),
zone_(zone) {}
1459#define GET_FROM_CACHE(Name, ...) \
1460 const Operator* SimplifiedOperatorBuilder::Name() { return &cache_.k##Name; }
1466#undef GET_FROM_CACHE
1470 switch (collection_kind) {
1472 return &
cache_.kFindOrderedHashMapEntry;
1474 return &
cache_.kFindOrderedHashSetEntry;
1478#define GET_FROM_CACHE_WITH_FEEDBACK(Name, value_input_count, \
1479 value_output_count) \
1480 const Operator* SimplifiedOperatorBuilder::Name( \
1481 const FeedbackSource& feedback) { \
1482 if (!feedback.IsValid()) { \
1483 return &cache_.k##Name; \
1485 return zone()->New<Operator1<CheckParameters>>( \
1486 IrOpcode::k##Name, Operator::kFoldable | Operator::kNoThrow, #Name, \
1487 value_input_count, 1, 1, value_output_count, 1, 0, \
1488 CheckParameters(feedback)); \
1491#undef GET_FROM_CACHE_WITH_FEEDBACK
1493#define GET_FROM_CACHE_WITH_FEEDBACK(Name) \
1494 const Operator* SimplifiedOperatorBuilder::Name( \
1495 const FeedbackSource& feedback, CheckBoundsFlags flags) { \
1496 DCHECK(!(flags & CheckBoundsFlag::kConvertStringAndMinusZero)); \
1497 if (!feedback.IsValid()) { \
1498 if (flags & CheckBoundsFlag::kAbortOnOutOfBounds) { \
1499 return &cache_.k##Name##Aborting; \
1501 return &cache_.k##Name; \
1504 return zone()->New<SimplifiedOperatorGlobalCache::Name##Operator>( \
1508#undef GET_FROM_CACHE_WITH_FEEDBACK
1513 if (!feedback.IsValid()) {
1516 return &
cache_.kCheckBoundsAbortingAndConverting;
1518 return &
cache_.kCheckBoundsAborting;
1522 return &
cache_.kCheckBoundsConverting;
1524 return &
cache_.kCheckBounds;
1528 return zone()->
New<SimplifiedOperatorGlobalCache::CheckBoundsOperator>(
1533#define CASE(Name, ...) case IrOpcode::k##Name:
1544 IrOpcode::kRuntimeAbort,
1548 static_cast<int>(reason));
1553 CHECK(0 <= bits && bits <= 64);
1557 "SpeculativeBigIntAsIntN", 1, 1, 1, 1, 1, 0,
1563 CHECK(0 <= bits && bits <= 64);
1567 "SpeculativeBigIntAsUintN", 1, 1, 1, 1, 1, 0,
1572 DCHECK(type.CanBeAsserted());
1575 1, 0, 0, 1, 0,
type);
1581 "VerifyType", 1, 1, 0, 0, 1, 0);
1587 "CheckTurboshaftTypeOf", 2, 1, 1, 1, 1, 0);
1590#if V8_ENABLE_WEBASSEMBLY
1591const Operator* SimplifiedOperatorBuilder::WasmTypeCheck(
1595 "WasmTypeCheck", 2, 1, 1, 1, 1, 1, config);
1598const Operator* SimplifiedOperatorBuilder::WasmTypeCheckAbstract(
1599 WasmTypeCheckConfig config) {
1600 return zone_->
New<Operator1<WasmTypeCheckConfig>>(
1601 IrOpcode::kWasmTypeCheckAbstract,
1603 1, 1, 1, 1, 1, 1, config);
1606const Operator* SimplifiedOperatorBuilder::WasmTypeCast(
1607 WasmTypeCheckConfig config) {
1608 return zone_->
New<Operator1<WasmTypeCheckConfig>>(
1609 IrOpcode::kWasmTypeCast,
1611 "WasmTypeCast", 2, 1, 1, 1, 1, 1, config);
1614const Operator* SimplifiedOperatorBuilder::WasmTypeCastAbstract(
1615 WasmTypeCheckConfig config) {
1616 return zone_->
New<Operator1<WasmTypeCheckConfig>>(
1617 IrOpcode::kWasmTypeCastAbstract,
1619 "WasmTypeCastAbstract", 1, 1, 1, 1, 1, 1, config);
1622const Operator* SimplifiedOperatorBuilder::RttCanon(
1623 wasm::ModuleTypeIndex index) {
1625 "RttCanon", 1, 0, 0, 1, 0, 0, index.index);
1630struct IsNullOperator final :
public Operator1<wasm::ValueType> {
1631 explicit IsNullOperator(wasm::ValueType type)
1632 : Operator1(IrOpcode::kIsNull, Operator::kPure,
"IsNull", 1, 0, 1, 1, 0,
1636struct IsNotNullOperator final :
public Operator1<wasm::ValueType> {
1637 explicit IsNotNullOperator(wasm::ValueType type)
1638 : Operator1(IrOpcode::kIsNotNull, Operator::kPure,
"IsNotNull", 1, 0, 1,
1642struct NullOperator final :
public Operator1<wasm::ValueType> {
1643 explicit NullOperator(wasm::ValueType type)
1644 : Operator1(IrOpcode::
kNull, Operator::kPure,
"Null", 0, 0, 0, 1, 0, 0,
1648struct AssertNotNullOperator final :
public Operator1<AssertNotNullParameters> {
1649 explicit AssertNotNullOperator(wasm::ValueType type, TrapId trap_id)
1651 IrOpcode::kAssertNotNull,
1652 Operator::kNoWrite | Operator::kNoThrow | Operator::kIdempotent,
1653 "AssertNotNull", 1, 1, 1, 1, 1, 1, {
type, trap_id}) {}
1656const Operator* SimplifiedOperatorBuilder::Null(wasm::ValueType type) {
1660const Operator* SimplifiedOperatorBuilder::AssertNotNull(wasm::ValueType type,
1662 return zone()->
New<AssertNotNullOperator>(
type, trap_id);
1665const Operator* SimplifiedOperatorBuilder::IsNull(wasm::ValueType type) {
1668const Operator* SimplifiedOperatorBuilder::IsNotNull(wasm::ValueType type) {
1672const Operator* SimplifiedOperatorBuilder::StringAsWtf16() {
1673 return &
cache_.kStringAsWtf16;
1676const Operator* SimplifiedOperatorBuilder::StringPrepareForGetCodeunit() {
1677 return &
cache_.kStringPrepareForGetCodeunit;
1680const Operator* SimplifiedOperatorBuilder::WasmAnyConvertExtern() {
1681 return zone()->
New<Operator>(IrOpcode::kWasmAnyConvertExtern,
1686const Operator* SimplifiedOperatorBuilder::WasmExternConvertAny() {
1687 return zone()->
New<Operator>(IrOpcode::kWasmExternConvertAny,
1692const Operator* SimplifiedOperatorBuilder::WasmStructGet(
1693 const wasm::StructType* type,
int field_index,
bool is_signed,
1695 return zone()->
New<Operator1<WasmFieldInfo>>(
1697 1, 1, 1, 1, WasmFieldInfo{
type, field_index,
is_signed, null_check});
1700const Operator* SimplifiedOperatorBuilder::WasmStructSet(
1701 const wasm::StructType* type,
int field_index,
CheckForNull null_check) {
1702 return zone()->
New<Operator1<WasmFieldInfo>>(
1703 IrOpcode::kWasmStructSet,
1705 "WasmStructSet", 2, 1, 1, 0, 1, 1,
1706 WasmFieldInfo{
type, field_index,
true , null_check});
1709const Operator* SimplifiedOperatorBuilder::WasmArrayGet(
1710 const wasm::ArrayType* type,
bool is_signed) {
1711 return zone()->
New<Operator1<WasmElementInfo>>(
1716const Operator* SimplifiedOperatorBuilder::WasmArraySet(
1717 const wasm::ArrayType* type) {
1718 return zone()->
New<Operator1<const wasm::ArrayType*>>(
1719 IrOpcode::kWasmArraySet,
1721 "WasmArraySet", 3, 1, 1, 0, 1, 0,
type);
1724const Operator* SimplifiedOperatorBuilder::WasmArrayLength(
1727 : &
cache_.kWasmArrayLengthNoNullCheck;
1730const Operator* SimplifiedOperatorBuilder::WasmArrayInitializeLength() {
1731 return &
cache_.kWasmArrayInitializeLength;
1738 if (!feedback.IsValid()) {
1740#define CHECK_IF(Name, message) \
1741 case DeoptimizeReason::k##Name: \
1742 return &cache_.kCheckIf##Name;
1756 return &
cache_.kChangeFloat64ToTaggedCheckForMinusZeroOperator;
1758 return &
cache_.kChangeFloat64ToTaggedDontCheckForMinusZeroOperator;
1767 return &
cache_.kCheckedInt32MulCheckForMinusZeroOperator;
1769 return &
cache_.kCheckedInt32MulDontCheckForMinusZeroOperator;
1776 if (!feedback.IsValid()) {
1779 return &
cache_.kCheckedFloat64ToInt32CheckForMinusZeroOperator;
1781 return &
cache_.kCheckedFloat64ToInt32DontCheckForMinusZeroOperator;
1785 IrOpcode::kCheckedFloat64ToInt32,
1792 if (!feedback.IsValid()) {
1795 return &
cache_.kCheckedFloat64ToAddSafeIntCheckForMinusZeroOperator;
1797 return &
cache_.kCheckedFloat64ToAddSafeIntDontCheckForMinusZeroOperator;
1801 IrOpcode::kCheckedFloat64ToAdditiveSafeInteger,
1803 "CheckedFloat64ToAdditiveSafeInteger", 1, 1, 1, 1, 1, 0,
1809 if (!feedback.IsValid()) {
1812 return &
cache_.kCheckedFloat64ToInt64CheckForMinusZeroOperator;
1814 return &
cache_.kCheckedFloat64ToInt64DontCheckForMinusZeroOperator;
1818 IrOpcode::kCheckedFloat64ToInt64,
1825 if (!feedback.IsValid()) {
1828 return &
cache_.kCheckedTaggedToInt32CheckForMinusZeroOperator;
1830 return &
cache_.kCheckedTaggedToInt32DontCheckForMinusZeroOperator;
1835 "CheckedTaggedToInt32", 1, 1, 1, 1, 1, 0,
1841 if (!feedback.IsValid()) {
1844 return &
cache_.kCheckedTaggedToAddSafeIntCheckForMinusZeroOperator;
1846 return &
cache_.kCheckedTaggedToAddSafeIntDontCheckForMinusZeroOperator;
1850 IrOpcode::kCheckedTaggedToAdditiveSafeInteger,
1852 "CheckedTaggedToAdditiveSafeInteger", 1, 1, 1, 1, 1, 0,
1858 if (!feedback.IsValid()) {
1861 return &
cache_.kCheckedTaggedToInt64CheckForMinusZeroOperator;
1863 return &
cache_.kCheckedTaggedToInt64DontCheckForMinusZeroOperator;
1868 "CheckedTaggedToInt64", 1, 1, 1, 1, 1, 0,
1874 if (!feedback.IsValid()) {
1879 return &
cache_.kCheckedTaggedToFloat64NumberOperator;
1881 return &
cache_.kCheckedTaggedToFloat64NumberOrBooleanOperator;
1883 return &
cache_.kCheckedTaggedToFloat64NumberOrOddballOperator;
1887 IrOpcode::kCheckedTaggedToFloat64,
1894 if (!feedback.IsValid()) {
1898 .kCheckedTruncateTaggedToWord32AdditiveSafeIntegerOperator;
1900 return &
cache_.kCheckedTruncateTaggedToWord32NumberOperator;
1905 return &
cache_.kCheckedTruncateTaggedToWord32NumberOrOddballOperator;
1909 IrOpcode::kCheckedTruncateTaggedToWord32,
1924 IrOpcode::kCheckMaps,
1943 IrOpcode::kCompareMaps,
1954 return &
cache_.kConvertReceiverAnyOperator;
1956 return &
cache_.kConvertReceiverNullOrUndefinedOperator;
1958 return &
cache_.kConvertReceiverNotNullOrUndefinedOperator;
1965 if (!feedback.IsValid()) {
1968 return &
cache_.kCheckFloat64HoleAllowReturnHoleOperator;
1970 return &
cache_.kCheckFloat64HoleNeverReturnHoleOperator;
1976 "CheckFloat64Hole", 1, 1, 1, 1, 1, 0,
1981#define SPECULATIVE_BIGINT_BINOP(Name) \
1982 const Operator* SimplifiedOperatorBuilder::Name(BigIntOperationHint hint) { \
1983 return zone()->New<Operator1<BigIntOperationHint>>( \
1984 IrOpcode::k##Name, Operator::kFoldable | Operator::kNoThrow, #Name, 2, \
1985 1, 1, 1, 1, 0, hint); \
1991#undef SPECULATIVE_BIGINT_BINOP
1996 IrOpcode::kSpeculativeBigIntNegate,
2003 if (!feedback.IsValid()) {
2006 return &
cache_.kSpeculativeToBigIntBigInt64Operator;
2008 return &
cache_.kSpeculativeToBigIntBigIntOperator;
2013 "SpeculativeToBigInt", 1, 1, 1, 1, 1, 0,
2020 IrOpcode::kCheckClosure,
2034 if (!feedback.IsValid()) {
2037 return &
cache_.kSpeculativeToNumberSignedSmallOperator;
2042 return &
cache_.kSpeculativeToNumberNumberOperator;
2047 return &
cache_.kSpeculativeToNumberNumberOrOddballOperator;
2052 "SpeculativeToNumber", 1, 1, 1, 1, 1, 0,
2057 return &
cache_.kEnsureWritableFastElements;
2062 if (!feedback.IsValid()) {
2065 return &
cache_.kGrowFastElementsOperatorDoubleElements;
2067 return &
cache_.kGrowFastElementsOperatorSmiOrObjectElements;
2071 IrOpcode::kMaybeGrowFastElements,
2073 "MaybeGrowFastElements",
2081 IrOpcode::kTransitionElementsKind,
2083 "TransitionElementsKind",
2091 IrOpcode::kTransitionElementsKindOrCheckMap,
2093 "TransitionElementsKindOrCheckMap",
2100 IrOpcode::kArgumentsLength,
2107 int formal_parameter_count) {
2109 IrOpcode::kRestLength,
2113 formal_parameter_count);
2119 IrOpcode::kTypedArrayLength,
2128 op->
opcode() == IrOpcode::kRestLength);
2138 return feedback_hash(p.
feedback());
2146 if (op->
opcode() == IrOpcode::kCheckBounds ||
2147 op->
opcode() == IrOpcode::kCheckedUint32Bounds ||
2148 op->
opcode() == IrOpcode::kCheckedUint64Bounds) {
2151#define MAKE_OR(name, arg2, arg3) op->opcode() == IrOpcode::k##name ||
2174 op->
opcode() == IrOpcode::kCheckedUint32Bounds ||
2175 op->
opcode() == IrOpcode::kCheckedUint64Bounds);
2225 IrOpcode::kNewDoubleElements,
2227 "NewDoubleElements",
2235 IrOpcode::kNewSmiOrObjectElements,
2237 "NewSmiOrObjectElements",
2245 IrOpcode::kNewArgumentsElements,
2247 "NewArgumentsElements",
2250 formal_parameter_count));
2261 params.formal_parameter_count());
2266 return os << params.arguments_type()
2267 <<
", parameter_count = " << params.formal_parameter_count();
2290#define SPECULATIVE_NUMBER_BINOP(Name) \
2291 const Operator* SimplifiedOperatorBuilder::Name(NumberOperationHint hint) { \
2293 case NumberOperationHint::kSignedSmall: \
2294 return &cache_.k##Name##SignedSmallOperator; \
2295 case NumberOperationHint::kSignedSmallInputs: \
2296 return &cache_.k##Name##SignedSmallInputsOperator; \
2297 case NumberOperationHint::kAdditiveSafeInteger: \
2298 return &cache_.k##Name##SafeIntOperator; \
2299 case NumberOperationHint::kNumber: \
2300 return &cache_.k##Name##NumberOperator; \
2301 case NumberOperationHint::kNumberOrBoolean: \
2304 case NumberOperationHint::kNumberOrOddball: \
2305 return &cache_.k##Name##NumberOrOddballOperator; \
2313#undef SPECULATIVE_NUMBER_BINOP
2318 return &
cache_.kSpeculativeNumberEqualSignedSmallOperator;
2320 return &
cache_.kSpeculativeNumberEqualSignedSmallInputsOperator;
2323 return &
cache_.kSpeculativeNumberEqualNumberOperator;
2325 return &
cache_.kSpeculativeNumberEqualNumberOrBooleanOperator;
2327 return &
cache_.kSpeculativeNumberEqualNumberOrOddballOperator;
2332#define ACCESS_OP_LIST(V) \
2333 V(LoadField, FieldAccess, Operator::kNoWrite, 1, 1, 1) \
2334 V(LoadElement, ElementAccess, Operator::kNoWrite, 2, 1, 1) \
2335 V(StoreElement, ElementAccess, Operator::kNoRead, 3, 1, 0) \
2336 V(LoadTypedElement, ExternalArrayType, Operator::kNoWrite, 4, 1, 1) \
2337 V(StoreTypedElement, ExternalArrayType, Operator::kNoRead, 5, 1, 0) \
2338 V(LoadFromObject, ObjectAccess, Operator::kNoWrite, 2, 1, 1) \
2339 V(StoreToObject, ObjectAccess, Operator::kNoRead, 3, 1, 0) \
2340 V(LoadImmutableFromObject, ObjectAccess, Operator::kNoWrite, 2, 1, 1) \
2341 V(InitializeImmutableInObject, ObjectAccess, Operator::kNoRead, 3, 1, 0) \
2342 V(LoadDataViewElement, ExternalArrayType, Operator::kNoWrite, 4, 1, 1) \
2343 V(StoreDataViewElement, ExternalArrayType, Operator::kNoRead, 5, 1, 0)
2345#define ACCESS(Name, Type, properties, value_input_count, control_input_count, \
2347 const Operator* SimplifiedOperatorBuilder::Name(const Type& access) { \
2348 return zone()->New<Operator1<Type>>( \
2349 IrOpcode::k##Name, \
2350 Operator::kNoDeopt | Operator::kNoThrow | properties, #Name, \
2351 value_input_count, 1, control_input_count, output_count, 1, 0, \
2358 const FieldAccess& access,
bool maybe_initializing_or_transitioning) {
2361 maybe_initializing_or_transitioning;
2363 IrOpcode::kStoreField,
2365 2, 1, 1, 0, 1, 0, store_access);
2368#ifdef V8_ENABLE_CONTINUATION_PRESERVED_EMBEDDER_DATA
2370SimplifiedOperatorBuilder::GetContinuationPreservedEmbedderData() {
2371 return &
cache_.kGetContinuationPreservedEmbedderData;
2375SimplifiedOperatorBuilder::SetContinuationPreservedEmbedderData() {
2376 return &
cache_.kSetContinuationPreservedEmbedderData;
2382 "LoadMessage", 1, 1, 1, 1, 1, 0);
2387 IrOpcode::kStoreMessage,
2389 "StoreMessage", 2, 1, 1, 0, 1, 0);
2393 return &
cache_.kLoadStackArgument;
2398 TransitionAndStoreElementParameters parameters(double_map, fast_map);
2400 IrOpcode::kTransitionAndStoreElement,
2402 1, 1, 0, 1, 0, parameters);
2408 "StoreSignedSmallElement", 3, 1, 1, 0, 1, 0);
2413 TransitionAndStoreNumberElementParameters parameters(double_map);
2415 IrOpcode::kTransitionAndStoreNumberElement,
2417 "TransitionAndStoreNumberElement", 3, 1, 1, 0, 1, 0, parameters);
2422 TransitionAndStoreNonNumberElementParameters parameters(fast_map, value_type);
2424 IrOpcode::kTransitionAndStoreNonNumberElement,
2426 "TransitionAndStoreNonNumberElement", 3, 1, 1, 0, 1, 0, parameters);
2437 int slow_arg_count =
static_cast<int>(descriptor->
ParameterCount());
2439 int value_input_count =
2443 value_input_count, 1, 1, 1, 1, 2,
2465#undef EFFECT_DEPENDENT_OP_LIST
2466#undef SPECULATIVE_NUMBER_BINOP_LIST
2467#undef CHECKED_WITH_FEEDBACK_OP_LIST
2468#undef CHECKED_BOUNDS_OP_LIST
2469#undef CHECKED_OP_LIST
2470#undef ACCESS_OP_LIST
unsigned int ArgumentCount() const
AllocationType allocation_type() const
const FeedbackSource & feedback() const
BigIntOperationHint hint() const
size_t ParameterCount() const
CheckBoundsFlags flags() const
const CheckParameters & check_parameters() const
CheckFloat64HoleMode mode() const
FeedbackSource const & feedback() const
DeoptimizeReason reason() const
FeedbackSource const & feedback() const
ZoneRefSet< Map > const & maps() const
FeedbackSource const & feedback() const
CheckMapsFlags flags() const
const FeedbackSource & feedback() const
CheckForMinusZeroMode mode() const
FeedbackSource const & feedback() const
const ZoneRefSet< Map > & sources() const
constexpr int FastCallArgumentCount() const
static constexpr int kSlowCodeTarget
constexpr int SlowCallArgumentCount() const
static constexpr int ArityForArgc(int c_arg_count, int slow_arg_count)
static constexpr int kFrameState
FastApiCallFunction c_function() const
CallDescriptor * descriptor() const
FeedbackSource const & feedback() const
GrowFastElementsMode mode() const
const FeedbackSource & feedback() const
IndirectHandle< Map > object() const
CreateArgumentsType arguments_type() const
int formal_parameter_count() const
NumberOperationHint hint() const
const FeedbackSource & feedback() const
virtual void PrintParameter(std::ostream &os, PrintVerbosity verbose) const
constexpr Opcode opcode() const
const Operator * SpeculativeBigIntAsUintN(int bits, const FeedbackSource &feedback)
const Operator * AssertType(Type type)
const Operator * TransitionElementsKindOrCheckMap(ElementsTransitionWithMultipleSources transition)
const Operator * CheckedInt32Mul(CheckForMinusZeroMode)
const Operator * VerifyType()
const Operator * CheckTurboshaftTypeOf()
const Operator * CheckedTaggedToAdditiveSafeInteger(CheckForMinusZeroMode, const FeedbackSource &feedback)
const Operator * FindOrderedCollectionEntry(CollectionKind collection_kind)
const Operator * TransitionAndStoreElement(MapRef double_map, MapRef fast_map)
const Operator * SpeculativeBigIntAsIntN(int bits, const FeedbackSource &feedback)
const Operator * SpeculativeToBigInt(BigIntOperationHint hint, const FeedbackSource &feedback)
const Operator * CheckedTruncateTaggedToWord32(CheckTaggedInputMode, const FeedbackSource &feedback)
const Operator * ChangeFloat64ToTagged(CheckForMinusZeroMode)
const Operator * CompareMaps(ZoneRefSet< Map >)
const Operator * StoreSignedSmallElement()
const Operator * CheckedFloat64ToAdditiveSafeInteger(CheckForMinusZeroMode, const FeedbackSource &feedback)
const Operator * RuntimeAbort(AbortReason reason)
const Operator * CheckedTaggedToInt64(CheckForMinusZeroMode, const FeedbackSource &feedback)
const Operator * ConvertReceiver(ConvertReceiverMode)
const Operator * NewDoubleElements(AllocationType)
const Operator * CheckMaps(CheckMapsFlags, ZoneRefSet< Map >, const FeedbackSource &=FeedbackSource())
const Operator * CheckIf(DeoptimizeReason deoptimize_reason, const FeedbackSource &feedback=FeedbackSource())
const Operator * MapGuard(ZoneRefSet< Map > maps)
const Operator * TransitionAndStoreNumberElement(MapRef double_map)
const Operator * ArgumentsLength()
const Operator * EnsureWritableFastElements()
const Operator * CheckedTaggedToInt32(CheckForMinusZeroMode, const FeedbackSource &feedback)
const Operator * CheckedTaggedToFloat64(CheckTaggedInputMode, const FeedbackSource &feedback)
const Operator * MaybeGrowFastElements(GrowFastElementsMode mode, const FeedbackSource &feedback)
const Operator * LoadMessage()
const Operator * SpeculativeToNumber(NumberOperationHint hint, const FeedbackSource &feedback)
const Operator * CheckedFloat64ToInt64(CheckForMinusZeroMode, const FeedbackSource &feedback)
const Operator * LoadStackArgument()
const Operator * CheckBounds(const FeedbackSource &feedback, CheckBoundsFlags flags={})
const Operator * TransitionElementsKind(ElementsTransition transition)
const Operator * CheckFloat64Hole(CheckFloat64HoleMode, FeedbackSource const &)
const Operator * StoreField(FieldAccess const &, bool maybe_initializing_or_transitioning=true)
const Operator * TypedArrayLength(ElementsKind elements_kind)
const Operator * TransitionAndStoreNonNumberElement(MapRef fast_map, Type value_type)
const Operator * SpeculativeBigIntNegate(BigIntOperationHint hint)
const Operator * NewArgumentsElements(CreateArgumentsType type, int formal_parameter_count)
const Operator * CheckedFloat64ToInt32(CheckForMinusZeroMode, const FeedbackSource &feedback)
const Operator * CheckClosure(const Handle< FeedbackCell > &feedback_cell)
const SimplifiedOperatorGlobalCache & cache_
const Operator * AllocateRaw(Type type, AllocationType allocation=AllocationType::kYoung)
const Operator * RestLength(int formal_parameter_count)
const Operator * StoreMessage()
const Operator * SpeculativeNumberEqual(NumberOperationHint hint)
const Operator * FastApiCall(FastApiCallFunction c_function, FeedbackSource const &feedback, CallDescriptor *descriptor)
const Operator * Allocate(Type type, AllocationType allocation=AllocationType::kYoung)
const Operator * NewSmiOrObjectElements(AllocationType)
const FeedbackSource & feedback() const
#define DEOPTIMIZE_REASON_LIST(V)
#define DEFINE_LAZY_LEAKY_OBJECT_GETTER(T, FunctionName,...)
#define PURE(Name, properties, value_input_count, control_input_count, output_count)
V8_INLINE size_t hash_value(unsigned int v)
V8_INLINE size_t hash_combine(size_t seed, size_t hash)
bool operator==(PointerWithPayload< PointerType, PayloadType, NumPayloadBits > lhs, PointerWithPayload< PointerType, PayloadType, NumPayloadBits > rhs)
NumberOperationParameters const & NumberOperationParametersOf(Operator const *op)
FastApiCallParameters const & FastApiCallParametersOf(const Operator *op)
const GrowFastElementsParameters & GrowFastElementsParametersOf(const Operator *op)
@ kTryMigrateInstanceAndDeopt
CheckParameters const & CheckParametersOf(Operator const *op)
@ kConvertStringAndMinusZero
const CheckTaggedInputParameters & CheckTaggedInputParametersOf(const Operator *op)
const NewArgumentsElementsParameters & NewArgumentsElementsParametersOf(const Operator *op)
CheckMapsParameters const & CheckMapsParametersOf(Operator const *op)
CheckFloat64HoleParameters const & CheckFloat64HoleParametersOf(Operator const *op)
CheckIfParameters const & CheckIfParametersOf(Operator const *op)
const CheckMinusZeroParameters & CheckMinusZeroParametersOf(const Operator *op)
int FormalParameterCountOf(const Operator *op)
ZoneRefSet< Map > const & MapGuardMapsOf(Operator const *op)
NumberOperationHint NumberOperationHintOf(const Operator *op)
const FieldAccess & FieldAccessOf(const Operator *op)
const ElementAccess & ElementAccessOf(const Operator *op)
const AllocateParameters & AllocateParametersOf(const Operator *op)
ZoneRefSet< Map > const & CompareMapsParametersOf(Operator const *op)
CheckBoundsParameters const & CheckBoundsParametersOf(Operator const *op)
const ObjectAccess & ObjectAccessOf(const Operator *op)
Type AllocateTypeOf(const Operator *op)
MapRef FastMapParameterOf(const Operator *op)
Handle< FeedbackCell > FeedbackCellOf(const Operator *op)
Type ValueTypeParameterOf(const Operator *op)
size_t hash_value(const BranchParameters &p)
ExternalArrayType ExternalArrayTypeOf(const Operator *op)
T const & OpParameter(const Operator *op)
ConvertReceiverMode ConvertReceiverModeOf(Operator const *op)
AllocationType AllocationTypeOf(const Operator *op)
bool operator!=(DeoptimizeParameters lhs, DeoptimizeParameters rhs)
bool operator==(const BranchParameters &lhs, const BranchParameters &rhs)
CheckForMinusZeroMode CheckMinusZeroModeOf(const Operator *op)
ElementsTransitionWithMultipleSources const & ElementsTransitionWithMultipleSourcesOf(const Operator *op)
std::ostream & operator<<(std::ostream &os, AccessMode access_mode)
BigIntOperationParameters const & BigIntOperationParametersOf(Operator const *op)
ElementsTransition const & ElementsTransitionOf(const Operator *op)
AbortReason AbortReasonOf(const Operator *op)
SpeculativeBigIntAsNParameters const & SpeculativeBigIntAsNParametersOf(Operator const *op)
bool IsCheckedWithFeedback(const Operator *op)
BigIntOperationHint BigIntOperationHintOf(const Operator *op)
MapRef DoubleMapParameterOf(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 name
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
bool is_signed(Condition cond)
#define SIMPLIFIED_SPECULATIVE_BIGINT_BINOP_LIST(V)
#define SIMPLIFIED_SPECULATIVE_NUMBER_BINOP_LIST(V)
#define SPECULATIVE_BIGINT_BINOP(Name)
#define SPECULATIVE_NUMBER_BINOP(Name)
std::ostream & operator<<(std::ostream &os, const Operation &operation)
#define GET_FROM_CACHE(Name,...)
#define CHECKED_WITH_FEEDBACK_OP_LIST(V)
#define ACCESS_OP_LIST(V)
#define GET_FROM_CACHE_WITH_FEEDBACK(Name, value_input_count, value_output_count)
#define SPECULATIVE_NUMBER_BINOP_LIST(V)
#define CHECKED(Name, value_input_count, value_output_count)
#define CHECKED_WITH_FEEDBACK(Name, value_input_count, value_output_count)
#define ACCESS(Name, Type, properties, value_input_count, control_input_count, output_count)
#define CHECK_IF(Name, message)
#define CHECKED_OP_LIST(V)
#define EFFECT_DEPENDENT(Name, properties, value_input_count, control_input_count)
#define CHECKED_BOUNDS_OP_LIST(V)
#define CHECKED_BOUNDS(Name)
#define MAKE_OR(name, arg2, arg3)
#define EFFECT_DEPENDENT_OP_LIST(V)
#define DCHECK_NOT_NULL(val)
#define CHECK_NOT_NULL(val)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_EQ(v1, v2)
#define V8_EXPORT_PRIVATE
BaseTaggedness base_is_tagged
const CFunctionInfo * signature
bool maybe_initializing_or_transitioning_store
BaseTaggedness base_is_tagged
ConstFieldInfo const_field_info
WriteBarrierKind write_barrier_kind
ChangeFloat64ToTaggedOperator()
CheckFloat64HoleNaNOperator()
CheckedFloat64ToAdditiveSafeIntegerOperator()
CheckedFloat64ToInt32Operator()
CheckedFloat64ToInt64Operator()
CheckedInt32MulOperator()
CheckedTaggedToAdditiveSafeIntegerOperator()
CheckedTaggedToFloat64Operator()
CheckedTaggedToInt32Operator()
CheckedTaggedToInt64Operator()
CheckedTruncateTaggedToWord32Operator()
ConvertReceiverOperator()
EnsureWritableFastElementsOperator()
FindOrderedHashMapEntryForInt32KeyOperator()
FindOrderedHashMapEntryOperator()
FindOrderedHashSetEntryOperator()
GrowFastElementsOperator()
LoadFieldByIndexOperator()
LoadStackArgumentOperator()
SpeculativeToBigIntOperator()
SpeculativeToNumberOperator()
CheckFloat64HoleNaNOperator< CheckFloat64HoleMode::kAllowReturnHole > kCheckFloat64HoleAllowReturnHoleOperator
CheckedTaggedToFloat64Operator< CheckTaggedInputMode::kNumber > kCheckedTaggedToFloat64NumberOperator
CheckedTruncateTaggedToWord32Operator< CheckTaggedInputMode::kAdditiveSafeInteger > kCheckedTruncateTaggedToWord32AdditiveSafeIntegerOperator
CheckedFloat64ToInt64Operator< CheckForMinusZeroMode::kCheckForMinusZero > kCheckedFloat64ToInt64CheckForMinusZeroOperator
FindOrderedHashMapEntryOperator kFindOrderedHashMapEntry
GrowFastElementsOperator< GrowFastElementsMode::kSmiOrObjectElements > kGrowFastElementsOperatorSmiOrObjectElements
CheckedTaggedToFloat64Operator< CheckTaggedInputMode::kNumberOrOddball > kCheckedTaggedToFloat64NumberOrOddballOperator
ConvertReceiverOperator< ConvertReceiverMode::kNullOrUndefined > kConvertReceiverNullOrUndefinedOperator
CheckFloat64HoleNaNOperator< CheckFloat64HoleMode::kNeverReturnHole > kCheckFloat64HoleNeverReturnHoleOperator
ChangeFloat64ToTaggedOperator< CheckForMinusZeroMode::kDontCheckForMinusZero > kChangeFloat64ToTaggedDontCheckForMinusZeroOperator
GrowFastElementsOperator< GrowFastElementsMode::kDoubleElements > kGrowFastElementsOperatorDoubleElements
SpeculativeToNumberOperator< NumberOperationHint::kNumberOrOddball > kSpeculativeToNumberNumberOrOddballOperator
CheckedFloat64ToAdditiveSafeIntegerOperator< CheckForMinusZeroMode::kCheckForMinusZero > kCheckedFloat64ToAddSafeIntCheckForMinusZeroOperator
CheckedInt32MulOperator< CheckForMinusZeroMode::kCheckForMinusZero > kCheckedInt32MulCheckForMinusZeroOperator
ConvertReceiverOperator< ConvertReceiverMode::kAny > kConvertReceiverAnyOperator
CheckedTaggedToInt32Operator< CheckForMinusZeroMode::kDontCheckForMinusZero > kCheckedTaggedToInt32DontCheckForMinusZeroOperator
CheckedTruncateTaggedToWord32Operator< CheckTaggedInputMode::kNumber > kCheckedTruncateTaggedToWord32NumberOperator
LoadFieldByIndexOperator kLoadFieldByIndex
CheckedFloat64ToInt64Operator< CheckForMinusZeroMode::kDontCheckForMinusZero > kCheckedFloat64ToInt64DontCheckForMinusZeroOperator
CheckedFloat64ToInt32Operator< CheckForMinusZeroMode::kCheckForMinusZero > kCheckedFloat64ToInt32CheckForMinusZeroOperator
CheckedTruncateTaggedToWord32Operator< CheckTaggedInputMode::kNumberOrOddball > kCheckedTruncateTaggedToWord32NumberOrOddballOperator
CheckedTaggedToAdditiveSafeIntegerOperator< CheckForMinusZeroMode::kCheckForMinusZero > kCheckedTaggedToAddSafeIntCheckForMinusZeroOperator
ConvertReceiverOperator< ConvertReceiverMode::kNotNullOrUndefined > kConvertReceiverNotNullOrUndefinedOperator
CheckedTaggedToInt64Operator< CheckForMinusZeroMode::kCheckForMinusZero > kCheckedTaggedToInt64CheckForMinusZeroOperator
SpeculativeNumberEqualOperator< NumberOperationHint::kNumberOrBoolean > kSpeculativeNumberEqualNumberOrBooleanOperator
SpeculativeToBigIntOperator< BigIntOperationHint::kBigInt64 > kSpeculativeToBigIntBigInt64Operator
SpeculativeToNumberOperator< NumberOperationHint::kSignedSmall > kSpeculativeToNumberSignedSmallOperator
LoadStackArgumentOperator kLoadStackArgument
CheckedTaggedToInt32Operator< CheckForMinusZeroMode::kCheckForMinusZero > kCheckedTaggedToInt32CheckForMinusZeroOperator
SpeculativeToNumberOperator< NumberOperationHint::kNumber > kSpeculativeToNumberNumberOperator
FindOrderedHashSetEntryOperator kFindOrderedHashSetEntry
CheckedFloat64ToInt32Operator< CheckForMinusZeroMode::kDontCheckForMinusZero > kCheckedFloat64ToInt32DontCheckForMinusZeroOperator
SpeculativeToBigIntOperator< BigIntOperationHint::kBigInt > kSpeculativeToBigIntBigIntOperator
FindOrderedHashMapEntryForInt32KeyOperator kFindOrderedHashMapEntryForInt32Key
CheckedFloat64ToAdditiveSafeIntegerOperator< CheckForMinusZeroMode::kDontCheckForMinusZero > kCheckedFloat64ToAddSafeIntDontCheckForMinusZeroOperator
EnsureWritableFastElementsOperator kEnsureWritableFastElements
CheckedTaggedToFloat64Operator< CheckTaggedInputMode::kNumberOrBoolean > kCheckedTaggedToFloat64NumberOrBooleanOperator
CheckedInt32MulOperator< CheckForMinusZeroMode::kDontCheckForMinusZero > kCheckedInt32MulDontCheckForMinusZeroOperator
CheckedTaggedToAdditiveSafeIntegerOperator< CheckForMinusZeroMode::kDontCheckForMinusZero > kCheckedTaggedToAddSafeIntDontCheckForMinusZeroOperator
ChangeFloat64ToTaggedOperator< CheckForMinusZeroMode::kCheckForMinusZero > kChangeFloat64ToTaggedCheckForMinusZeroOperator
CheckedTaggedToInt64Operator< CheckForMinusZeroMode::kDontCheckForMinusZero > kCheckedTaggedToInt64DontCheckForMinusZeroOperator