5#ifndef V8_MAGLEV_MAGLEV_IR_H_
6#define V8_MAGLEV_MAGLEV_IR_H_
61class MaglevCodeGenState;
62class MaglevCompilationUnit;
63class MaglevGraphLabeller;
64class MaglevVregAllocationState;
65class CompactInterpreterFrameState;
66class MergePointInterpreterFrameState;
67class ExceptionHandlerInfo;
76#define GENERIC_OPERATIONS_NODE_LIST(V) \
82 V(GenericExponentiate) \
83 V(GenericBitwiseAnd) \
85 V(GenericBitwiseXor) \
87 V(GenericShiftRight) \
88 V(GenericShiftRightLogical) \
89 V(GenericBitwiseNot) \
94 V(GenericStrictEqual) \
96 V(GenericLessThanOrEqual) \
97 V(GenericGreaterThan) \
98 V(GenericGreaterThanOrEqual)
100#define INT32_OPERATIONS_NODE_LIST(V) \
101 V(Int32AbsWithOverflow) \
102 V(Int32AddWithOverflow) \
103 V(Int32SubtractWithOverflow) \
104 V(Int32MultiplyWithOverflow) \
105 V(Int32DivideWithOverflow) \
106 V(Int32ModulusWithOverflow) \
112 V(Int32ShiftRightLogical) \
114 V(Int32NegateWithOverflow) \
115 V(Int32IncrementWithOverflow) \
116 V(Int32DecrementWithOverflow) \
120#define FLOAT64_OPERATIONS_NODE_LIST(V) \
126 V(Float64Exponentiate) \
131 V(Float64ToBoolean) \
132 V(Float64Ieee754Unary)
134#define SMI_OPERATIONS_NODE_LIST(V) \
135 V(CheckedSmiIncrement) \
136 V(CheckedSmiDecrement)
138#define CONSTANT_VALUE_NODE_LIST(V) \
140 V(ExternalConstant) \
146 V(TaggedIndexConstant) \
149#define INLINE_BUILTIN_NODE_LIST(V) \
150 V(BuiltinStringFromCharCode) \
151 V(BuiltinStringPrototypeCharCodeOrCodePointAt)
153#define TURBOLEV_VALUE_NODE_LIST(V) \
154 V(CreateFastArrayElements) \
156 V(MapPrototypeGetInt32Key) \
159#define TURBOLEV_NON_VALUE_NODE_LIST(V) V(TransitionAndStoreArrayElement)
161#define VALUE_NODE_LIST(V) \
164 V(ArgumentsElements) \
170 V(CallForwardVarargs) \
172 V(CallWithArrayLike) \
174 V(CallKnownApiFunction) \
175 V(CallKnownJSFunction) \
178 V(CheckConstructResult) \
179 V(CheckDerivedConstructResult) \
180 V(ConstructWithSpread) \
182 V(ConvertHoleToUndefined) \
183 V(CreateArrayLiteral) \
184 V(CreateShallowArrayLiteral) \
185 V(CreateObjectLiteral) \
186 V(CreateShallowObjectLiteral) \
187 V(CreateFunctionContext) \
189 V(FastCreateClosure) \
190 V(CreateRegExpLiteral) \
192 V(EnsureWritableFastElements) \
193 V(ExtendPropertiesBackingStore) \
194 V(InlinedAllocation) \
197 V(GeneratorRestoreRegister) \
199 V(GetSecondReturnedValue) \
200 V(GetTemplateObject) \
201 V(HasInPrototypeChain) \
204 V(LoadTaggedFieldForProperty) \
205 V(LoadTaggedFieldForContextSlot) \
206 V(LoadTaggedFieldForScriptContextSlot) \
211 V(LoadTaggedFieldByFieldIndex) \
212 V(LoadFixedArrayElement) \
213 V(LoadFixedDoubleArrayElement) \
214 V(LoadHoleyFixedDoubleArrayElement) \
215 V(LoadHoleyFixedDoubleArrayElementCheckedNotHole) \
216 V(LoadSignedIntDataViewElement) \
217 V(LoadDoubleDataViewElement) \
218 V(LoadTypedArrayLength) \
219 V(LoadSignedIntTypedArrayElement) \
220 V(LoadUnsignedIntTypedArrayElement) \
221 V(LoadDoubleTypedArrayElement) \
222 V(LoadEnumCacheLength) \
224 V(LoadNamedGeneric) \
225 V(LoadNamedFromSuperGeneric) \
226 V(MaybeGrowFastElements) \
227 V(MigrateMapIfNeeded) \
229 V(DefineNamedOwnGeneric) \
230 V(StoreInArrayLiteralGeneric) \
234 V(DefineKeyedOwnGeneric) \
237 V(CheckedSmiSizedInt32) \
238 V(CheckedSmiTagInt32) \
239 V(CheckedSmiTagUint32) \
240 V(CheckedSmiTagIntPtr) \
241 V(UnsafeSmiTagInt32) \
242 V(UnsafeSmiTagUint32) \
243 V(UnsafeSmiTagIntPtr) \
246 V(CheckedInternalizedString) \
247 V(CheckedObjectToIndex) \
248 V(CheckedTruncateNumberOrOddballToInt32) \
249 V(CheckedInt32ToUint32) \
250 V(CheckedIntPtrToUint32) \
251 V(UnsafeInt32ToUint32) \
252 V(CheckedUint32ToInt32) \
253 V(CheckedIntPtrToInt32) \
254 V(ChangeInt32ToFloat64) \
255 V(ChangeUint32ToFloat64) \
256 V(ChangeIntPtrToFloat64) \
257 V(CheckedTruncateFloat64ToInt32) \
258 V(CheckedTruncateFloat64ToUint32) \
259 V(TruncateNumberOrOddballToInt32) \
260 V(TruncateUint32ToInt32) \
261 V(TruncateFloat64ToInt32) \
262 V(UnsafeTruncateUint32ToInt32) \
263 V(UnsafeTruncateFloat64ToInt32) \
264 V(Int32ToUint8Clamped) \
265 V(Uint32ToUint8Clamped) \
266 V(Float64ToUint8Clamped) \
267 V(CheckedNumberToUint8Clamped) \
273 V(Float64ToHeapNumberForField) \
274 V(HoleyFloat64ToTagged) \
275 V(CheckedSmiTagFloat64) \
276 V(CheckedNumberToInt32) \
277 V(CheckedNumberOrOddballToFloat64) \
278 V(UncheckedNumberOrOddballToFloat64) \
279 V(CheckedNumberOrOddballToHoleyFloat64) \
280 V(CheckedHoleyFloat64ToFloat64) \
281 V(HoleyFloat64ToMaybeNanFloat64) \
282 V(HoleyFloat64IsHole) \
284 V(SetPendingMessage) \
290 V(UnwrapThinString) \
291 V(UnwrapStringWrapper) \
293 V(ToBooleanLogicalNot) \
294 V(AllocateElementsArray) \
298 V(TestUndetectable) \
301 V(ToNumberOrNumeric) \
304 V(TransitionElementsKind) \
306 V(UpdateJSArrayLength) \
308 V(GetContinuationPreservedEmbedderData) \
309 CONSTANT_VALUE_NODE_LIST(V) \
310 INT32_OPERATIONS_NODE_LIST(V) \
311 FLOAT64_OPERATIONS_NODE_LIST(V) \
312 SMI_OPERATIONS_NODE_LIST(V) \
313 GENERIC_OPERATIONS_NODE_LIST(V) \
314 INLINE_BUILTIN_NODE_LIST(V) \
315 TURBOLEV_VALUE_NODE_LIST(V)
317#define GAP_MOVE_NODE_LIST(V) \
321#define NON_VALUE_NODE_LIST(V) \
323 V(CheckDynamicValue) \
325 V(CheckUint32IsSmi) \
326 V(CheckIntPtrIsSmi) \
327 V(CheckHoleyFloat64IsSmi) \
329 V(CheckInt32Condition) \
330 V(CheckCacheIndicesNotCleared) \
331 V(CheckJSDataViewBounds) \
332 V(CheckTypedArrayBounds) \
333 V(CheckTypedArrayNotDetached) \
335 V(CheckMapsWithMigrationAndDeopt) \
336 V(CheckMapsWithMigration) \
337 V(CheckMapsWithAlreadyLoadedMap) \
338 V(CheckDetectableCallable) \
339 V(CheckJSReceiverOrNullOrUndefined) \
341 V(CheckHoleyFloat64NotHole) \
345 V(CheckStringOrStringWrapper) \
348 V(CheckValueEqualsInt32) \
349 V(CheckFloat64SameValue) \
350 V(CheckValueEqualsString) \
351 V(CheckInstanceType) \
354 V(FunctionEntryStackCheck) \
356 V(TryOnStackReplacement) \
358 V(StoreDoubleField) \
360 V(StoreFixedArrayElementWithWriteBarrier) \
361 V(StoreFixedArrayElementNoWriteBarrier) \
362 V(StoreFixedDoubleArrayElement) \
365 V(StoreIntTypedArrayElement) \
366 V(StoreDoubleTypedArrayElement) \
367 V(StoreSignedIntDataViewElement) \
368 V(StoreDoubleDataViewElement) \
369 V(StoreTaggedFieldNoWriteBarrier) \
370 V(StoreTaggedFieldWithWriteBarrier) \
371 V(StoreScriptContextSlotWithWriteBarrier) \
372 V(StoreTrustedPointerFieldWithWriteBarrier) \
373 V(HandleNoHeapWritesInterrupt) \
374 V(ReduceInterruptBudgetForLoop) \
375 V(ReduceInterruptBudgetForReturn) \
376 V(ThrowReferenceErrorIfHole) \
377 V(ThrowSuperNotCalledIfHole) \
378 V(ThrowSuperAlreadyCalledIfNotHole) \
379 V(ThrowIfNotCallable) \
380 V(ThrowIfNotSuperConstructor) \
381 V(TransitionElementsKindOrCheckMap) \
382 V(SetContinuationPreservedEmbedderData) \
383 GAP_MOVE_NODE_LIST(V) \
384 TURBOLEV_NON_VALUE_NODE_LIST(V)
386#define NODE_LIST(V) \
387 NON_VALUE_NODE_LIST(V) \
390#define BRANCH_CONTROL_NODE_LIST(V) \
392 V(BranchIfRootConstant) \
393 V(BranchIfToBooleanTrue) \
394 V(BranchIfInt32ToBooleanTrue) \
395 V(BranchIfIntPtrToBooleanTrue) \
396 V(BranchIfFloat64ToBooleanTrue) \
397 V(BranchIfFloat64IsHole) \
398 V(BranchIfReferenceEqual) \
399 V(BranchIfInt32Compare) \
400 V(BranchIfUint32Compare) \
401 V(BranchIfFloat64Compare) \
402 V(BranchIfUndefinedOrNull) \
403 V(BranchIfUndetectable) \
404 V(BranchIfJSReceiver) \
407#define CONDITIONAL_CONTROL_NODE_LIST(V) \
409 BRANCH_CONTROL_NODE_LIST(V)
411#define UNCONDITIONAL_CONTROL_NODE_LIST(V) \
413 V(CheckpointedJump) \
416#define TERMINAL_CONTROL_NODE_LIST(V) \
421#define CONTROL_NODE_LIST(V) \
422 TERMINAL_CONTROL_NODE_LIST(V) \
423 CONDITIONAL_CONTROL_NODE_LIST(V) \
424 UNCONDITIONAL_CONTROL_NODE_LIST(V)
426#define NODE_BASE_LIST(V) \
431#define DEF_OPCODES(type) k##type,
434#define PLUS_ONE(type) +1
445#define V(Name) Opcode::k##Name,
497 case Opcode::kFloat64Add:
498 case Opcode::kFloat64Multiply:
499 case Opcode::kGenericStrictEqual:
500 case Opcode::kInt32AddWithOverflow:
501 case Opcode::kInt32BitwiseAnd:
502 case Opcode::kInt32BitwiseOr:
503 case Opcode::kInt32BitwiseXor:
504 case Opcode::kInt32MultiplyWithOverflow:
505 case Opcode::kStringEqual:
506 case Opcode::kTaggedEqual:
507 case Opcode::kTaggedNotEqual:
515 case Opcode::kTruncateUint32ToInt32:
516 case Opcode::kUnsafeTruncateUint32ToInt32:
517 case Opcode::kIdentity:
548 return opcode == Opcode::kStoreTaggedFieldWithWriteBarrier ||
549 opcode == Opcode::kStoreTaggedFieldNoWriteBarrier ||
550 opcode == Opcode::kStoreDoubleField ||
551 opcode == Opcode::kStoreHeapInt32 || opcode == Opcode::kStoreFloat64 ||
552 opcode == Opcode::kStoreInt32 ||
553 opcode == Opcode::kUpdateJSArrayLength ||
554 opcode == Opcode::kStoreFixedArrayElementWithWriteBarrier ||
555 opcode == Opcode::kStoreFixedArrayElementNoWriteBarrier ||
556 opcode == Opcode::kStoreFixedDoubleArrayElement ||
557 opcode == Opcode::kStoreTrustedPointerFieldWithWriteBarrier;
560 return opcode == Opcode::kMaybeGrowFastElements ||
561 opcode == Opcode::kEnsureWritableFastElements;
564 return opcode == Opcode::kStoreIntTypedArrayElement ||
565 opcode == Opcode::kStoreDoubleTypedArrayElement;
570 case Opcode::kStoreMap:
571 case Opcode::kStoreInt32:
572 case Opcode::kStoreTrustedPointerFieldWithWriteBarrier:
573 case Opcode::kStoreTaggedFieldWithWriteBarrier:
574 case Opcode::kStoreTaggedFieldNoWriteBarrier:
575 case Opcode::kStoreScriptContextSlotWithWriteBarrier:
576 case Opcode::kStoreFloat64:
586class ConditionalControlNode;
587class BranchControlNode;
588class UnconditionalControlNode;
589class TerminalControlNode;
607#if defined(V8_TARGET_ARCH_RISCV64)
619#define LEAF_NODE_TYPE_LIST(V) \
621 V(HeapNumber, (1 << 1)) \
622 V(NullOrUndefined, (1 << 2)) \
623 V(Boolean, (1 << 3)) \
624 V(Symbol, (1 << 4)) \
625 V(ThinString, (1 << 5)) \
626 V(InternalizedString, (1 << 6)) \
627 V(NonInternalizedNonThinString, (1 << 7)) \
628 V(StringWrapper, (1 << 8)) \
629 V(JSArray, (1 << 9)) \
630 V(Callable, (1 << 10)) \
631 V(OtherJSReceiver, (1 << 11)) \
632 V(OtherHeapObject, (1 << 12))
634#define COMBINED_NODE_TYPE_LIST(V) \
636 V(Unknown, ((1 << 13) - 1)) \
637 V(Oddball, kNullOrUndefined | kBoolean) \
638 V(Number, kSmi | kHeapNumber) \
639 V(NumberOrBoolean, kNumber | kBoolean) \
640 V(NumberOrOddball, kNumber | kOddball) \
641 V(NonThinString, kInternalizedString | kNonInternalizedNonThinString) \
642 V(String, kThinString | kNonThinString) \
643 V(StringOrStringWrapper, kString | kStringWrapper) \
644 V(Name, kString | kSymbol) \
645 V(JSReceiver, kJSArray | kCallable | kStringWrapper | kOtherJSReceiver) \
646 V(JSReceiverOrNullOrUndefined, kJSReceiver | kNullOrUndefined) \
647 V(AnyHeapObject, kUnknown - kSmi)
649#define NODE_TYPE_LIST(V) \
650 LEAF_NODE_TYPE_LIST(V) \
651 COMBINED_NODE_TYPE_LIST(V)
654#define DEFINE_NODE_TYPE(Name, Value) k##Name = Value,
656#undef DEFINE_NODE_TYPE
662 return static_cast<NodeType>(
static_cast<int>(left) &
663 static_cast<int>(right));
666 return static_cast<NodeType>(
static_cast<int>(left) |
667 static_cast<int>(right));
670 int right =
static_cast<int>(to_check);
671 return (
static_cast<int>(type) & (~right)) == 0;
675#define ADD_STATIC_ASSERT(Name, Value) \
676 static_assert(NodeTypeIs(NodeType::k##Name, NodeType::kUnknown));
678#undef ADD_STATIC_ASSERT
682 if (map.IsHeapNumberMap())
return NodeType::kHeapNumber;
683 if (map.IsStringMap()) {
684 if (map.IsInternalizedStringMap())
return NodeType::kInternalizedString;
685 if (map.IsThinStringMap())
return NodeType::kThinString;
686 return NodeType::kNonInternalizedNonThinString;
688 if (map.IsStringWrapperMap())
return NodeType::kStringWrapper;
689 if (map.IsSymbolMap())
return NodeType::kSymbol;
690 if (map.IsBooleanMap(
broker))
return NodeType::kBoolean;
691 if (map.IsOddballMap()) {
693 return NodeType::kNullOrUndefined;
695 if (map.IsJSArrayMap())
return NodeType::kJSArray;
696 if (map.is_callable()) {
697 return NodeType::kCallable;
699 if (map.IsJSReceiverMap()) {
701 return NodeType::kOtherJSReceiver;
703 return NodeType::kOtherHeapObject;
708 return static_cast<int>(
type) == 0;
712 compiler::ObjectRef ref) {
713 if (ref.IsSmi())
return NodeType::kSmi;
724 case NodeType::kHeapNumber:
725 return map.IsHeapNumberMap();
726 case NodeType::kNullOrUndefined:
727 return map.IsOddballMap() && !map.IsBooleanMap(
broker);
728 case NodeType::kBoolean:
729 return map.IsBooleanMap(
broker);
730 case NodeType::kSymbol:
731 return map.IsSymbolMap();
732 case NodeType::kThinString:
733 return map.IsStringMap() && map.IsThinStringMap();
734 case NodeType::kInternalizedString:
735 return map.IsStringMap() && map.IsInternalizedStringMap();
736 case NodeType::kNonInternalizedNonThinString:
737 return map.IsStringMap() && !map.IsThinStringMap() &&
738 !map.IsInternalizedStringMap();
739 case NodeType::kStringWrapper:
740 return map.IsStringWrapperMap();
741 case NodeType::kJSArray:
742 return map.IsJSArrayMap();
743 case NodeType::kCallable:
744 return map.is_callable();
745 case NodeType::kOtherJSReceiver:
746 return map.IsJSReceiverMap() && !map.IsJSArrayMap() &&
747 !map.is_callable() && !map.IsStringWrapperMap();
748 case NodeType::kOtherHeapObject:
749 return !map.IsHeapNumberMap() && !map.IsOddballMap() &&
750 !map.IsSymbolMap() && !map.IsStringMap() && !map.IsJSReceiverMap();
759#define CASE(Name, _) case NodeType::k##Name:
765#define CASE(Name, _) \
766 if (NodeTypeIs(NodeType::k##Name, type)) { \
767 if (IsInstanceOfLeafNodeType(map, NodeType::k##Name, broker)) { \
779#define CASE(Name, _) \
780 case NodeType::k##Name: \
786#define CASE(Name, _) \
787 if (NodeTypeIs(NodeType::k##Name, type)) { \
788 if constexpr (NodeType::k##Name != NodeType::kUnknown) { \
798#define DEFINE_NODE_TYPE_CHECK(Type, _) \
799 inline bool NodeTypeIs##Type(NodeType type) { \
800 return NodeTypeIs(type, NodeType::k##Type); \
803#undef DEFINE_NODE_TYPE_CHECK
806 return (
static_cast<int>(type) &
807 static_cast<int>(NodeType::kNullOrUndefined)) != 0;
826 return os <<
"Tagged";
828 return os <<
"Int32";
830 return os <<
"Uint32";
832 return os <<
"Float64";
834 return os <<
"HoleyFloat64";
836 return os <<
"Word64";
842 switch (conversion_type) {
844 return os <<
"Number";
846 return os <<
"NumberOrBoolean";
848 return os <<
"NumberOrOddball";
854 if (!map.IsJSTypedArrayMap())
return false;
861 if (!map.IsJSArrayMap())
return false;
868 if (!map.IsJSObjectMap())
return false;
875 if (!map.IsStringMap())
return false;
882 if (map.instance_type() != HEAP_NUMBER_TYPE)
return false;
889 if (map.instance_type() == HEAP_NUMBER_TYPE)
return true;
894#define DEF_FORWARD_DECLARATION(type, ...) class type;
896#undef DEF_FORWARD_DECLARATION
906 struct BasicBlockRefBuilder;
962 DCHECK_EQ(ref_list_head->state_, kRefList);
1006 enum { kBlockPointer, kRefList }
state_;
1237 template <
typename... Args>
1243 template <
typename... Args>
1257 return compiler::UnallocatedOperand::cast(
operand_).IsUsedAtStart();
1260 template <
typename... Args>
1416 int result_size)
const;
1426static_assert(
sizeof(InterpretedDeoptFrame) ==
sizeof(DeoptFrame));
1464static_assert(
sizeof(InlinedArgumentsDeoptFrame) ==
sizeof(DeoptFrame));
1503static_assert(
sizeof(ConstructInvokeStubDeoptFrame) ==
sizeof(DeoptFrame));
1521 compiler::OptionalJSFunctionRef maybe_js_target,
1546static_assert(
sizeof(BuiltinContinuationDeoptFrame) ==
sizeof(DeoptFrame));
1548inline const BuiltinContinuationDeoptFrame&
1649 size_t input_location_count() {
return input_location_count_; }
1657 size_t input_location_count_ = 0;
1678 template <
typename Function>
1680 template <
typename Function>
1699 DCHECK(IsConsideredForResultLocation());
1703 DCHECK(IsConsideredForResultLocation());
1709 DCHECK(IsConsideredForResultLocation());
1731 template <
typename Function>
1733 template <
typename Function>
1738 bool IsConsideredForResultLocation()
const {
1750 switch (
top_frame().as_builtin_continuation().builtin_id()) {
1751 case Builtin::kGenericLazyDeoptContinuation:
1752 case Builtin::kGetIteratorWithFeedbackLazyDeoptContinuation:
1753 case Builtin::kCallIteratorWithFeedbackLazyDeoptContinuation:
1848#define DEF_OPCODE_OF(Name) \
1850 struct opcode_of_helper<Name> { \
1851 static constexpr Opcode value = Opcode::k##Name; \
1856template <
typename T>
1858 char* address_as_char_ptr =
reinterpret_cast<char*
>(address);
1859 char* object_ptr_as_char_ptr = address_as_char_ptr -
sizeof(
T);
1860 return reinterpret_cast<T*
>(object_ptr_as_char_ptr);
1863template <
typename T>
1865 const char* address_as_char_ptr =
reinterpret_cast<const char*
>(address);
1866 const char* object_ptr_as_char_ptr = address_as_char_ptr -
sizeof(
T);
1867 return reinterpret_cast<const T*
>(object_ptr_as_char_ptr);
1872#define DEOPTIMIZE_REASON_FIELD \
1874 using ReasonField = \
1875 NextBitField<DeoptimizeReason, base::bits::WhichPowerOfTwo<size_t>( \
1876 base::bits::RoundUpToPowerOfTwo32( \
1877 kDeoptimizeReasonCount))>; \
1880 DeoptimizeReason deoptimize_reason() const { \
1881 return ReasonField::decode(bitfield()); \
1884struct KnownNodeAspects;
1902 template <
class T,
int size>
1911 template <
class Derived,
typename... Args>
1912 static Derived*
New(
Zone* zone, std::initializer_list<ValueNode*> inputs,
1914 static_assert(Derived::kProperties.is_conversion());
1921 node->set_input(
i++, input);
1928 template <
class Derived,
typename... Args>
1950 constexpr bool Is()
const;
1955 return static_cast<T*
>(
this);
1960 return static_cast<const T*
>(
this);
1964 return Is<T>() ?
static_cast<T*
>(
this) :
nullptr;
1969 return Is<T>() ?
static_cast<const T*
>(
this) :
nullptr;
1992 constexpr auto begin() {
return std::make_reverse_iterator(&
input(-1)); }
2008 template <
typename RegisterT>
2010 if constexpr (std::is_same_v<RegisterT, Register>) {
2017 template <
typename RegisterT>
2024 template <
typename RegisterT>
2036 template <
typename Function>
2040 bool skip_targets =
false)
const;
2089 other->eager_deopt_info()->feedback_to_update());
2101 template <
typename NodeT>
2108 std::optional<OpProperties> maybe_new_properties = std::nullopt) {
2109 OpProperties new_properties = maybe_new_properties.has_value()
2110 ? maybe_new_properties.value()
2152 const uint64_t base_bitfield_mask =
2156 new_bitfield & base_bitfield_mask);
2212 template <
class Derived,
typename... Args>
2215 !Derived::kProperties.can_eager_deopt() ||
2216 !Derived::kProperties.can_lazy_deopt(),
2217 "The current deopt info representation, at the end of inputs, requires "
2218 "that we cannot have both lazy and eager deopts on a node. If we ever "
2219 "need this, we have to update accessors to check node->properties() "
2220 "for which deopts are active.");
2221 constexpr size_t size_before_inputs =
2228 const size_t size_before_node =
2232 const size_t size = size_before_node +
sizeof(Derived);
2233 intptr_t raw_buffer =
2236 memset(
reinterpret_cast<void*
>(raw_buffer), 0, size);
2239 void* node_buffer =
reinterpret_cast<void*
>(raw_buffer + size_before_node);
2244 new (node_buffer) Derived(
bitfield, std::forward<Args>(
args)...);
2260 (properties.can_eager_deopt() || properties.is_deopt_checkpoint())
2304 template <
typename RegisterT>
2307 if constexpr (std::is_same_v<RegisterT, Register>) {
2325 state_ = State::kReglist;
2406 op != Opcode::kCheckMaps;
2459 template <
typename RegisterT>
2461 if (
hint_.IsInvalid())
return RegisterT::no_reg();
2462 return RegisterT::from_code(
2463 compiler::UnallocatedOperand::cast(
hint_).fixed_register_index());
2493 if (
state_ == kLastUse) {
2551#ifdef V8_COMPRESS_POINTERS
2556 void SetTaggedResultNeedsDecompress() {
2563 for (Input& input : *
this) {
2565 if (input.node()->decompresses_tagged_result())
continue;
2566 input.node()->SetTaggedResultNeedsDecompress();
2570 input(0).
node()->SetTaggedResultNeedsDecompress();
2623 template <
typename T>
2647 template <
typename T>
2649 if constexpr (std::is_same<T, DoubleRegister>::value) {
2672 hint_(compiler::InstructionOperand()),
2710 enum {kLastUse, kSpill}
state_;
2756template <
typename Base,
typename Derived>
2762 return Derived::kProperties;
2765 template <
typename... Args>
2766 static Derived*
New(
Zone* zone, std::initializer_list<ValueNode*> inputs,
2770 template <
typename... Args>
2776 template <
typename... Args>
2778 : Base(bitfield,
std::forward<Args>(
args)...) {
2787template <
size_t Size>
2790 template <
typename... Args>
2793 static_assert(
sizeof...(args) == Size);
2801template <
size_t InputCount,
typename Base,
typename Derived>
2810 return std::make_reverse_iterator(&this->input(
input_count() - 1));
2816 std::is_same_v<
const InputTypes,
decltype(Derived::kInputTypes)>);
2817 static_assert(
kInputCount == Derived::kInputTypes.size());
2824#ifdef V8_COMPRESS_POINTERS
2825 void MarkTaggedInputsAsDecompressing()
const {
2828 std::is_same_v<
const InputTypes,
decltype(Derived::kInputTypes)>);
2829 static_assert(
kInputCount == Derived::kInputTypes.size());
2832 ValueNode* input_node = this->input(
i).node();
2833 input_node->SetTaggedResultNeedsDecompress();
2844 template <
typename... Args>
2851template <
class T,
class =
void>
2855 :
public std::true_type {};
2857template <
class Derived>
2860template <
class Derived>
2863template <
size_t InputCount,
class Derived>
2867template <
size_t InputCount,
class Derived>
2882#ifdef V8_COMPRESS_POINTERS
2883 void MarkTaggedInputsAsDecompressing() {
2894template <
class Derived, Operation kOperation>
2920template <
class Derived, Operation kOperation>
2948#define DEF_OPERATION_WITH_FEEDBACK_NODE(Name, Super, OpName) \
2949 class Name : public Super<Name, Operation::k##OpName> { \
2950 using Base = Super<Name, Operation::k##OpName>; \
2953 Name(uint64_t bitfield, const compiler::FeedbackSource& feedback) \
2954 : Base(bitfield, feedback) {} \
2955 int MaxCallStackArgs() const { return 0; } \
2956 void SetValueLocationConstraints(); \
2957 void GenerateCode(MaglevAssembler*, const ProcessingState&); \
2958 void PrintParams(std::ostream&, MaglevGraphLabeller*) const {} \
2961#define DEF_UNARY_WITH_FEEDBACK_NODE(Name) \
2962 DEF_OPERATION_WITH_FEEDBACK_NODE(Generic##Name, UnaryWithFeedbackNode, Name)
2963#define DEF_BINARY_WITH_FEEDBACK_NODE(Name) \
2964 DEF_OPERATION_WITH_FEEDBACK_NODE(Generic##Name, BinaryWithFeedbackNode, Name)
2968#undef DEF_UNARY_WITH_FEEDBACK_NODE
2969#undef DEF_BINARY_WITH_FEEDBACK_NODE
2970#undef DEF_OPERATION_WITH_FEEDBACK_NODE
2972template <
class Derived, Operation kOperation>
2993#define DEF_OPERATION_NODE(Name, Super, OpName) \
2994 class Name : public Super<Name, Operation::k##OpName> { \
2995 using Base = Super<Name, Operation::k##OpName>; \
2998 explicit Name(uint64_t bitfield) : Base(bitfield) {} \
2999 void SetValueLocationConstraints(); \
3000 void GenerateCode(MaglevAssembler*, const ProcessingState&); \
3001 void PrintParams(std::ostream&, MaglevGraphLabeller*) const {} \
3004#define DEF_INT32_BINARY_WITH_OVERFLOW_NODE(Name) \
3005 DEF_OPERATION_NODE(Int32##Name##WithOverflow, Int32BinaryWithOverflowNode, \
3012#undef DEF_INT32_BINARY_WITH_OVERFLOW_NODE
3014template <
class Derived, Operation kOperation>
3032#define DEF_INT32_BINARY_NODE(Name) \
3033 DEF_OPERATION_NODE(Int32##Name, Int32BinaryNode, Name)
3039#undef DEF_INT32_BINARY_NODE
3059template <
class Derived, Operation kOperation>
3076#define DEF_INT32_UNARY_WITH_OVERFLOW_NODE(Name) \
3077 DEF_OPERATION_NODE(Int32##Name##WithOverflow, Int32UnaryWithOverflowNode, \
3083#undef DEF_INT32_UNARY_WITH_OVERFLOW_NODE
3123 return OperationBitField::decode(bitfield());
3147 constexpr bool flip()
const {
return FlipBitField::decode(bitfield()); }
3170 constexpr bool flip()
const {
return FlipBitField::decode(bitfield()); }
3220template <
class Derived, Operation kOperation>
3240#define DEF_OPERATION_NODE_WITH_CALL(Name, Super, OpName) \
3241 class Name : public Super<Name, Operation::k##OpName> { \
3242 using Base = Super<Name, Operation::k##OpName>; \
3245 explicit Name(uint64_t bitfield) : Base(bitfield) {} \
3246 int MaxCallStackArgs() const; \
3247 void SetValueLocationConstraints(); \
3248 void GenerateCode(MaglevAssembler*, const ProcessingState&); \
3249 void PrintParams(std::ostream&, MaglevGraphLabeller*) const {} \
3252template <
class Derived, Operation kOperation>
3273#define DEF_FLOAT64_BINARY_NODE(Name) \
3274 DEF_OPERATION_NODE(Float64##Name, Float64BinaryNode, Name)
3275#define DEF_FLOAT64_BINARY_NODE_WITH_CALL(Name) \
3276 DEF_OPERATION_NODE_WITH_CALL(Float64##Name, Float64BinaryNodeWithCall, Name)
3281#if defined(V8_TARGET_ARCH_ARM64) || defined(V8_TARGET_ARCH_ARM) || \
3282 defined(V8_TARGET_ARCH_RISCV64)
3290#undef DEF_FLOAT64_BINARY_NODE
3291#undef DEF_FLOAT64_BINARY_NODE_WITH_CALL
3293#undef DEF_OPERATION_NODE
3294#undef DEF_OPERATION_NODE_WITH_CALL
3312 return OperationBitField::decode(bitfield());
3337 constexpr bool flip()
const {
return FlipBitField::decode(bitfield()); }
3366#define IEEE_754_UNARY_LIST(V) \
3367 V(MathAcos, acos, Acos) \
3368 V(MathAcosh, acosh, Acosh) \
3369 V(MathAsin, asin, Asin) \
3370 V(MathAsinh, asinh, Asinh) \
3371 V(MathAtan, atan, Atan) \
3372 V(MathAtanh, atanh, Atanh) \
3373 V(MathCbrt, cbrt, Cbrt) \
3374 V(MathCos, cos, Cos) \
3375 V(MathCosh, cosh, Cosh) \
3376 V(MathExp, exp, Exp) \
3377 V(MathExpm1, expm1, Expm1) \
3378 V(MathLog, log, Log) \
3379 V(MathLog1p, log1p, Log1p) \
3380 V(MathLog10, log10, Log10) \
3381 V(MathLog2, log2, Log2) \
3382 V(MathSin, sin, Sin) \
3383 V(MathSinh, sinh, Sinh) \
3384 V(MathTan, tan, Tan) \
3385 V(MathTanh, tanh, Tanh)
3392#define DECL_ENUM(MathName, ExtName, EnumName) k##EnumName,
3582#ifdef V8_COMPRESS_POINTERS
3583 void MarkTaggedInputsAsDecompressing() {
3606#ifdef V8_COMPRESS_POINTERS
3607 void MarkTaggedInputsAsDecompressing() {
3630#ifdef V8_COMPRESS_POINTERS
3631 void MarkTaggedInputsAsDecompressing() {
3655#ifdef V8_COMPRESS_POINTERS
3656 void MarkTaggedInputsAsDecompressing() {
3679#ifdef V8_COMPRESS_POINTERS
3680 void MarkTaggedInputsAsDecompressing() {
3927 return ConversionModeBitField::decode(bitfield());
3932 return ConversionModeBitField::decode(bitfield()) ==
3985 set_bitfield(ConversionModeBitField::update(bitfield(), mode));
3991 return ConversionModeBitField::decode(bitfield());
3996 return ConversionModeBitField::decode(bitfield()) ==
4244 return Builtin::kMathCeilContinuation;
4246 return Builtin::kMathFloorContinuation;
4248 return Builtin::kMathRoundContinuation;
4291#define DEFINE_TRUNCATE_NODE(name, from_repr, properties) \
4292 class name : public FixedInputValueNodeT<1, name> { \
4293 using Base = FixedInputValueNodeT<1, name>; \
4296 explicit name(uint64_t bitfield) : Base(bitfield) {} \
4298 static constexpr OpProperties kProperties = properties; \
4299 static constexpr typename Base::InputTypes kInputTypes{ \
4300 ValueRepresentation::k##from_repr}; \
4302 Input& input() { return Node::input(0); } \
4304 void SetValueLocationConstraints(); \
4305 void GenerateCode(MaglevAssembler*, const ProcessingState&); \
4306 void PrintParams(std::ostream&, MaglevGraphLabeller*) const {} \
4316#undef DEFINE_TRUNCATE_NODE
4318template <
typename Derived, ValueRepresentation FloatType>
4342 return TaggedToFloat64ConversionTypeOffset::decode(Base::bitfield());
4347 ? DeoptimizeReason::kNotANumberOrBoolean
4348 : DeoptimizeReason::kNotANumberOrOddball;
4359 Base::template NextBitField<TaggedToFloat64ConversionType, 2>;
4364 CheckedNumberOrOddballToFloat64, ValueRepresentation::kFloat64> {
4376 CheckedNumberOrOddballToHoleyFloat64,
4377 ValueRepresentation::kHoleyFloat64> {
4429 return TaggedToFloat64ConversionTypeOffset::decode(bitfield());
4436 NextBitField<TaggedToFloat64ConversionType, 2>;
4516 return TaggedToFloat64ConversionTypeOffset::decode(bitfield());
4523 NextBitField<TaggedToFloat64ConversionType, 2>;
4548 return TaggedToFloat64ConversionTypeOffset::decode(bitfield());
4555 NextBitField<TaggedToFloat64ConversionType, 2>;
4673#ifdef V8_COMPRESS_POINTERS
4674 void MarkTaggedInputsAsDecompressing() {
4696#ifdef V8_COMPRESS_POINTERS
4697 void MarkTaggedInputsAsDecompressing() {
4895#ifdef V8_COMPRESS_POINTERS
4896 void MarkTaggedInputsAsDecompressing() {
5096 return ConversionModeBitField::decode(bitfield());
5523 out <<
"ConsString";
5640 DCHECK(!value->properties().is_conversion());
5658 int last_init_index = last_init_slot /
kTaggedSize;
5670 if (
type_ != other->type_)
return false;
5671 if (
allocation_ != other->allocation_)
return false;
5674 if (
map() != other->
map())
return false;
5676 switch (other->type_) {
5693 template <
typename Function>
5713 template <
typename Function>
5735 template <
typename Function>
5738 template <
typename Function>
5742 template <
typename Function>
5744 uint32_t new_object_id,
Zone* zone,
5758 result->set_by_index(
i, *success);
5770 bool empty_clone =
false)
const {
5784 if (empty_clone)
return result;
5818 DCHECK(!value->properties().is_conversion());
5862 return entry_ == other.entry_;
5865 return entry_ != other.entry_;
5875 return head_ == other.head_;
5881 object->next_ =
head_;
5898 void Print(std::ostream& os,
const char* prefix,
5902 template <
typename Function>
5908 while (vo1 !=
nullptr && vo2 !=
nullptr && vo1 != vo2) {
5910 if (vo1->
id() > vo2->
id()) {
5918 if (vo1 == vo2)
return vo1;
6030 void set_is_returned_value_from_inline_call() {
6031 is_returned_value_from_inline_call_ =
true;
6034 bool is_returned_value_from_inline_call()
const {
6035 return is_returned_value_from_inline_call_;
6046 bool is_returned_value_from_inline_call_ =
false;
6056template <
typename Function>
6061 value = value->input(0).node();
6068 switch (value->opcode()) {
6069 case Opcode::kArgumentsElements:
6070 case Opcode::kArgumentsLength:
6071 case Opcode::kRestLength:
6074 case Opcode::kVirtualObject:
6076 case Opcode::kInlinedAllocation: {
6080 if (inner_vobject &&
6082 inner_vobject->ForEachNestedRuntimeInput(virtual_objects, f);
6095template <
typename Function>
6100 value = value->input(0).node();
6107 switch (value->opcode()) {
6108 case Opcode::kArgumentsElements:
6109 case Opcode::kArgumentsLength:
6110 case Opcode::kRestLength:
6113 case Opcode::kVirtualObject:
6115 case Opcode::kInlinedAllocation: {
6119 if (inner_vobject &&
6121 inner_vobject->ForEachNestedRuntimeInput(virtual_objects, f);
6413#define ASSERT_CONDITION(V) \
6419 V(GreaterThanEqual) \
6420 V(UnsignedLessThan) \
6421 V(UnsignedLessThanEqual) \
6422 V(UnsignedGreaterThan) \
6423 V(UnsignedGreaterThanEqual)
6426#define D(Name) k##Name,
6438 case AssertCondition::k##Name: \
6486 maps_(maps.begin(), maps.
end(), zone) {}
6523 maps_(maps.begin(), maps.
end(), zone) {}
6561 :
Base(bitfield),
maps_(maps.begin(), maps.
end(), zone) {}
6589 :
Base(bitfield | ReasonField::encode(reason)),
value_(value) {}
6600#ifdef V8_COMPRESS_POINTERS
6601 void MarkTaggedInputsAsDecompressing() {
6624 :
Base(bitfield | ReasonField::encode(reason)),
value_(value) {}
6653 :
Base(bitfield | ReasonField::encode(reason)),
value_(value) {}
6684 :
Base(bitfield | ReasonField::encode(reason)),
value_(value) {}
6716 :
Base(bitfield | ReasonField::encode(reason)) {}
6727#ifdef V8_COMPRESS_POINTERS
6728 void MarkTaggedInputsAsDecompressing() {
6737 auto options()
const {
return std::tuple{deoptimize_reason()}; }
6757#ifdef V8_COMPRESS_POINTERS
6758 void MarkTaggedInputsAsDecompressing() {
6806#ifdef V8_COMPRESS_POINTERS
6807 void MarkTaggedInputsAsDecompressing() {
7144 ReasonField::encode(reason)) {}
7156 return ConditionField::decode(bitfield());
7169 ReasonField::Next<AssertCondition, base::bits::WhichPowerOfTwo<size_t>(
7365 BuiltinStringPrototypeCharCodeOrCodePointAt> {
7599 compiler::OptionalJSObjectRef
holder()
const {
7615 if (
maps_.size() != other.maps_.size()) {
7618 for (
size_t i = 0;
i <
maps_.size(); ++
i) {
7619 if (
maps_[
i] != other.maps_[
i]) {
7629 return constant_.equals(other.constant_);
7633 return data_load_.holder_.equals(other.data_load_.holder_) &&
7634 data_load_.field_index_ == other.data_load_.field_index_;
7641 for (
auto map :
maps()) {
7675 compiler::ObjectRef constant)
7694 compiler::OptionalJSObjectRef
holder,
7717template <
typename Derived = LoadTaggedField>
7742 using Base::decompresses_tagged_result;
7810 using Base::decompresses_tagged_result;
7942#ifdef V8_COMPRESS_POINTERS
7943 void MarkTaggedInputsAsDecompressing() {
8179 2, LoadHoleyFixedDoubleArrayElementCheckedNotHole> {
8305#define LOAD_TYPED_ARRAY(name, properties, ...) \
8306 class name : public FixedInputValueNodeT<2, name> { \
8307 using Base = FixedInputValueNodeT<2, name>; \
8310 explicit name(uint64_t bitfield, ElementsKind elements_kind) \
8311 : Base(bitfield), elements_kind_(elements_kind) { \
8312 DCHECK(elements_kind == \
8313 v8::internal::compiler::turboshaft::any_of(__VA_ARGS__)); \
8316 static constexpr OpProperties kProperties = \
8317 OpProperties::CanRead() | properties; \
8318 static constexpr typename Base::InputTypes kInputTypes{ \
8319 ValueRepresentation::kTagged, ValueRepresentation::kUint32}; \
8321 static constexpr int kObjectIndex = 0; \
8322 static constexpr int kIndexIndex = 1; \
8323 Input& object_input() { return input(kObjectIndex); } \
8324 Input& index_input() { return input(kIndexIndex); } \
8326 void SetValueLocationConstraints(); \
8327 void GenerateCode(MaglevAssembler*, const ProcessingState&); \
8328 void PrintParams(std::ostream&, MaglevGraphLabeller*) const {} \
8330 auto options() const { return std::tuple{elements_kind_}; } \
8332 ElementsKind elements_kind() const { return elements_kind_; } \
8335 ElementsKind elements_kind_; \
8346 FLOAT32_ELEMENTS, FLOAT64_ELEMENTS)
8348#undef LOAD_TYPED_ARRAY
8350#define STORE_TYPED_ARRAY(name, properties, type, ...) \
8351 class name : public FixedInputNodeT<3, name> { \
8352 using Base = FixedInputNodeT<3, name>; \
8355 explicit name(uint64_t bitfield, ElementsKind elements_kind) \
8356 : Base(bitfield), elements_kind_(elements_kind) { \
8357 DCHECK(elements_kind == \
8358 v8::internal::compiler::turboshaft::any_of(__VA_ARGS__)); \
8361 static constexpr OpProperties kProperties = properties; \
8362 static constexpr typename Base::InputTypes kInputTypes{ \
8363 ValueRepresentation::kTagged, ValueRepresentation::kUint32, type}; \
8365 static constexpr int kObjectIndex = 0; \
8366 static constexpr int kIndexIndex = 1; \
8367 static constexpr int kValueIndex = 2; \
8368 Input& object_input() { return input(kObjectIndex); } \
8369 Input& index_input() { return input(kIndexIndex); } \
8370 Input& value_input() { return input(kValueIndex); } \
8372 void SetValueLocationConstraints(); \
8373 void GenerateCode(MaglevAssembler*, const ProcessingState&); \
8374 void PrintParams(std::ostream&, MaglevGraphLabeller*) const {} \
8376 ElementsKind elements_kind() const { return elements_kind_; } \
8379 ElementsKind elements_kind_; \
8389#undef STORE_TYPED_ARRAY
8391class StoreSignedIntDataViewElement
8396 explicit StoreSignedIntDataViewElement(uint64_t bitfield,
8398 : Base(bitfield),
type_(type) {
8399 DCHECK(type == ExternalArrayType::kExternalInt8Array ||
8400 type == ExternalArrayType::kExternalInt16Array ||
8401 type == ExternalArrayType::kExternalInt32Array);
8404 static constexpr OpProperties kProperties = OpProperties::CanWrite();
8405 static constexpr typename Base::InputTypes kInputTypes{
8406 ValueRepresentation::kTagged, ValueRepresentation::kInt32,
8407 ValueRepresentation::kInt32, ValueRepresentation::kTagged};
8409 static constexpr int kObjectIndex = 0;
8410 static constexpr int kIndexIndex = 1;
8411 static constexpr int kValueIndex = 2;
8412 static constexpr int kIsLittleEndianIndex = 3;
8413 Input& object_input() {
return input(kObjectIndex); }
8414 Input& index_input() {
return input(kIndexIndex); }
8415 Input& value_input() {
return input(kValueIndex); }
8416 Input& is_little_endian_input() {
return input(kIsLittleEndianIndex); }
8418 bool is_little_endian_constant() {
8422 void SetValueLocationConstraints();
8603 return InitializingOrTransitioningField::decode(bitfield());
8611#ifdef V8_COMPRESS_POINTERS
8612 void MarkTaggedInputsAsDecompressing() {
8655 Kind kind()
const {
return KindField::decode(bitfield()); }
8688 return InitializingOrTransitioningField::decode(bitfield());
8696#ifdef V8_COMPRESS_POINTERS
8697 void MarkTaggedInputsAsDecompressing() {
8736#ifdef V8_COMPRESS_POINTERS
8737 void MarkTaggedInputsAsDecompressing() {
8753 :
public FixedInputNodeT<2, StoreTrustedPointerFieldWithWriteBarrier> {
8774 return InitializingOrTransitioningField::decode(bitfield());
8782#ifdef V8_COMPRESS_POINTERS
8783 void MarkTaggedInputsAsDecompressing() {
9100#ifdef V8_STATIC_ROOTS
9101 void MarkTaggedInputsAsDecompressing()
const {
9387 return os <<
"Tagged";
9389 return os <<
"Int32";
9391 return os <<
"TruncatedInt32";
9393 return os <<
"Uint32";
9395 return os <<
"Float64";
9397 return os <<
"HoleyFloat64";
9444#ifdef V8_COMPRESS_POINTERS
9445 void MarkTaggedInputsAsDecompressing() {
9504 set_bitfield(bitfield() | HasKeyFlag::encode(
true));
9509 bool has_key()
const {
return HasKeyFlag::decode(bitfield()); }
9515 return Requires31BitValueFlag::decode(bitfield());
9518 set_bitfield(bitfield() | Requires31BitValueFlag::encode(
true));
9597 std::make_reverse_iterator(&
arg(-1)),
9598 std::make_reverse_iterator(&
arg(
num_args() - 1)));
9602#ifdef V8_COMPRESS_POINTERS
9603 void MarkTaggedInputsAsDecompressing();
9657 std::make_reverse_iterator(&
arg(-1)),
9658 std::make_reverse_iterator(&
arg(
num_args() - 1)));
9664#ifdef V8_COMPRESS_POINTERS
9665 void MarkTaggedInputsAsDecompressing();
9696 set_input(input_count() - 1, context);
9721 return input(input_count() - 1);
9726 bool has_context = descriptor.HasContextParameter();
9727 int extra_input_count = has_context ? 1 : 0;
9728 return input_count() - extra_input_count;
9735 int vector_index = slot_index + 1;
9741 if (vector_index < descriptor.GetRegisterParameterCount()) {
9742 return descriptor.GetRegisterParameterCount() - 2;
9743 }
else if (vector_index == descriptor.GetRegisterParameterCount()) {
9744 return descriptor.GetRegisterParameterCount() - 1;
9746 return descriptor.GetRegisterParameterCount();
9749 return descriptor.GetRegisterParameterCount();
9765#ifdef V8_COMPRESS_POINTERS
9766 void MarkTaggedInputsAsDecompressing();
9774 template <
typename... Args>
9788 Builtin::kCEntry_Return1_ArgvOnStack_BuiltinExit;
9827 std::make_reverse_iterator(&
arg(-1)),
9828 std::make_reverse_iterator(&
arg(
num_args() - 1)));
9832#ifdef V8_COMPRESS_POINTERS
9833 void MarkTaggedInputsAsDecompressing();
9878 std::make_reverse_iterator(&
arg(-1)),
9879 std::make_reverse_iterator(&
arg(
num_args() - 1)));
9883#ifdef V8_COMPRESS_POINTERS
9884 void MarkTaggedInputsAsDecompressing();
9928 std::make_reverse_iterator(&
arg(-1)),
9929 std::make_reverse_iterator(&
arg(
num_args() - 1)));
9937#ifdef V8_COMPRESS_POINTERS
9938 void MarkTaggedInputsAsDecompressing();
9983 std::make_reverse_iterator(&
arg(-1)),
9988 return input(input_count() - 1);
9993#ifdef V8_COMPRESS_POINTERS
9994 void MarkTaggedInputsAsDecompressing();
10027#ifdef V8_COMPRESS_POINTERS
10028 void MarkTaggedInputsAsDecompressing();
10078 std::make_reverse_iterator(&
arg(-1)),
10079 std::make_reverse_iterator(&
arg(
num_args() - 1)));
10083#ifdef V8_COMPRESS_POINTERS
10084 void MarkTaggedInputsAsDecompressing();
10113#ifdef V8_ENABLE_LEAPTIERING
10136 std::make_reverse_iterator(&
arg(-1)),
10137 std::make_reverse_iterator(&
arg(
num_args() - 1)));
10145#ifdef V8_COMPRESS_POINTERS
10146 void MarkTaggedInputsAsDecompressing();
10156#ifdef V8_ENABLE_LEAPTIERING
10214 std::make_reverse_iterator(&
arg(-1)),
10215 std::make_reverse_iterator(&
arg(
num_args() - 1)));
10218 Mode mode()
const {
return ModeField::decode(bitfield()); }
10227#ifdef V8_COMPRESS_POINTERS
10228 void MarkTaggedInputsAsDecompressing();
10285 return input(input_count() - 1);
10289 std::make_reverse_iterator(&
arg(-1)),
10295#ifdef V8_COMPRESS_POINTERS
10296 void MarkTaggedInputsAsDecompressing();
10591 :
Base(bitfield) {}
10729 :
Base(bitfield) {}
10745 :
Base(bitfield) {}
10804template <
class Derived>
10848template <
size_t InputCount,
class Derived>
10859template <
size_t InputCount,
class Derived>
10868 bitfield, if_true_refs, if_false_refs) {}
11044#ifdef V8_COMPRESS_POINTERS
11045 void MarkTaggedInputsAsDecompressing() {
11071#ifdef V8_COMPRESS_POINTERS
11072 void MarkTaggedInputsAsDecompressing() {
11100#ifdef V8_COMPRESS_POINTERS
11101 void MarkTaggedInputsAsDecompressing() {
11360#ifdef V8_COMPRESS_POINTERS
11361 void MarkTaggedInputsAsDecompressing() {
11398 case Opcode::k##op: \
11399 return op::kProperties;
11405template <
typename Function>
11408 for (
Input& input : *
this) {
11409 switch (compiler::UnallocatedOperand::cast(input.operand())
11410 .extended_policy()) {
11413 f(category, &input);
11423 f(category, &input);
#define DEF_FORWARD_DECLARATION(type)
#define SBXCHECK_LT(lhs, rhs)
#define SLOW_DCHECK(condition)
static constexpr int kLastUsedBit
static constexpr T decode(U value)
static constexpr bool is_valid(T value)
static constexpr U encode(T value)
static V8_NODISCARD constexpr U update(U previous, T value)
static constexpr int kShift
constexpr const auto & get() const
constexpr Tag tag() const
static BytecodeOffset GetContinuationBytecodeOffset(Builtin builtin)
static CallInterfaceDescriptor CallInterfaceDescriptorFor(Builtin builtin)
static constexpr BytecodeOffset None()
int GetReturnCount() const
static const int kMaxArguments
static V8_INLINE constexpr int OffsetOfElementAt(int index)
static constexpr MachineRepresentation PointerRepresentation()
static V8_EXPORT_PRIVATE bool BooleanValue(Tagged< Object > obj, IsolateT *isolate)
static constexpr int SizeFor(int length)
constexpr RegisterT first() const
constexpr void set(RegisterT reg)
constexpr bool has(RegisterT reg) const
constexpr void clear(RegisterT reg)
constexpr unsigned Count() const
constexpr int8_t code() const
static constexpr Representation Smi()
static constexpr Representation Tagged()
static V8_EXPORT_PRIVATE const Function * FunctionForId(FunctionId id)
static constexpr Tagged< Smi > FromInt(int value)
T * AllocateArray(size_t length)
void * Allocate(size_t size)
V8_EXPORT_PRIVATE MapRef map(JSHeapBroker *broker) const
bool IsDoubleRegister() const
bool IsAnyStackSlot() const
bool IsAnyRegister() const
Register GetRegister() const
static LocationOperand * cast(InstructionOperand *op)
DoubleRegister GetDoubleRegister() const
@ REGISTER_OR_SLOT_OR_CONSTANT
constexpr bool is_valid() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
const AbortReason reason_
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
int MaxCallStackArgs() const
Abort(uint64_t bitfield, AbortReason reason)
AbortReason reason() const
AbstractLoadTaggedField(uint64_t bitfield, const int offset)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
static constexpr int kObjectIndex
int MaxCallStackArgs() const
void SetValueLocationConstraints()
AllocateElementsArray(uint64_t bitfield, AllocationType allocation_type)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
AllocationType allocation_type_
AllocationType allocation_type() const
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
int MaxCallStackArgs() const
bool elided_write_barriers_depend_on_type_
InlinedAllocation::List allocation_list_
InlinedAllocation::List & allocation_list()
void set_elided_write_barriers_depend_on_type()
AllocationType allocation_type() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void Add(InlinedAllocation *alloc)
AllocationBlock(uint64_t bitfield, AllocationType allocation_type)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
bool elided_write_barriers_depend_on_type() const
void SetValueLocationConstraints()
AllocationType allocation_type_
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
CreateArgumentsType type_
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int MaxCallStackArgs() const
Input & arguments_count_input()
ArgumentsElements(uint64_t bitfield, CreateArgumentsType type, int formal_parameter_count)
int formal_parameter_count_
CreateArgumentsType type() const
void SetValueLocationConstraints()
int formal_parameter_count() const
ArgumentsLength(uint64_t bitfield)
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
AssertCondition condition_
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
AssertCondition condition() const
AbortReason reason() const
AssertInt32(uint64_t bitfield, AssertCondition condition, AbortReason reason)
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
BasicBlockRef * next_ref() const
BasicBlockRef & operator=(const BasicBlockRef &)=delete
BasicBlockRef & operator=(BasicBlockRef &&)=delete
BasicBlock * block_ptr() const
void Bind(BasicBlock *block)
void set_block_ptr(BasicBlock *block)
BasicBlockRef(const BasicBlockRef &)=delete
BasicBlockRef * MoveToRefList(BasicBlockRef *ref_list_head)
BasicBlockRef * next_ref_
BasicBlockRef(BasicBlockRef &&)=delete
BasicBlockRef(BasicBlock *block)
BasicBlockRef(BasicBlockRef *ref_list_head)
BasicBlockRef * SetToBlockAndReturnNext(BasicBlock *block)
static constexpr int kLeftIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
BinaryWithFeedbackNode(uint64_t bitfield, const compiler::FeedbackSource &feedback)
compiler::FeedbackSource feedback() const
void SetValueLocationConstraints()
static constexpr int kRightIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
const compiler::FeedbackSource feedback_
BranchControlNodeT(uint64_t bitfield, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
void set_if_true(BasicBlock *block)
BasicBlock * if_false() const
void set_if_false(BasicBlock *block)
BranchControlNode(uint64_t bitfield, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
BasicBlock * if_true() const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kRightIndex
BranchIfFloat64Compare(uint64_t bitfield, Operation operation, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
Operation operation() const
void SetValueLocationConstraints()
static constexpr int kLeftIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
Input & condition_input()
BranchIfFloat64IsHole(uint64_t bitfield, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
Input & condition_input()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
BranchIfFloat64ToBooleanTrue(uint64_t bitfield, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
static constexpr int kRightIndex
BranchIfInt32Compare(uint64_t bitfield, Operation operation, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
static constexpr int kLeftIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
Operation operation() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
BranchIfInt32ToBooleanTrue(uint64_t bitfield, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
Input & condition_input()
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
BranchIfIntPtrToBooleanTrue(uint64_t bitfield, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
Input & condition_input()
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
BranchIfJSReceiver(uint64_t bitfield, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
static constexpr Base::InputTypes kInputTypes
Input & condition_input()
static constexpr Base::InputTypes kInputTypes
static constexpr int kLeftIndex
BranchIfReferenceEqual(uint64_t bitfield, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kRightIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
Input & condition_input()
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
BranchIfRootConstant(uint64_t bitfield, RootIndex root_index, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
Input & condition_input()
BranchIfSmi(uint64_t bitfield, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
Input & condition_input()
CheckType check_type() const
BranchIfToBooleanTrue(uint64_t bitfield, CheckType check_type, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
BranchIfTypeOf(uint64_t bitfield, interpreter::TestTypeOfFlags::LiteralFlag literal, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
interpreter::TestTypeOfFlags::LiteralFlag literal_
static constexpr int kValueIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
Operation operation() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kRightIndex
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
BranchIfUint32Compare(uint64_t bitfield, Operation operation, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
static constexpr int kLeftIndex
BranchIfUndefinedOrNull(uint64_t bitfield, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
static constexpr Base::InputTypes kInputTypes
Input & condition_input()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
Input & condition_input()
void SetValueLocationConstraints()
CheckType check_type() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
BranchIfUndetectable(uint64_t bitfield, CheckType check_type, BasicBlockRef *if_true_refs, BasicBlockRef *if_false_refs)
const Builtin & builtin_id() const
BuiltinContinuationFrameData & data()
BuiltinContinuationDeoptFrame(Builtin builtin_id, base::Vector< ValueNode * > parameters, ValueNode *context, compiler::OptionalJSFunctionRef maybe_js_target, DeoptFrame *parent)
bool is_javascript() const
compiler::JSFunctionRef javascript_target() const
base::Vector< ValueNode * > parameters() const
const BuiltinContinuationFrameData & data() const
ValueNode * context() const
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
int MaxCallStackArgs() const
void SetValueLocationConstraints()
BuiltinStringFromCharCode(uint64_t bitfield)
BuiltinStringPrototypeCharCodeOrCodePointAt(uint64_t bitfield, Mode mode)
static constexpr OpProperties kProperties
static constexpr int kStringIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kIndexIndex
int MaxCallStackArgs() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
void PushFeedbackAndArguments(MaglevAssembler *)
compiler::FeedbackSource feedback() const
CallBuiltin(uint64_t bitfield, Builtin builtin, ValueNode *context)
void SetValueLocationConstraints()
int InputCountWithoutContext() const
int MaxCallStackArgs() const
FeedbackSlotType slot_type_
FeedbackSlotType slot_type() const
void set_arg(int i, ValueNode *node)
void PassFeedbackSlotInRegister(MaglevAssembler *)
void set_feedback(compiler::FeedbackSource const &feedback, FeedbackSlotType slot_type)
CallBuiltin(uint64_t bitfield, Builtin builtin)
void PushArguments(MaglevAssembler *masm, Args... extra_args)
std::optional< compiler::FeedbackSource > feedback_
static constexpr OpProperties kProperties
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
bool has_feedback() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int InputsInRegisterCount() const
static constexpr OpProperties kProperties
const Input & target() const
int MaxCallStackArgs() const
const Input & context() const
const Input & new_target() const
void set_arg(int i, ValueNode *node)
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
CallCPPBuiltin(uint64_t bitfield, Builtin builtin, ValueNode *target, ValueNode *new_target, ValueNode *context)
static constexpr int kContextIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kFixedInputCount
static constexpr int kTargetIndex
static constexpr int kNewTargetIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr Builtin kCEntry_Builtin
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
static constexpr int kFixedInputCount
const Input & function() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
Call::TargetType target_type_
void SetValueLocationConstraints()
void set_arg(int i, ValueNode *node)
Call::TargetType target_type() const
static constexpr int kFunctionIndex
int MaxCallStackArgs() const
CallForwardVarargs(uint64_t bitfield, ValueNode *function, ValueNode *context, int start_index, Call::TargetType target_type)
static constexpr OpProperties kProperties
static constexpr int kContextIndex
const Input & context() const
static constexpr int kReceiverIndex
void set_arg(int i, ValueNode *node)
static constexpr OpProperties kProperties
static constexpr int kFixedInputCount
static constexpr int kContextIndex
const compiler::OptionalJSObjectRef api_holder_
compiler::FunctionTemplateInfoRef function_template_info() const
const Input & context() const
void SetValueLocationConstraints()
bool inline_builtin() const
int MaxCallStackArgs() const
void GenerateCallApiCallbackOptimizedInline(MaglevAssembler *masm, const ProcessingState &state)
const Input & receiver() const
NextBitField< Mode, 2 > ModeField
const compiler::FunctionTemplateInfoRef function_template_info_
CallKnownApiFunction(uint64_t bitfield, Mode mode, compiler::FunctionTemplateInfoRef function_template_info, ValueNode *context, ValueNode *receiver)
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
compiler::SharedFunctionInfoRef shared_function_info() const
static constexpr int kClosureIndex
void set_arg(int i, ValueNode *node)
static constexpr int kReceiverIndex
const Input & new_target() const
static constexpr int kContextIndex
static constexpr int kNewTargetIndex
int expected_parameter_count() const
CallKnownJSFunction(uint64_t bitfield, compiler::SharedFunctionInfoRef shared_function_info, ValueNode *closure, ValueNode *context, ValueNode *receiver, ValueNode *new_target)
static constexpr int kFixedInputCount
int MaxCallStackArgs() const
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
int expected_parameter_count_
const Input & context() const
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
const Input & closure() const
const compiler::SharedFunctionInfoRef shared_function_info_
const Input & receiver() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kFixedInputCount
const Input & context() const
Runtime::FunctionId function_id() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kContextIndex
Runtime::FunctionId function_id_
int MaxCallStackArgs() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
CallRuntime(uint64_t bitfield, Runtime::FunctionId function_id, ValueNode *context)
void set_arg(int i, ValueNode *node)
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
static constexpr int kContextIndex
static constexpr int kReceiverIndex
const Input & context() const
void SetValueLocationConstraints()
static constexpr int kClosureIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
void set_arg(int i, ValueNode *node)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
const Input & new_target() const
static constexpr int kFixedInputCount
const Input & closure() const
static constexpr int kNewTargetIndex
const Input & receiver() const
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
int MaxCallStackArgs() const
CallSelf(uint64_t bitfield, int expected_parameter_count, ValueNode *closure, ValueNode *context, ValueNode *receiver, ValueNode *new_target)
int expected_parameter_count_
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
int MaxCallStackArgs() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kContextIndex
static constexpr OpProperties kProperties
static constexpr int kFunctionIndex
void SetValueLocationConstraints()
static constexpr int kArgumentsListIndex
static constexpr int kReceiverIndex
CallWithArrayLike(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
void set_arg(int i, ValueNode *node)
const Input & context() const
int MaxCallStackArgs() const
const Input & function() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kContextIndex
CallWithSpread(uint64_t bitfield, ValueNode *function, ValueNode *context)
static constexpr int kFixedInputCount
int num_args_no_spread() const
static constexpr int kFunctionIndex
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
ConvertReceiverMode receiver_mode() const
void set_arg(int i, ValueNode *node)
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
static constexpr int kFixedInputCount
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
int MaxCallStackArgs() const
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
ConvertReceiverMode receiver_mode_
static constexpr int kFunctionIndex
Call(uint64_t bitfield, ConvertReceiverMode mode, TargetType target_type, ValueNode *function, ValueNode *context)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
TargetType target_type() const
const Input & context() const
static constexpr int kContextIndex
const Input & function() const
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
ChangeInt32ToFloat64(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
ChangeIntPtrToFloat64(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
ChangeUint32ToFloat64(uint64_t bitfield)
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
static constexpr int kEnumIndices
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
CheckCacheIndicesNotCleared(uint64_t bitfield)
void SetValueLocationConstraints()
static constexpr int kCacheLength
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
Input & construct_result_input()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
Input & implicit_receiver_input()
CheckConstructResult(uint64_t bitfield)
int MaxCallStackArgs() const
void SetValueLocationConstraints()
int MaxCallStackArgs() const
void SetValueLocationConstraints()
bool for_derived_constructor()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
Input & construct_result_input()
CheckDerivedConstructResult(uint64_t bitfield)
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
static constexpr int kReceiverIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
NextBitField< CheckType, 1 > CheckTypeBitField
CheckDetectableCallable(uint64_t bitfield, CheckType check_type)
void SetValueLocationConstraints()
void PrintParams(std::ostream &out, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
CheckType check_type() const
static constexpr OpProperties kProperties
CheckDynamicValue(uint64_t bitfield, DeoptimizeReason reason)
static constexpr Base::InputTypes kInputTypes
static constexpr int kFirstIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kSecondIndex
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
static constexpr int kTargetIndex
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
CheckFloat64SameValue(uint64_t bitfield, Float64 value, DeoptimizeReason reason)
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
CheckHeapObject(uint64_t bitfield)
static constexpr int kReceiverIndex
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
CheckHoleyFloat64IsSmi(uint64_t bitfield)
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
CheckHoleyFloat64NotHole(uint64_t bitfield)
NextBitField< CheckType, 1 > CheckTypeBitField
InstanceType first_instance_type() const
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
const InstanceType last_instance_type_
CheckInstanceType(uint64_t bitfield, CheckType check_type, const InstanceType first_instance_type, const InstanceType last_instance_type)
static constexpr Base::InputTypes kInputTypes
InstanceType last_instance_type() const
CheckType check_type() const
const InstanceType first_instance_type_
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kReceiverIndex
static constexpr int kRightIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
static constexpr int kLeftIndex
CheckInt32Condition(uint64_t bitfield, AssertCondition condition, DeoptimizeReason reason)
AssertCondition condition() const
static constexpr OpProperties kProperties
ReasonField::Next< AssertCondition, base::bits::WhichPowerOfTwo< size_t >( base::bits::RoundUpToPowerOfTwo32( kNumAssertConditions))> ConditionField
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
CheckInt32IsSmi(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
CheckIntPtrIsSmi(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
CheckJSDataViewBounds(uint64_t bitfield, ExternalArrayType element_type)
ExternalArrayType element_type() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kReceiverIndex
int MaxCallStackArgs() const
static constexpr OpProperties kProperties
static constexpr int kIndexIndex
ExternalArrayType element_type_
void SetValueLocationConstraints()
CheckType check_type() const
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
NextBitField< CheckType, 1 > CheckTypeBitField
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
CheckJSReceiverOrNullOrUndefined(uint64_t bitfield, CheckType check_type)
const compiler::ZoneRefSet< Map > maps_
static constexpr OpProperties kProperties
const compiler::ZoneRefSet< Map > & maps() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
CheckMapsWithAlreadyLoadedMap(uint64_t bitfield, base::Vector< const compiler::MapRef > maps, Zone *zone)
void SetValueLocationConstraints()
CheckMapsWithAlreadyLoadedMap(uint64_t bitfield, const compiler::ZoneRefSet< Map > &maps)
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
CheckMapsWithMigrationAndDeopt(uint64_t bitfield, base::Vector< const compiler::MapRef > maps, CheckType check_type, Zone *zone)
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
const compiler::ZoneRefSet< Map > maps_
const compiler::ZoneRefSet< Map > & maps() const
CheckMapsWithMigrationAndDeopt(uint64_t bitfield, const compiler::ZoneRefSet< Map > &maps, CheckType check_type)
void SetValueLocationConstraints()
NextBitField< CheckType, 1 > CheckTypeBitField
CheckType check_type() const
int MaxCallStackArgs() const
static constexpr Base::InputTypes kInputTypes
static constexpr int kReceiverIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kReceiverIndex
void SetValueLocationConstraints()
CheckMapsWithMigration(uint64_t bitfield, const compiler::ZoneRefSet< Map > &maps, CheckType check_type)
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void ClearUnstableNodeAspects(KnownNodeAspects &known_node_aspects)
const compiler::ZoneRefSet< Map > maps_
const compiler::ZoneRefSet< Map > & maps() const
CheckType check_type() const
static constexpr Base::InputTypes kInputTypes
NextBitField< CheckType, 1 > CheckTypeBitField
int MaxCallStackArgs() const
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
CheckMaps(uint64_t bitfield, base::Vector< const compiler::MapRef > maps, CheckType check_type, Zone *zone)
const compiler::ZoneRefSet< Map > maps_
const compiler::ZoneRefSet< Map > & maps() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
NextBitField< CheckType, 1 > CheckTypeBitField
CheckType check_type() const
static constexpr Base::InputTypes kInputTypes
static constexpr int kReceiverIndex
CheckMaps(uint64_t bitfield, const compiler::ZoneRefSet< Map > &maps, CheckType check_type)
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
CheckNotHole(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
Object::Conversion mode() const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
CheckNumber(uint64_t bitfield, Object::Conversion mode)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
const Object::Conversion mode_
static constexpr int kReceiverIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
static constexpr int kReceiverIndex
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
CheckSmi(uint64_t bitfield)
void SetValueLocationConstraints()
NextBitField< CheckType, 1 > CheckTypeBitField
CheckType check_type() const
static constexpr Base::InputTypes kInputTypes
static constexpr int kReceiverIndex
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
CheckStringOrStringWrapper(uint64_t bitfield, CheckType check_type)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
NextBitField< CheckType, 1 > CheckTypeBitField
static constexpr int kReceiverIndex
static constexpr Base::InputTypes kInputTypes
CheckType check_type() const
void SetValueLocationConstraints()
CheckString(uint64_t bitfield, CheckType check_type)
static constexpr OpProperties kProperties
CheckSymbol(uint64_t bitfield, CheckType check_type)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
CheckType check_type() const
static constexpr Base::InputTypes kInputTypes
NextBitField< CheckType, 1 > CheckTypeBitField
static constexpr int kReceiverIndex
static constexpr int kIndexIndex
CheckTypedArrayBounds(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kLengthIndex
void SetValueLocationConstraints()
CheckTypedArrayNotDetached(uint64_t bitfield)
static constexpr int kObjectIndex
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
CheckUint32IsSmi(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
CheckValueEqualsInt32(uint64_t bitfield, int32_t value, DeoptimizeReason reason)
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kTargetIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kTargetIndex
CheckValueEqualsString(uint64_t bitfield, compiler::InternalizedStringRef value, DeoptimizeReason reason)
void SetValueLocationConstraints()
const compiler::InternalizedStringRef value_
static constexpr OpProperties kProperties
compiler::InternalizedStringRef value() const
static constexpr Base::InputTypes kInputTypes
int MaxCallStackArgs() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
const compiler::HeapObjectRef value_
compiler::HeapObjectRef value() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
CheckValue(uint64_t bitfield, const compiler::HeapObjectRef value, DeoptimizeReason reason)
static constexpr OpProperties kProperties
static constexpr int kTargetIndex
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
int MaxCallStackArgs() const
CheckedHoleyFloat64ToFloat64(uint64_t bitfield)
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
CheckedInt32ToUint32(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
CheckedIntPtrToInt32(uint64_t bitfield)
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
CheckedIntPtrToUint32(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
NextBitField< CheckType, 1 > CheckTypeBitField
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
CheckedInternalizedString(uint64_t bitfield, CheckType check_type)
static constexpr Base::InputTypes kInputTypes
static constexpr int kObjectIndex
CheckType check_type() const
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
CheckedNumberOrOddballToFloat64OrHoleyFloat64(uint64_t bitfield, TaggedToFloat64ConversionType conversion_type)
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
DeoptimizeReason deoptimize_reason() const
TaggedToFloat64ConversionType conversion_type() const
Base::template NextBitField< TaggedToFloat64ConversionType, 2 > TaggedToFloat64ConversionTypeOffset
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
CheckedNumberOrOddballToFloat64(uint64_t bitfield, TaggedToFloat64ConversionType conversion_type)
CheckedNumberOrOddballToHoleyFloat64(uint64_t bitfield, TaggedToFloat64ConversionType conversion_type)
static constexpr Base::InputTypes kInputTypes
CheckedNumberToInt32(uint64_t bitfield)
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
CheckedNumberToUint8Clamped(uint64_t bitfield)
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
CheckType check_type() const
static constexpr int kObjectIndex
static constexpr OpProperties kProperties
int MaxCallStackArgs() const
NextBitField< CheckType, 1 > CheckTypeBitField
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
CheckedObjectToIndex(uint64_t bitfield, CheckType check_type)
CheckedSmiDecrement(uint64_t bitfield)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
static constexpr int kValueIndex
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kValueIndex
CheckedSmiIncrement(uint64_t bitfield)
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
CheckedSmiSizedInt32(uint64_t bitfield)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
int MaxCallStackArgs() const
CheckedSmiTagFloat64(uint64_t bitfield)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
CheckedSmiTagInt32(uint64_t bitfield)
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
CheckedSmiTagIntPtr(uint64_t bitfield)
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
CheckedSmiTagUint32(uint64_t bitfield)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
CheckedSmiUntag(uint64_t bitfield)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
CheckedTruncateFloat64ToInt32(uint64_t bitfield)
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
CheckedTruncateFloat64ToUint32(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
TaggedToFloat64ConversionType conversion_type() const
NextBitField< TaggedToFloat64ConversionType, 2 > TaggedToFloat64ConversionTypeOffset
CheckedTruncateNumberOrOddballToInt32(uint64_t bitfield, TaggedToFloat64ConversionType conversion_type)
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
CheckedUint32ToInt32(uint64_t bitfield)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
CheckpointedJump(uint64_t bitfield, BasicBlockRef *target_refs)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
ConditionalControlNode(uint64_t bitfield)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
int MaxCallStackArgs() const
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
ConsStringMap(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
ConstantGapMove(uint64_t bitfield, ValueNode *node, compiler::AllocatedOperand target)
void SetValueLocationConstraints()
compiler::InstructionOperand source_
compiler::AllocatedOperand target() const
compiler::AllocatedOperand target_
bool IsTheHole(compiler::JSHeapBroker *broker) const
void DoLoadToRegister(MaglevAssembler *, OutputRegister)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
bool ToBoolean(LocalIsolate *local_isolate) const
compiler::HeapObjectRef object()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
const compiler::HeapObjectRef object_
Constant(uint64_t bitfield, compiler::HeapObjectRef object)
void SetValueLocationConstraints()
compiler::HeapObjectRef ref() const
DirectHandle< Object > DoReify(LocalIsolate *isolate) const
ValueNode * context() const
SourcePosition source_position() const
ConstructInvokeStubFrameData & data()
const ConstructInvokeStubFrameData & data() const
ConstructInvokeStubDeoptFrame(const MaglevCompilationUnit &unit, SourcePosition source_position, ValueNode *receiver, ValueNode *context, DeoptFrame *parent)
ValueNode * receiver() const
const MaglevCompilationUnit & unit() const
const Input & new_target() const
int num_args_no_spread() const
static constexpr int kNewTargetIndex
compiler::FeedbackSource feedback() const
const Input & context() const
const compiler::FeedbackSource feedback_
const Input & function() const
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
void set_arg(int i, ValueNode *node)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kContextIndex
int MaxCallStackArgs() const
static constexpr OpProperties kProperties
ConstructWithSpread(uint64_t bitfield, compiler::FeedbackSource feedback, ValueNode *function, ValueNode *new_target, ValueNode *context)
static constexpr int kFixedInputCount
static constexpr int kFunctionIndex
void SetValueLocationConstraints()
void set_arg(int i, ValueNode *node)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
Construct(uint64_t bitfield, const compiler::FeedbackSource &feedback, ValueNode *function, ValueNode *new_target, ValueNode *context)
const compiler::FeedbackSource feedback_
static constexpr int kContextIndex
static constexpr int kNewTargetIndex
void SetValueLocationConstraints()
const Input & function() const
int MaxCallStackArgs() const
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
static constexpr OpProperties kProperties
static constexpr int kFixedInputCount
compiler::FeedbackSource feedback() const
static constexpr int kFunctionIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
const Input & context() const
const Input & new_target() const
ControlNode * next_post_dominating_hole_
ControlNode * next_post_dominating_hole() const
void set_next_post_dominating_hole(ControlNode *node)
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
ConvertHoleToUndefined(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
const compiler::NativeContextRef native_context_
ConvertReceiverMode mode_
static constexpr Base::InputTypes kInputTypes
compiler::NativeContextRef native_context() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
ConvertReceiver(uint64_t bitfield, compiler::NativeContextRef native_context, ConvertReceiverMode mode)
int MaxCallStackArgs() const
static constexpr OpProperties kProperties
ConvertReceiverMode mode() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
const compiler::FeedbackSource feedback_
static constexpr OpProperties kProperties
const compiler::HeapObjectRef constant_elements_
CreateArrayLiteral(uint64_t bitfield, compiler::HeapObjectRef constant_elements, const compiler::FeedbackSource &feedback, int flags)
int MaxCallStackArgs() const
compiler::HeapObjectRef constant_elements()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
compiler::FeedbackSource feedback() const
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
const compiler::SharedFunctionInfoRef shared_function_info_
static constexpr Base::InputTypes kInputTypes
int MaxCallStackArgs() const
CreateClosure(uint64_t bitfield, compiler::SharedFunctionInfoRef shared_function_info, compiler::FeedbackCellRef feedback_cell, bool pretenured)
static constexpr OpProperties kProperties
const compiler::FeedbackCellRef feedback_cell_
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
compiler::FeedbackCellRef feedback_cell() const
compiler::SharedFunctionInfoRef shared_function_info() const
AllocationType allocation_type() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
const AllocationType allocation_type_
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
CreateFastArrayElements(uint64_t bitfield, AllocationType allocation_type)
void SetValueLocationConstraints()
uint32_t slot_count() const
int MaxCallStackArgs() const
static constexpr OpProperties kProperties
compiler::ScopeInfoRef scope_info() const
static constexpr Base::InputTypes kInputTypes
const compiler::ScopeInfoRef scope_info_
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
ScopeType scope_type() const
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
CreateFunctionContext(uint64_t bitfield, compiler::ScopeInfoRef scope_info, uint32_t slot_count, ScopeType scope_type)
const uint32_t slot_count_
int MaxCallStackArgs() const
const compiler::FeedbackSource feedback_
compiler::FeedbackSource feedback() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
compiler::ObjectBoilerplateDescriptionRef boilerplate_descriptor()
CreateObjectLiteral(uint64_t bitfield, compiler::ObjectBoilerplateDescriptionRef boilerplate_descriptor, const compiler::FeedbackSource &feedback, int flags)
static constexpr OpProperties kProperties
const compiler::ObjectBoilerplateDescriptionRef boilerplate_descriptor_
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
CreateRegExpLiteral(uint64_t bitfield, compiler::StringRef pattern, const compiler::FeedbackSource &feedback, int flags)
const compiler::FeedbackSource feedback_
compiler::StringRef pattern_
int MaxCallStackArgs() const
void SetValueLocationConstraints()
compiler::FeedbackSource feedback() const
compiler::StringRef pattern()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
CreateShallowArrayLiteral(uint64_t bitfield, compiler::HeapObjectRef constant_elements, const compiler::FeedbackSource &feedback, int flags)
compiler::FeedbackSource feedback() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
const compiler::FeedbackSource feedback_
const compiler::HeapObjectRef constant_elements_
compiler::HeapObjectRef constant_elements()
int MaxCallStackArgs() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
compiler::ObjectBoilerplateDescriptionRef boilerplate_descriptor()
static constexpr OpProperties kProperties
CreateShallowObjectLiteral(uint64_t bitfield, compiler::ObjectBoilerplateDescriptionRef boilerplate_descriptor, const compiler::FeedbackSource &feedback, int flags)
const compiler::ObjectBoilerplateDescriptionRef boilerplate_descriptor_
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
const compiler::FeedbackSource feedback_
compiler::FeedbackSource feedback() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int MaxCallStackArgs() const
void MarkTaggedInputsAsDecompressing()
void VerifyInputs(MaglevGraphLabeller *) const
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
DebugBreak(uint64_t bitfield)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
static constexpr OpProperties kProperties
static constexpr int kObjectIndex
static constexpr int kValueIndex
static constexpr int kKeyIndex
int MaxCallStackArgs() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kContextIndex
void SetValueLocationConstraints()
DefineKeyedOwnGeneric(uint64_t bitfield, const compiler::FeedbackSource &feedback)
static constexpr int kFlagsIndex
compiler::FeedbackSource feedback() const
const compiler::FeedbackSource feedback_
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
const compiler::FeedbackSource feedback_
int MaxCallStackArgs() const
compiler::NameRef name() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
static constexpr int kValueIndex
const compiler::NameRef name_
compiler::FeedbackSource feedback() const
static constexpr int kContextIndex
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
DefineNamedOwnGeneric(uint64_t bitfield, compiler::NameRef name, const compiler::FeedbackSource &feedback)
static constexpr int kObjectIndex
LanguageMode mode() const
void SetValueLocationConstraints()
int MaxCallStackArgs() const
DeleteProperty(uint64_t bitfield, LanguageMode mode)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
SourcePosition GetSourcePosition() const
const InlinedArgumentsDeoptFrame & as_inlined_arguments() const
const ConstructInvokeStubDeoptFrame & as_construct_stub() const
VirtualObjectList GetVirtualObjects() const
compiler::SharedFunctionInfoRef GetSharedFunctionInfo() const
DeoptFrame(InterpretedFrameData &&data, DeoptFrame *parent)
const DeoptFrame * parent() const
DeoptFrame(const FrameData &data, DeoptFrame *parent)
DeoptFrame(FrameData &&data, DeoptFrame *parent)
DeoptFrame(InlinedArgumentsFrameData &&data, DeoptFrame *parent)
const InterpretedDeoptFrame & as_interpreted() const
const MaglevCompilationUnit & GetCompilationUnit() const
compiler::BytecodeArrayRef GetBytecodeArray() const
@ kConstructInvokeStubFrame
@ kBuiltinContinuationFrame
DeoptFrame(ConstructInvokeStubFrameData &&data, DeoptFrame *parent)
DeoptFrame *const parent_
const BuiltinContinuationDeoptFrame & as_builtin_continuation() const
BytecodeOffset GetBytecodeOffset() const
DeoptFrame(BuiltinContinuationFrameData &&data, DeoptFrame *parent)
const DeoptFrame & top_frame() const
const compiler::FeedbackSource & feedback_to_update() const
void set_translation_index(int index)
bool has_input_locations() const
InputLocation * input_locations_
void InitializeInputLocations(Zone *zone, size_t count)
Label * deopt_entry_label()
int translation_index() const
DeoptInfo(Zone *zone, const DeoptFrame top_frame, compiler::FeedbackSource feedback_to_update)
const compiler::FeedbackSource feedback_to_update_
InputLocation * input_locations() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
Deopt(uint64_t bitfield, DeoptimizeReason reason)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
EagerDeoptInfo(Zone *zone, const DeoptFrame top_frame, compiler::FeedbackSource feedback_to_update)
DeoptimizeReason reason() const
void set_reason(DeoptimizeReason reason)
void ForEachInput(Function &&f)
static constexpr int kElementsIndex
EnsureWritableFastElements(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr int kObjectIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int MaxCallStackArgs() const
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
BasicBlock * catch_block() const
ExceptionHandlerInfo(BasicBlockRef *catch_block_ref, int depth)
BasicBlockRef catch_block_
BasicBlockRef * catch_block_ref_address()
ExceptionHandlerInfo(BasicBlock *catch_block_ref, int depth)
bool ShouldLazyDeopt() const
bool HasExceptionHandler() const
ExceptionHandlerInfo ** next()
Label & trampoline_entry()
ExceptionHandlerInfo * next_
void set_pc_offset(int offset)
ExceptionHandlerInfo(Mode mode=kNoExceptionHandler)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
int MaxCallStackArgs() const
static constexpr int kPropertyArrayIndex
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
ExtendPropertiesBackingStore(uint64_t bitfield, int old_length)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kObjectIndex
Input & property_array_input()
void DoLoadToRegister(MaglevAssembler *, OutputRegister)
ExternalReference reference() const
void SetValueLocationConstraints()
const ExternalReference reference_
void GenerateCode(MaglevAssembler *, const ProcessingState &)
ExternalConstant(uint64_t bitfield, const ExternalReference &reference)
bool ToBoolean(LocalIsolate *local_isolate) const
DirectHandle< Object > DoReify(LocalIsolate *isolate) const
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
int MaxCallStackArgs() const
const compiler::SharedFunctionInfoRef shared_function_info_
FastCreateClosure(uint64_t bitfield, compiler::SharedFunctionInfoRef shared_function_info, compiler::FeedbackCellRef feedback_cell)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
compiler::SharedFunctionInfoRef shared_function_info() const
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
compiler::FeedbackCellRef feedback_cell() const
static constexpr Base::InputTypes kInputTypes
const compiler::FeedbackCellRef feedback_cell_
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
Float64Abs(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
static constexpr int kRightIndex
static constexpr int kLeftIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
Float64BinaryNodeWithCall(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
static constexpr int kRightIndex
Float64BinaryNode(uint64_t bitfield)
static constexpr OpProperties kProperties
static constexpr int kLeftIndex
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
Float64Compare(uint64_t bitfield, Operation operation)
void SetValueLocationConstraints()
static constexpr int kRightIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
constexpr Operation operation() const
static constexpr int kLeftIndex
NextBitField< Operation, 5 > OperationBitField
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
bool ToBoolean(LocalIsolate *local_isolate) const
Float64Constant(uint64_t bitfield, Float64 value)
DirectHandle< Object > DoReify(LocalIsolate *isolate) const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void DoLoadToRegister(MaglevAssembler *, OutputRegister)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
DECL_ENUM(MathName, ExtName, EnumName)
ExternalReference ieee_function_ref() const
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
Ieee754Function ieee_function() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
Float64Ieee754Unary(uint64_t bitfield, Ieee754Function ieee_function)
static constexpr OpProperties kProperties
Ieee754Function ieee_function_
int MaxCallStackArgs() const
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
Float64Negate(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
Float64Round(uint64_t bitfield, Kind kind)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
static Builtin continuation(Kind kind)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
constexpr bool flip() const
NextBitField< bool, 1 > FlipBitField
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
Float64ToBoolean(uint64_t bitfield, bool flip)
static constexpr Base::InputTypes kInputTypes
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
int MaxCallStackArgs() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
Float64ToHeapNumberForField(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
Float64ToTagged(uint64_t bitfield, ConversionMode mode)
ConversionMode conversion_mode() const
void SetValueLocationConstraints()
NextBitField< ConversionMode, 1 > ConversionModeBitField
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int MaxCallStackArgs() const
static constexpr OpProperties kProperties
Float64ToUint8Clamped(uint64_t bitfield)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
int MaxCallStackArgs() const
compiler::FeedbackSource feedback() const
ForInNext(uint64_t bitfield, compiler::FeedbackSource &feedback)
const compiler::FeedbackSource feedback_
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
compiler::FeedbackSource feedback() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
const compiler::FeedbackSource feedback_
int MaxCallStackArgs() const
ForInPrepare(uint64_t bitfield, compiler::FeedbackSource &feedback)
FunctionEntryStackCheck(uint64_t bitfield)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
int MaxCallStackArgs() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
compiler::AllocatedOperand source_
compiler::AllocatedOperand target() const
compiler::AllocatedOperand target_
GapMove(uint64_t bitfield, compiler::AllocatedOperand source, compiler::AllocatedOperand target)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
compiler::AllocatedOperand source() const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
GeneratorRestoreRegister(uint64_t bitfield, int index)
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr int kGeneratorIndex
static constexpr int kFixedInputCount
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
GeneratorStore(uint64_t bitfield, ValueNode *context, ValueNode *generator, int suspend_id, int bytecode_offset)
int num_parameters_and_registers() const
void set_parameters_and_registers(int i, ValueNode *node)
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
static constexpr int kContextIndex
int MaxCallStackArgs() const
void SetValueLocationConstraints()
const int bytecode_offset_
int bytecode_offset() const
Input & generator_input()
Input & parameters_and_registers(int i)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
GetContinuationPreservedEmbedderData(uint64_t bitfield)
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
int MaxCallStackArgs() const
IndirectHandle< FeedbackVector > feedback() const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
GetIterator(uint64_t bitfield, int load_slot, int call_slot, compiler::FeedbackVectorRef feedback)
const IndirectHandle< FeedbackVector > feedback_
int MaxCallStackArgs() const
static constexpr Base::InputTypes kInputTypes
static constexpr int kKeyIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kContextIndex
static constexpr OpProperties kProperties
const compiler::FeedbackSource feedback_
GetKeyedGeneric(uint64_t bitfield, const compiler::FeedbackSource &feedback)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kObjectIndex
void SetValueLocationConstraints()
compiler::FeedbackSource feedback() const
GetSecondReturnedValue(uint64_t bitfield)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
int MaxCallStackArgs() const
compiler::SharedFunctionInfoRef shared_function_info_
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
const compiler::FeedbackSource feedback_
GetTemplateObject(uint64_t bitfield, compiler::SharedFunctionInfoRef shared_function_info, const compiler::FeedbackSource &feedback)
compiler::FeedbackSource feedback() const
compiler::SharedFunctionInfoRef shared_function_info()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
HandleNoHeapWritesInterrupt(uint64_t bitfield)
int MaxCallStackArgs() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
int MaxCallStackArgs() const
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
compiler::HeapObjectRef prototype_
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
HasInPrototypeChain(uint64_t bitfield, compiler::HeapObjectRef prototype)
compiler::HeapObjectRef prototype()
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
HoleyFloat64IsHole(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
int MaxCallStackArgs() const
HoleyFloat64ToMaybeNanFloat64(uint64_t bitfield)
static constexpr OpProperties kProperties
static constexpr OpProperties kProperties
ConversionMode conversion_mode() const
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
void SetMode(ConversionMode mode)
NextBitField< ConversionMode, 1 > ConversionModeBitField
void GenerateCode(MaglevAssembler *, const ProcessingState &)
HoleyFloat64ToTagged(uint64_t bitfield, ConversionMode mode)
int MaxCallStackArgs() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
Identity(uint64_t bitfield)
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
void VerifyInputs(MaglevGraphLabeller *) const
interpreter::Register source() const
const interpreter::Register source_
static uint32_t stack_slot(uint32_t register_idx)
uint32_t stack_slot() const
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
InitialValue(uint64_t bitfield, interpreter::Register source)
static constexpr OpProperties kProperties
EscapeAnalysisResult escape_analysis_result_
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
int non_escaping_use_count() const
bool HasBeenElided() const
void UpdateObject(VirtualObject *object)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
AllocationBlock * allocation_block()
InlinedAllocation(uint64_t bitfield, VirtualObject *object)
int non_escaping_use_count_
InlinedAllocation ** next()
void SetValueLocationConstraints()
void AddNonEscapingUses(int n=1)
bool HasBeenAnalysed() const
static constexpr Base::InputTypes kInputTypes
void set_offset(int offset)
InlinedAllocation * next_
Input & allocation_block_input()
VirtualObject * object() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
BytecodeOffset bytecode_position() const
InlinedArgumentsFrameData & data()
InlinedArgumentsDeoptFrame(const MaglevCompilationUnit &unit, BytecodeOffset bytecode_position, ValueNode *closure, base::Vector< ValueNode * > arguments, DeoptFrame *parent)
base::Vector< ValueNode * > arguments() const
const MaglevCompilationUnit & unit() const
const InlinedArgumentsFrameData & data() const
ValueNode * closure() const
Int32AbsWithOverflow(uint64_t bitfield)
static constexpr int kValueIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
static constexpr int kRightIndex
static constexpr int kLeftIndex
static constexpr OpProperties kProperties
Int32BinaryNode(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
Int32BinaryWithOverflowNode(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
static constexpr int kRightIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kLeftIndex
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
Int32BitwiseNot(uint64_t bitfield)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kValueIndex
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kLeftIndex
constexpr Operation operation() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
Int32Compare(uint64_t bitfield, Operation operation)
NextBitField< Operation, 5 > OperationBitField
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kRightIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
bool ToBoolean(LocalIsolate *local_isolate) const
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
DirectHandle< Object > DoReify(LocalIsolate *isolate) const
void DoLoadToRegister(MaglevAssembler *, OutputRegister)
Int32Constant(uint64_t bitfield, int32_t value)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
Int32ShiftRightLogical(uint64_t bitfield)
static constexpr int kRightIndex
void SetValueLocationConstraints()
static constexpr int kLeftIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
NextBitField< bool, 1 > FlipBitField
static constexpr Base::InputTypes kInputTypes
constexpr bool flip() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
Int32ToBoolean(uint64_t bitfield, bool flip)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int MaxCallStackArgs() const
Int32ToNumber(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
Int32ToUint8Clamped(uint64_t bitfield)
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kValueIndex
Int32UnaryWithOverflowNode(uint64_t bitfield)
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
NextBitField< bool, 1 > FlipBitField
constexpr bool flip() const
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
IntPtrToBoolean(uint64_t bitfield, bool flip)
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
IntPtrToNumber(uint64_t bitfield)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int MaxCallStackArgs() const
static constexpr Base::InputTypes kInputTypes
const MaglevCompilationUnit & unit() const
InterpretedFrameData & data()
int ComputeReturnOffset(interpreter::Register result_location, int result_size) const
ValueNode * closure() const
InterpretedDeoptFrame(const MaglevCompilationUnit &unit, const CompactInterpreterFrameState *frame_state, ValueNode *closure, BytecodeOffset bytecode_position, SourcePosition source_position, DeoptFrame *parent)
BytecodeOffset bytecode_position() const
const CompactInterpreterFrameState * frame_state() const
const InterpretedFrameData & data() const
SourcePosition source_position() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
JumpLoop(uint64_t bitfield, BasicBlock *target)
base::Vector< Input > used_node_locations_
void set_used_nodes(base::Vector< Input > locations)
base::Vector< Input > used_nodes()
JumpLoop(uint64_t bitfield, BasicBlockRef *ref)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
Jump(uint64_t bitfield, BasicBlockRef *target_refs)
interpreter::Register result_location_
interpreter::Register result_location() const
bool HasResultLocation() const
static bool InReturnValues(interpreter::Register reg, interpreter::Register result_location, int result_size)
void set_deopting_call_return_pc(int pc)
int deopting_call_return_pc() const
static constexpr unsigned int kUninitializedCallReturnPc
void ForEachInput(Function &&f)
bool IsResultRegister(interpreter::Register reg) const
static constexpr int kMaxCodeSize
LazyDeoptInfo(Zone *zone, const DeoptFrame top_frame, interpreter::Register result_location, int result_size, compiler::FeedbackSource feedback_to_update)
const InterpretedDeoptFrame & GetFrameForExceptionHandler(const ExceptionHandlerInfo *handler_info)
static constexpr Base::InputTypes kInputTypes
LoadDoubleDataViewElement(uint64_t bitfield, ExternalArrayType type)
static constexpr ExternalArrayType type_
Input & is_little_endian_input()
bool is_little_endian_constant()
static constexpr int kIsLittleEndianIndex
void SetValueLocationConstraints()
static constexpr int kObjectIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kIndexIndex
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kObjectIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
LoadDoubleField(uint64_t bitfield, int offset)
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
LoadEnumCacheLength(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
static constexpr int kMapInput
LoadFixedArrayElement(uint64_t bitfield)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kIndexIndex
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
static constexpr int kElementsIndex
static constexpr Base::InputTypes kInputTypes
static constexpr int kIndexIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
LoadFixedDoubleArrayElement(uint64_t bitfield)
static constexpr int kElementsIndex
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
LoadFloat64(uint64_t bitfield, int offset)
static constexpr Base::InputTypes kInputTypes
static constexpr int kObjectIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
const compiler::NameRef name_
const compiler::FeedbackSource feedback_
const TypeofMode typeof_mode_
int MaxCallStackArgs() const
LoadGlobal(uint64_t bitfield, compiler::NameRef name, const compiler::FeedbackSource &feedback, TypeofMode typeof_mode)
static constexpr Base::InputTypes kInputTypes
compiler::FeedbackSource feedback() const
static constexpr OpProperties kProperties
TypeofMode typeof_mode() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
compiler::NameRef name() const
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kObjectIndex
LoadHeapInt32(uint64_t bitfield, int offset)
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
LoadHoleyFixedDoubleArrayElementCheckedNotHole(uint64_t bitfield)
static constexpr int kElementsIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kIndexIndex
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
LoadHoleyFixedDoubleArrayElement(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
static constexpr int kElementsIndex
static constexpr int kIndexIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kObjectIndex
void SetValueLocationConstraints()
LoadInt32(uint64_t bitfield, int offset)
static constexpr Base::InputTypes kInputTypes
compiler::NameRef name() const
static constexpr int kReceiverIndex
compiler::FeedbackSource feedback() const
static constexpr int kLookupStartObjectIndex
LoadNamedFromSuperGeneric(uint64_t bitfield, compiler::NameRef name, const compiler::FeedbackSource &feedback)
const compiler::NameRef name_
static constexpr int kContextIndex
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int MaxCallStackArgs() const
const compiler::FeedbackSource feedback_
Input & lookup_start_object()
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
static constexpr int kObjectIndex
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
compiler::NameRef name() const
const compiler::FeedbackSource feedback_
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
const compiler::NameRef name_
int MaxCallStackArgs() const
compiler::FeedbackSource feedback() const
LoadNamedGeneric(uint64_t bitfield, compiler::NameRef name, const compiler::FeedbackSource &feedback)
static constexpr int kContextIndex
LoadSignedIntDataViewElement(uint64_t bitfield, ExternalArrayType type)
ExternalArrayType type() const
Input & is_little_endian_input()
static constexpr int kObjectIndex
static constexpr int kIndexIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kIsLittleEndianIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
bool is_little_endian_constant()
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
static constexpr int kObjectIndex
static constexpr int kIndexIndex
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
LoadTaggedFieldByFieldIndex(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
int MaxCallStackArgs() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
LoadTaggedFieldForContextSlot(uint64_t bitfield, const int offset)
LoadTaggedFieldForProperty(uint64_t bitfield, const int offset, compiler::NameRef name)
static constexpr Base::InputTypes kInputTypes
LoadTaggedFieldForScriptContextSlot(uint64_t bitfield, const int index)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
int MaxCallStackArgs() const
static constexpr int kContextIndex
void SetValueLocationConstraints()
LoadTaggedField(uint64_t bitfield, const int offset)
void SetValueLocationConstraints()
static constexpr int kReceiverIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
ElementsKind elements_kind() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
ElementsKind elements_kind_
LoadTypedArrayLength(uint64_t bitfield, ElementsKind elements_kind)
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
LogicalNot(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
MapPrototypeGetInt32Key(uint64_t bitfield)
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int MaxCallStackArgs() const
MapPrototypeGet(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
const ElementsKind elements_kind_
static constexpr int kElementsIndex
void SetValueLocationConstraints()
static constexpr int kIndexIndex
Input & elements_length_input()
static constexpr int kElementsLengthIndex
MaybeGrowFastElements(uint64_t bitfield, ElementsKind elements_kind)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
ElementsKind elements_kind() const
static constexpr int kObjectIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int MaxCallStackArgs() const
MigrateMapIfNeeded(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
int MaxCallStackArgs() const
static constexpr OpProperties kProperties
static constexpr int kObjectIndex
void ClearUnstableNodeAspects(KnownNodeAspects &known_node_aspects)
static constexpr int kMapIndex
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
constexpr const Input * input_base() const
void set_properties(OpProperties properties)
EagerDeoptInfo * eager_deopt_info()
Address exception_handler_address() const
void set_temporaries_needed(uint8_t value)
static constexpr OpProperties kProperties
void set_owner(BasicBlock *block)
void RequireSpecificTemporary(Register reg)
constexpr const T * Cast() const
void OverwriteWithIdentityTo(ValueNode *node)
constexpr uint64_t bitfield() const
void change_representation(ValueRepresentation new_repr)
InputCountField::Next< bool, 1 > ReservedField
constexpr bool Is() const
constexpr const Input & input(int index) const
static constexpr size_t RegisterSnapshotSize(OpProperties properties)
constexpr const T * TryCast() const
NodeBase(const NodeBase &)=delete
void set_input(int index, ValueNode *node)
static constexpr int kMaxInputs
Address last_input_address() const
static constexpr Opcode opcode_of
ExceptionHandlerInfo * exception_handler_info()
constexpr bool has_inputs() const
OwnerOrTemporaries owner_or_temporaries_
RegListBase< RegisterT > & temporaries()
void assign_temporaries(RegListBase< RegisterT > list)
static constexpr size_t LazyDeoptInfoSize(OpProperties properties)
RegList & general_temporaries()
void reduce_input_count(int num=1)
static Derived * Allocate(Zone *zone, size_t input_count, Args &&... args)
static constexpr size_t EagerDeoptInfoSize(OpProperties properties)
constexpr Input * input_base()
void ForAllInputsInRegallocAssignmentOrder(Function &&f)
void CopyEagerDeoptInfoOf(NodeBase *other, Zone *zone)
constexpr NodeIdT id() const
BasicBlock * owner() const
void ClearUnstableNodeAspects(KnownNodeAspects &)
NodeBase(uint64_t bitfield)
void SetEagerDeoptInfo(Zone *zone, DeoptFrame deopt_frame, compiler::FeedbackSource feedback_to_update=compiler::FeedbackSource())
void change_input(int index, ValueNode *node)
static constexpr size_t ExceptionHandlerInfoSize(OpProperties properties)
const Input * last_input() const
Address deopt_info_address() const
static Derived * New(Zone *zone, std::initializer_list< ValueNode * > inputs, Args &&... args)
Address register_snapshot_address() const
void ClearElementsProperties(KnownNodeAspects &)
static Derived * New(Zone *zone, size_t input_count, Args &&... args)
DoubleRegList & double_temporaries()
void CheckCanOverwriteWith(Opcode new_opcode, OpProperties new_properties)
constexpr Input & input(int index)
void set_bitfield(uint64_t new_bitfield)
constexpr int input_count() const
void set_opcode(Opcode new_opcode)
uint8_t num_temporaries_needed() const
NodeBase(NodeBase &&)=delete
NodeBase & operator=(const NodeBase &)=delete
void set_double_temporaries_needed(uint8_t value)
void RequireSpecificDoubleTemporary(DoubleRegister reg)
const RegisterSnapshot & register_snapshot() const
constexpr bool has_id() const
void set_register_snapshot(RegisterSnapshot snapshot)
void initialize_input_null(int index)
std::optional< int32_t > TryGetInt32ConstantInput(int index)
constexpr Opcode opcode() const
LazyDeoptInfo * lazy_deopt_info()
void OverwriteWith(Opcode new_opcode, std::optional< OpProperties > maybe_new_properties=std::nullopt)
NodeBase & operator=(NodeBase &&)=delete
constexpr OpProperties properties() const
NodeTMixin(uint64_t bitfield, Args &&... args)
constexpr const OpProperties & properties() const
static Derived * New(Zone *zone, std::initializer_list< ValueNode * > inputs, Args &&... args)
constexpr Opcode opcode() const
static Derived * New(Zone *zone, size_t input_count, Args &&... args)
static constexpr bool needs_epoch_check(Opcode op)
static constexpr bool participate_in_cse(Opcode op)
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int MaxCallStackArgs() const
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
NumberToString(uint64_t bitfield)
static const uint32_t kPureMask
static const size_t kSize
static constexpr OpProperties TaggedValue()
constexpr bool can_allocate() const
static constexpr OpProperties ConversionNode()
constexpr bool needs_register_snapshot() const
constexpr bool is_required_when_unused() const
constexpr bool can_read() const
static constexpr OpProperties CanCallUserCode()
constexpr OpProperties(uint32_t bitfield)
static constexpr OpProperties CanThrow()
static constexpr OpProperties IntPtr()
constexpr bool can_throw() const
static constexpr OpProperties Int32()
static constexpr OpProperties CanRead()
static constexpr OpProperties DeferredCall()
static constexpr OpProperties CanAllocate()
constexpr bool is_deopt_checkpoint() const
constexpr bool can_eager_deopt() const
static constexpr OpProperties AnySideEffects()
constexpr OpProperties operator|(const OpProperties &that)
OpProperties WithNewValueRepresentation(ValueRepresentation new_repr) const
constexpr bool can_lazy_deopt() const
static constexpr OpProperties Call()
static constexpr OpProperties JSCall()
static constexpr OpProperties Uint32()
OpProperties WithoutDeopt() const
static constexpr OpProperties LazyDeopt()
static constexpr OpProperties Pure()
constexpr bool is_any_call() const
constexpr ValueRepresentation value_representation() const
constexpr bool is_conversion() const
constexpr bool is_call() const
static constexpr OpProperties DeoptCheckpoint()
static constexpr OpProperties NeedsRegisterSnapshot()
static constexpr OpProperties ForValueRepresentation(ValueRepresentation repr)
constexpr bool is_deferred_call() const
constexpr bool is_pure() const
static constexpr OpProperties CanWrite()
constexpr bool is_tagged() const
static constexpr OpProperties ExternalReference()
static constexpr OpProperties Float64()
constexpr bool not_idempotent() const
static constexpr OpProperties GenericRuntimeOrBuiltinCall()
static const uint32_t kPureValue
constexpr bool can_write() const
static constexpr OpProperties EagerDeopt()
static constexpr OpProperties NotIdempotent()
static constexpr OpProperties HoleyFloat64()
constexpr bool can_participate_in_cse() const
static constexpr OpProperties TrustedPointer()
constexpr bool can_deopt() const
UseRepresentationSet get_same_loop_uses_repr_hints()
void SetUseRequires31BitValue()
const interpreter::Register owner_
Requires31BitValueFlag::Next< bool, 1 > LoopPhiAfterLoopFlag
void merge_type(NodeType type)
bool uses_require_31_bit_value() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
NextBitField< bool, 1 > HasKeyFlag
void promote_post_loop_type()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
BasicBlock * predecessor_at(int i)
bool is_backedge_offset(int i) const
Phi(uint64_t bitfield, MergePointInterpreterFrameState *merge_state, interpreter::Register owner)
void set_post_loop_type(NodeType type)
MergePointInterpreterFrameState *const merge_state_
UseRepresentationSet same_loop_uses_repr_hint_
void merge_post_loop_type(NodeType type)
UseRepresentationSet uses_repr_hint_
bool is_exception_phi() const
void set_type(NodeType type)
const MergePointInterpreterFrameState * merge_state() const
UseRepresentationSet get_uses_repr_hints()
void set_uses_require_31_bit_value()
bool is_unmerged_loop_phi() const
interpreter::Register owner() const
void RecordUseReprHint(UseRepresentation repr)
HasKeyFlag::Next< bool, 1 > Requires31BitValueFlag
const FieldIndex field_index_
FieldIndex field_index() const
double constant_double() const
const compiler::ObjectRef constant_
static PolymorphicAccessInfo Constant(const ZoneVector< compiler::MapRef > &maps, compiler::ObjectRef constant)
const Representation representation_
static PolymorphicAccessInfo ConstantDouble(const ZoneVector< compiler::MapRef > &maps, Float64 constant)
struct v8::internal::maglev::PolymorphicAccessInfo::@148::@150 data_load_
compiler::OptionalJSObjectRef holder() const
static PolymorphicAccessInfo ModuleExport(const ZoneVector< compiler::MapRef > &maps, compiler::CellRef cell)
Representation field_representation() const
const compiler::OptionalJSObjectRef holder_
const Float64 constant_double_
DirectHandle< Cell > cell() const
PolymorphicAccessInfo(Kind kind, const ZoneVector< compiler::MapRef > &maps, Representation representation, compiler::ObjectRef constant)
const ZoneVector< compiler::MapRef > & maps() const
static PolymorphicAccessInfo StringLength(const ZoneVector< compiler::MapRef > &maps)
PolymorphicAccessInfo(Kind kind, const ZoneVector< compiler::MapRef > &maps, Representation representation)
DirectHandle< Object > constant() const
static PolymorphicAccessInfo NotFound(const ZoneVector< compiler::MapRef > &maps)
const ZoneVector< compiler::MapRef > maps_
PolymorphicAccessInfo(Kind kind, const ZoneVector< compiler::MapRef > &maps, Float64 constant)
size_t hash_value() const
bool operator==(const PolymorphicAccessInfo &other) const
PolymorphicAccessInfo(Kind kind, const ZoneVector< compiler::MapRef > &maps, Representation representation, compiler::OptionalJSObjectRef holder, FieldIndex field_index)
static PolymorphicAccessInfo DataLoad(const ZoneVector< compiler::MapRef > &maps, Representation representation, compiler::OptionalJSObjectRef holder, FieldIndex field_index)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
ReduceInterruptBudgetForLoop(uint64_t bitfield, int amount)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
int MaxCallStackArgs() const
void SetValueLocationConstraints()
int MaxCallStackArgs() const
ReduceInterruptBudgetForReturn(uint64_t bitfield, int amount)
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
RestLength(uint64_t bitfield, int formal_parameter_count)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
int formal_parameter_count() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int formal_parameter_count_
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
Return(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
RootConstant(uint64_t bitfield, RootIndex index)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
bool ToBoolean(LocalIsolate *local_isolate) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
Handle< Object > DoReify(LocalIsolate *isolate) const
void DoLoadToRegister(MaglevAssembler *, OutputRegister)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
SetContinuationPreservedEmbedderData(uint64_t bitfield)
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
const compiler::FeedbackSource feedback_
static constexpr int kContextIndex
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
int MaxCallStackArgs() const
SetKeyedGeneric(uint64_t bitfield, const compiler::FeedbackSource &feedback)
static constexpr int kObjectIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
compiler::FeedbackSource feedback() const
static constexpr OpProperties kProperties
static constexpr int kKeyIndex
static constexpr int kValueIndex
static constexpr int kContextIndex
const compiler::FeedbackSource feedback_
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
const compiler::NameRef name_
void SetValueLocationConstraints()
static constexpr int kValueIndex
static constexpr int kObjectIndex
int MaxCallStackArgs() const
compiler::FeedbackSource feedback() const
SetNamedGeneric(uint64_t bitfield, compiler::NameRef name, const compiler::FeedbackSource &feedback)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
compiler::NameRef name() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
SetPendingMessage(uint64_t bitfield)
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
int MaxCallStackArgs() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
SetPrototypeHas(uint64_t bitfield)
void DoLoadToRegister(MaglevAssembler *, OutputRegister)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
bool ToBoolean(LocalIsolate *local_isolate) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
Tagged< Smi > value() const
void SetValueLocationConstraints()
const Tagged< Smi > value_
SmiConstant(uint64_t bitfield, Tagged< Smi > value)
DirectHandle< Object > DoReify(LocalIsolate *isolate) const
static constexpr int kObjectIndex
static constexpr OpProperties kProperties
StoreDoubleDataViewElement(uint64_t bitfield, ExternalArrayType type)
Input & is_little_endian_input()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kIsLittleEndianIndex
bool is_little_endian_constant()
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
static constexpr int kValueIndex
static constexpr int kIndexIndex
StoreDoubleField(uint64_t bitfield, int offset)
static constexpr int kValueIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
static constexpr int kObjectIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
StoreFixedArrayElementNoWriteBarrier(uint64_t bitfield)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kElementsIndex
static constexpr int kIndexIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
int MaxCallStackArgs() const
static constexpr int kValueIndex
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kValueIndex
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kElementsIndex
void SetValueLocationConstraints()
int MaxCallStackArgs() const
StoreFixedArrayElementWithWriteBarrier(uint64_t bitfield)
static constexpr int kIndexIndex
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kValueIndex
static constexpr int kIndexIndex
static constexpr OpProperties kProperties
static constexpr int kElementsIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
StoreFixedDoubleArrayElement(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
StoreFloat64(uint64_t bitfield, int offset)
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
static constexpr int kValueIndex
static constexpr int kObjectIndex
StoreGlobal(uint64_t bitfield, compiler::NameRef name, const compiler::FeedbackSource &feedback)
const compiler::NameRef name_
void GenerateCode(MaglevAssembler *, const ProcessingState &)
compiler::FeedbackSource feedback() const
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
int MaxCallStackArgs() const
compiler::NameRef name() const
const compiler::FeedbackSource feedback_
static constexpr int kValueIndex
static constexpr int kObjectIndex
StoreHeapInt32(uint64_t bitfield, int offset)
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
int MaxCallStackArgs() const
static constexpr int kObjectIndex
static constexpr OpProperties kProperties
static constexpr int kContextIndex
const compiler::FeedbackSource feedback_
static constexpr int kNameIndex
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
StoreInArrayLiteralGeneric(uint64_t bitfield, const compiler::FeedbackSource &feedback)
compiler::FeedbackSource feedback() const
static constexpr int kValueIndex
static constexpr OpProperties kProperties
static constexpr int kObjectIndex
static constexpr int kValueIndex
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
StoreInt32(uint64_t bitfield, int offset)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
const compiler::MapRef map_
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
NextBitField< Kind, 3 > KindField
StoreMap(uint64_t bitfield, compiler::MapRef map, Kind kind)
static constexpr int kObjectIndex
compiler::MapRef map() const
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
int MaxCallStackArgs() const
void ClearUnstableNodeAspects(KnownNodeAspects &)
void SetValueLocationConstraints()
static constexpr int kNewValueIndex
int MaxCallStackArgs() const
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
Input & new_value_input()
void SetValueLocationConstraints()
StoreScriptContextSlotWithWriteBarrier(uint64_t bitfield, int index)
static constexpr int kContextIndex
static constexpr Base::InputTypes kInputTypes
bool initializing_or_transitioning() const
static constexpr int kValueIndex
void VerifyInputs(MaglevGraphLabeller *graph_labeller) const
int MaxCallStackArgs() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
static constexpr int kObjectIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
StoreTaggedFieldNoWriteBarrier(uint64_t bitfield, int offset, StoreTaggedMode store_mode)
void SetValueLocationConstraints()
NextBitField< bool, 1 > InitializingOrTransitioningField
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
bool initializing_or_transitioning() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
NextBitField< bool, 1 > InitializingOrTransitioningField
static constexpr int kObjectIndex
void SetValueLocationConstraints()
static constexpr int kValueIndex
StoreTaggedFieldWithWriteBarrier(uint64_t bitfield, int offset, StoreTaggedMode store_mode)
int MaxCallStackArgs() const
NextBitField< bool, 1 > InitializingOrTransitioningField
static constexpr int kValueIndex
IndirectPointerTag tag() const
static constexpr Base::InputTypes kInputTypes
bool initializing_or_transitioning() const
const IndirectPointerTag tag_
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr int kObjectIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
StoreTrustedPointerFieldWithWriteBarrier(uint64_t bitfield, int offset, IndirectPointerTag tag, StoreTaggedMode store_mode)
int MaxCallStackArgs() const
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
static constexpr OpProperties kProperties
int MaxCallStackArgs() const
void SetValueLocationConstraints()
static constexpr int kStringIndex
static constexpr Base::InputTypes kInputTypes
StringAt(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr int kIndexIndex
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
StringConcat(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
int MaxCallStackArgs() const
int MaxCallStackArgs() const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
StringEqual(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
void SetValueLocationConstraints()
StringLength(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int MaxCallStackArgs() const
static constexpr Base::InputTypes kInputTypes
static constexpr int kObjectIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void set_fallthrough(BasicBlock *fallthrough)
bool has_fallthrough() const
Switch(uint64_t bitfield, int value_base, BasicBlockRef *targets, int size, BasicBlockRef *fallthrough)
Switch(uint64_t bitfield, int value_base, BasicBlockRef *targets, int size)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
BasicBlock * fallthrough() const
BasicBlockRef * targets() const
std::optional< BasicBlockRef > fallthrough_
TaggedEqual(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
bool ToBoolean(LocalIsolate *local_isolate) const
DirectHandle< Object > DoReify(LocalIsolate *isolate) const
void DoLoadToRegister(MaglevAssembler *, OutputRegister)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
TaggedIndexConstant(uint64_t bitfield, Tagged< TaggedIndex > value)
Tagged< TaggedIndex > value() const
void SetValueLocationConstraints()
const Tagged< TaggedIndex > value_
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
TaggedNotEqual(uint64_t bitfield)
TerminalControlNodeT(uint64_t bitfield)
TerminalControlNode(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
TestInstanceOf(uint64_t bitfield, compiler::FeedbackSource feedback)
static constexpr OpProperties kProperties
compiler::FeedbackSource feedback() const
const compiler::FeedbackSource feedback_
int MaxCallStackArgs() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
interpreter::TestTypeOfFlags::LiteralFlag literal_
void SetValueLocationConstraints()
TestTypeOf(uint64_t bitfield, interpreter::TestTypeOfFlags::LiteralFlag literal)
interpreter::TestTypeOfFlags::LiteralFlag literal() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
CheckType check_type() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
TestUndetectable(uint64_t bitfield, CheckType check_type)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
NextBitField< CheckType, 1 > CheckTypeBitField
int MaxCallStackArgs() const
ThrowIfNotCallable(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
int MaxCallStackArgs() const
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
ThrowIfNotSuperConstructor(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
compiler::NameRef name() const
int MaxCallStackArgs() const
static constexpr OpProperties kProperties
ThrowReferenceErrorIfHole(uint64_t bitfield, const compiler::NameRef name)
void SetValueLocationConstraints()
const compiler::NameRef name_
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
int MaxCallStackArgs() const
ThrowSuperAlreadyCalledIfNotHole(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int MaxCallStackArgs() const
static constexpr OpProperties kProperties
ThrowSuperNotCalledIfHole(uint64_t bitfield)
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
ToBooleanLogicalNot(uint64_t bitfield, CheckType check_type)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
CheckType check_type() const
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
NextBitField< CheckType, 1 > CheckTypeBitField
NextBitField< CheckType, 1 > CheckTypeBitField
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
CheckType check_type() const
ToBoolean(uint64_t bitfield, CheckType check_type)
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int MaxCallStackArgs() const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
ToName(uint64_t bitfield)
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
ToNumberOrNumeric(uint64_t bitfield, Object::Conversion mode)
Object::Conversion mode() const
static constexpr Base::InputTypes kInputTypes
void SetValueLocationConstraints()
int MaxCallStackArgs() const
const Object::Conversion mode_
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
CheckType check_type() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
NextBitField< CheckType, 1 > CheckTypeBitField
int MaxCallStackArgs() const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
ToObject(uint64_t bitfield, CheckType check_type)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
int MaxCallStackArgs() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
NextBitField< ConversionMode, 1 > ConversionModeBitField
ConversionMode mode() const
static constexpr OpProperties kProperties
ToString(uint64_t bitfield, ConversionMode mode)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
TransitionAndStoreArrayElement(uint64_t bitfield, const compiler::MapRef &fast_map, const compiler::MapRef &double_map)
const compiler::MapRef double_map_
static constexpr Base::InputTypes kInputTypes
static constexpr OpProperties kProperties
const compiler::MapRef fast_map_
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
compiler::MapRef fast_map() const
int MaxCallStackArgs() const
compiler::MapRef double_map() const
void SetValueLocationConstraints()
const ZoneVector< compiler::MapRef > & transition_sources() const
int MaxCallStackArgs() const
ZoneVector< compiler::MapRef > transition_sources_
const compiler::MapRef transition_target() const
TransitionElementsKindOrCheckMap(uint64_t bitfield, const ZoneVector< compiler::MapRef > &transition_sources, compiler::MapRef transition_target)
const compiler::MapRef transition_target_
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
const compiler::MapRef transition_target() const
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
int MaxCallStackArgs() const
const ZoneVector< compiler::MapRef > & transition_sources() const
TransitionElementsKind(uint64_t bitfield, const ZoneVector< compiler::MapRef > &transition_sources, compiler::MapRef transition_target)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
ZoneVector< compiler::MapRef > transition_sources_
const compiler::MapRef transition_target_
NextBitField< TaggedToFloat64ConversionType, 2 > TaggedToFloat64ConversionTypeOffset
void GenerateCode(MaglevAssembler *, const ProcessingState &)
TaggedToFloat64ConversionType conversion_type() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
TruncateNumberOrOddballToInt32(uint64_t bitfield, TaggedToFloat64ConversionType conversion_type)
static constexpr Base::InputTypes kInputTypes
IndirectPointerTag tag() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
bool ToBoolean(LocalIsolate *local_isolate) const
static constexpr OpProperties kProperties
void DoLoadToRegister(MaglevAssembler *, OutputRegister)
TrustedConstant(uint64_t bitfield, compiler::HeapObjectRef object, IndirectPointerTag tag)
DirectHandle< Object > DoReify(LocalIsolate *isolate) const
void GenerateCode(MaglevAssembler *, const ProcessingState &)
const IndirectPointerTag tag_
const compiler::HeapObjectRef object_
compiler::HeapObjectRef object() const
void SetValueLocationConstraints()
int MaxCallStackArgs() const
TryOnStackReplacement(uint64_t bitfield, int32_t loop_depth, FeedbackSlot feedback_slot, BytecodeOffset osr_offset, MaglevCompilationUnit *unit)
static constexpr OpProperties kProperties
MaglevCompilationUnit *const unit_
const BytecodeOffset osr_offset_
const int32_t loop_depth_
static constexpr Base::InputTypes kInputTypes
const MaglevCompilationUnit * unit() const
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
const FeedbackSlot feedback_slot_
void DoLoadToRegister(MaglevAssembler *, OutputRegister)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
Uint32Constant(uint64_t bitfield, uint32_t value)
void SetValueLocationConstraints()
bool ToBoolean(LocalIsolate *local_isolate) const
DirectHandle< Object > DoReify(LocalIsolate *isolate) const
static constexpr OpProperties kProperties
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
Uint32ToNumber(uint64_t bitfield)
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
int MaxCallStackArgs() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
Uint32ToUint8Clamped(uint64_t bitfield)
void SetValueLocationConstraints()
UnaryWithFeedbackNode(uint64_t bitfield, const compiler::FeedbackSource &feedback)
static constexpr int kOperandIndex
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
compiler::FeedbackSource feedback() const
static constexpr OpProperties kProperties
const compiler::FeedbackSource feedback_
void SetValueLocationConstraints()
UncheckedNumberOrOddballToFloat64(uint64_t bitfield, TaggedToFloat64ConversionType conversion_type)
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
NextBitField< TaggedToFloat64ConversionType, 2 > TaggedToFloat64ConversionTypeOffset
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
TaggedToFloat64ConversionType conversion_type() const
UnconditionalControlNodeT(uint64_t bitfield, BasicBlockRef *target_refs)
UnconditionalControlNodeT(uint64_t bitfield, BasicBlock *target)
void set_predecessor_id(int id)
int predecessor_id() const
BasicBlock * target() const
UnconditionalControlNode(uint64_t bitfield, BasicBlock *target)
UnconditionalControlNode(uint64_t bitfield, BasicBlockRef *target_refs)
void set_target(BasicBlock *block)
static constexpr OpProperties kProperties
UnsafeInt32ToUint32(uint64_t bitfield)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void SetValueLocationConstraints()
UnsafeSmiTagInt32(uint64_t bitfield)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
UnsafeSmiTagIntPtr(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
UnsafeSmiTagUint32(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
static constexpr OpProperties kProperties
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
void SetValueLocationConstraints()
void GenerateCode(MaglevAssembler *, const ProcessingState &)
UnsafeSmiUntag(uint64_t bitfield)
static constexpr Base::InputTypes kInputTypes
static constexpr Base::InputTypes kInputTypes
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr OpProperties kProperties
int MaxCallStackArgs() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
UnwrapStringWrapper(uint64_t bitfield)
void SetValueLocationConstraints()
int MaxCallStackArgs() const
void SetValueLocationConstraints()
static constexpr Base::InputTypes kInputTypes
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
UnwrapThinString(uint64_t bitfield)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
static constexpr Base::InputTypes kInputTypes
static constexpr int kObjectIndex
UpdateJSArrayLength(uint64_t bitfield)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
static constexpr OpProperties kProperties
void SetValueLocationConstraints()
static constexpr int kIndexIndex
static constexpr int kLengthIndex
compiler::InstructionOperand operand_
Register AssignedGeneralRegister() const
bool IsDoubleRegister() const
const compiler::InstructionOperand & operand() const
bool IsGeneralRegister() const
bool IsAnyRegister() const
void SetUnallocated(Args &&... args)
void InjectLocation(compiler::InstructionOperand location)
const compiler::InstructionOperand & operand()
void SetConstant(Args &&... args)
void SetAllocated(Args &&... args)
DoubleRegister AssignedDoubleRegister() const
compiler::InstructionOperand hint_
RegListBase< T > ClearRegisters()
bool unused_inputs_were_visited() const
void record_next_use(NodeIdT id, InputLocation *input_location)
compiler::InstructionOperand loadable_slot() const
constexpr ValueRepresentation value_representation() const
bool has_register() const
RegListBase< T > result_registers()
LiveRange live_range() const
void AddRegister(DoubleRegister reg)
int FirstRegisterCode() const
NodeIdT current_next_use() const
compiler::AllocatedOperand spill_slot() const
void LoadToRegister(MaglevAssembler *, DoubleRegister)
RegList registers_with_result_
const ValueLocation & result() const
constexpr bool is_tagged() const
ValueNode(uint64_t bitfield)
bool has_valid_live_range() const
void advance_next_use(NodeIdT use)
void AddRegister(Register reg)
void Spill(compiler::AllocatedOperand operand)
DirectHandle< Object > Reify(LocalIsolate *isolate) const
bool has_no_more_uses() const
void LoadToRegister(MaglevAssembler *, Register)
void InitializeRegisterData()
int num_registers() const
compiler::InstructionOperand spill_
constexpr bool decompresses_tagged_result() const
NodeIdT * last_uses_next_use_id_
void RemoveRegister(Register reg)
void DoLoadToRegister(MaglevAssembler *, Register)
compiler::InstructionOperand allocation() const
void mark_unused_inputs_visited()
RegisterT GetRegisterHint()
void SetConstantLocation()
void SetHint(compiler::InstructionOperand hint)
constexpr bool use_double_register() const
constexpr MachineRepresentation GetMachineRepresentation() const
bool is_in_register(DoubleRegister reg) const
void DoLoadToRegister(MaglevAssembler *, DoubleRegister)
const compiler::InstructionOperand & hint() const
DoubleRegList double_registers_with_result_
bool is_in_register(Register reg) const
void RemoveRegister(DoubleRegister reg)
bool operator==(const Iterator &other) const
VirtualObject * operator->()
VirtualObject *& operator*()
Iterator(VirtualObject *entry)
bool operator!=(const Iterator &other) const
void Add(VirtualObject *object)
void Print(std::ostream &os, const char *prefix, MaglevGraphLabeller *labeller) const
static VirtualObject * WalkUntilCommon(const VirtualObjectList &list1, const VirtualObjectList &list2, Function &&f)
VirtualObject * FindAllocatedWith(const InlinedAllocation *allocation) const
bool operator==(const VirtualObjectList &other) const
friend std::ostream & operator<<(std::ostream &out, Type type)
void ForEachNestedRuntimeInput(VirtualObjectList virtual_objects, Function &&f)
constexpr bool has_static_map() const
void set(uint32_t offset, ValueNode *value)
std::optional< VirtualObject * > Merge(const VirtualObject *other, uint32_t new_object_id, Zone *zone, Function MergeValue) const
void ForEachInput(Function &&callback)
compiler::FixedDoubleArrayRef double_elements() const
ValueNode * get(uint32_t offset) const
VirtualObject * Clone(uint32_t new_object_id, Zone *zone, bool empty_clone=false) const
VirtualObject(uint64_t bitfield, compiler::MapRef map, int id, uint32_t length, compiler::FixedDoubleArrayRef elements)
void GenerateCode(MaglevAssembler *, const ProcessingState &)
void ClearSlots(int last_init_slot, ValueNode *clear_value)
void SetValueLocationConstraints()
VirtualObject(uint64_t bitfield, compiler::MapRef map, int id, Float64 number)
void set_allocation(InlinedAllocation *allocation)
void ForEachInput(Function &&callback) const
uint32_t double_elements_length() const
VirtualObject(uint64_t bitfield, compiler::MapRef map, int id, uint32_t slot_count, ValueNode **slots)
uint32_t slot_count() const
const VirtualConsString & cons_string() const
compiler::OptionalMapRef map_
DoubleArray double_array_
compiler::MapRef map() const
void PrintParams(std::ostream &, MaglevGraphLabeller *) const
VirtualConsString cons_string_
VirtualObject(uint64_t bitfield, int id, const VirtualConsString &cons_string)
void set_by_index(uint32_t i, ValueNode *value)
bool compatible_for_merge(const VirtualObject *other) const
ValueNode * get_by_index(uint32_t i) const
ValueNode * string_length() const
InlinedAllocation * allocation() const
InlinedAllocation * allocation_
constexpr ArrayWrapper(Args &&... args)
enum v8::internal::@1270::DeoptimizableCodeIterator::@67 state_
base::Vector< const DirectHandle< Object > > args
ZoneVector< RpoNumber > & result
FunctionLiteral * literal
#define DEF_OPCODE_OF(Name)
#define CONDITIONAL_CONTROL_NODE_LIST(V)
#define DEOPTIMIZE_REASON_FIELD
#define DEF_INT32_UNARY_WITH_OVERFLOW_NODE(Name)
#define NODE_TYPE_LIST(V)
#define STORE_TYPED_ARRAY(name, properties, type,...)
#define DEF_BINARY_WITH_FEEDBACK_NODE(Name)
#define LEAF_NODE_TYPE_LIST(V)
#define LOAD_TYPED_ARRAY(name, properties,...)
#define ADD_STATIC_ASSERT(Name, Value)
#define GAP_MOVE_NODE_LIST(V)
#define DEF_UNARY_WITH_FEEDBACK_NODE(Name)
#define BRANCH_CONTROL_NODE_LIST(V)
#define VALUE_NODE_LIST(V)
#define CONTROL_NODE_LIST(V)
#define UNCONDITIONAL_CONTROL_NODE_LIST(V)
#define DEF_FLOAT64_BINARY_NODE_WITH_CALL(Name)
#define IEEE_754_UNARY_LIST(V)
#define DEF_OPCODES(type)
#define DEFINE_NODE_TYPE_CHECK(Type, _)
#define DEF_FLOAT64_BINARY_NODE(Name)
#define DEF_INT32_BINARY_WITH_OVERFLOW_NODE(Name)
#define TERMINAL_CONTROL_NODE_LIST(V)
#define ASSERT_CONDITION(V)
#define DEFINE_TRUNCATE_NODE(name, from_repr, properties)
#define DEF_INT32_BINARY_NODE(Name)
#define CONSTANT_VALUE_NODE_LIST(V)
V8_BASE_EXPORT constexpr uint32_t RoundUpToPowerOfTwo32(uint32_t value)
V8_INLINE size_t hash_value(unsigned int v)
V8_INLINE size_t hash_combine(size_t seed, size_t hash)
auto make_iterator_range(ForwardIterator begin, ForwardIterator end)
constexpr T * ObjectPtrBeforeAddress(void *address)
constexpr bool CanBeStoreToNonEscapedObject()
UINT32_ELEMENTS INT32_ELEMENTS
static constexpr NodeIdT kInvalidNodeId
constexpr NodeType CombineType(NodeType left, NodeType right)
constexpr bool IsControlNode(Opcode opcode)
static constexpr Opcode kLastNodeOpcode
constexpr Condition ConditionForNaN()
static constexpr Opcode kLastOpcode
NodeType StaticTypeForConstant(compiler::JSHeapBroker *broker, compiler::ObjectRef ref)
static constexpr Opcode kLastGapMoveNodeOpcode
static constexpr Opcode kFirstUnconditionalControlNodeOpcode
bool HasOnlyStringMaps(base::Vector< const compiler::MapRef > maps)
base::EnumSet< UseRepresentation, int8_t > UseRepresentationSet
static constexpr int kOpcodeCount
base::EnumSet< ValueRepresentation, int8_t > ValueRepresentationSet
static constexpr Opcode kLastControlNodeOpcode
bool IsInstanceOfLeafNodeType(compiler::MapRef map, NodeType type, compiler::JSHeapBroker *broker)
constexpr Condition ConditionFor(Operation operation)
static constexpr Opcode kFirstNodeOpcode
constexpr NodeType EmptyNodeType()
constexpr bool IsTerminalControlNode(Opcode opcode)
UINT32_ELEMENTS INT8_ELEMENTS
bool HasOnlyNumberMaps(base::Vector< const compiler::MapRef > maps)
constexpr bool NodeTypeIs(NodeType type, NodeType to_check)
constexpr bool IsZeroCostNode(Opcode opcode)
constexpr bool IsEmptyNodeType(NodeType type)
static constexpr Opcode kLastConstantNodeOpcode
bool HasOnlyJSTypedArrayMaps(base::Vector< const compiler::MapRef > maps)
std::ostream & operator<<(std::ostream &os, const PrintNode &printer)
static constexpr Opcode kFirstGapMoveNodeOpcode
constexpr OpProperties StaticPropertiesForOpcode(Opcode opcode)
static constexpr Opcode kLastTerminalControlNodeOpcode
constexpr NodeType IntersectType(NodeType left, NodeType right)
const char * OpcodeToString(Opcode opcode)
bool IsInitializingOrTransitioning(StoreTaggedMode mode)
constexpr bool IsConstantNode(Opcode opcode)
static constexpr Opcode kLastConditionalControlNodeOpcode
static constexpr NodeIdT kFirstValidNodeId
UINT32_ELEMENTS INT16_ELEMENTS
void CheckValueInputIs(const NodeBase *node, int i, ValueRepresentation expected, MaglevGraphLabeller *graph_labeller)
constexpr bool IsZeroExtendedRepresentation(ValueRepresentation repr)
constexpr bool IsValueNode(Opcode opcode)
NodeType StaticTypeForNode(compiler::JSHeapBroker *broker, LocalIsolate *isolate, ValueNode *node)
static constexpr int kNumAssertConditions
static constexpr Opcode kLastBranchControlNodeOpcode
static constexpr Opcode kLastValueNodeOpcode
constexpr bool IsCommutativeNode(Opcode opcode)
static constexpr Opcode kFirstValueNodeOpcode
bool IsInstanceOfNodeType(compiler::MapRef map, NodeType type, compiler::JSHeapBroker *broker)
bool FromConstantToBool(LocalIsolate *local_isolate, ValueNode *node)
static constexpr Opcode kFirstControlNodeOpcode
constexpr bool IsConditionalControlNode(Opcode opcode)
DEFINE_NODE_TYPE(Name, Value)
constexpr bool IsDoubleRepresentation(ValueRepresentation repr)
constexpr bool IsSimpleFieldStore(Opcode opcode)
NodeType StaticTypeForMap(compiler::MapRef map, compiler::JSHeapBroker *broker)
constexpr bool IsTypedArrayStore(Opcode opcode)
TaggedToFloat64ConversionType
static constexpr Opcode kFirstConstantNodeOpcode
bool HasNumberMap(base::Vector< const compiler::MapRef > maps)
static constexpr Opcode kFirstOpcode
bool NodeTypeMayBeNullOrUndefined(NodeType type)
static constexpr Opcode kLastUnconditionalControlNodeOpcode
constexpr bool IsBranchControlNode(Opcode opcode)
bool HasOnlyJSArrayMaps(base::Vector< const compiler::MapRef > maps)
static constexpr Opcode kFirstTerminalControlNodeOpcode
static constexpr Opcode kFirstBranchControlNodeOpcode
constexpr bool IsUnconditionalControlNode(Opcode opcode)
constexpr bool IsGapMoveNode(Opcode opcode)
bool HasOnlyJSObjectMaps(base::Vector< const compiler::MapRef > maps)
static constexpr Opcode kFirstConditionalControlNodeOpcode
constexpr bool IsElementsArrayWrite(Opcode opcode)
RegListBase< DoubleRegister > DoubleRegList
constexpr int kTaggedSize
DwVfpRegister DoubleRegister
RegListBase< Register > RegList
static constexpr DoubleRegList kEmptyDoubleRegList
other heap size generate builtins concurrently on separate threads in mksnapshot track concurrent recompilation artificial compilation delay in ms max number of threads that concurrent Turbofan can use(0 for unbounded)") DEFINE_BOOL( stress_concurrent_inlining
static constexpr RegList kEmptyRegList
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 * MB
constexpr bool PointerCompressionIsEnabled()
#define UNARY_OPERATION_LIST(V)
#define ARITHMETIC_OPERATION_LIST(V)
#define COMPARISON_OPERATION_LIST(V)
#define DCHECK_LE(v1, v2)
#define DCHECK_NOT_NULL(val)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK_NE(v1, v2)
#define DCHECK_GE(v1, v2)
#define CHECK_EQ(lhs, rhs)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_EQ(v1, v2)
#define DCHECK_GT(v1, v2)
constexpr T RoundUp(T x, intptr_t m)
constexpr bool IsAligned(T value, U alignment)
const base::Vector< ValueNode * > parameters
compiler::OptionalJSFunctionRef maybe_js_target
const MaglevCompilationUnit & unit
const SourcePosition source_position
const base::Vector< ValueNode * > arguments
const BytecodeOffset bytecode_position
const MaglevCompilationUnit & unit
const BytecodeOffset bytecode_position
const MaglevCompilationUnit & unit
const CompactInterpreterFrameState * frame_state
const SourcePosition source_position
DoubleRegList double_temporaries_
BasicBlock * owner() const
RegListBase< RegisterT > & temporaries()
BasicBlock * operator=(BasicBlock *owner)
RegList live_tagged_registers
DoubleRegList live_double_registers
compiler::FixedDoubleArrayRef values
std::array< ValueNode *, 2 > data
ValueNode * second() const
ValueNode * first() const