diff options
Diffstat (limited to 'deps/v8/src/compiler/backend/instruction.h')
-rw-r--r-- | deps/v8/src/compiler/backend/instruction.h | 62 |
1 files changed, 39 insertions, 23 deletions
diff --git a/deps/v8/src/compiler/backend/instruction.h b/deps/v8/src/compiler/backend/instruction.h index 9b32204055..f5f7f64c51 100644 --- a/deps/v8/src/compiler/backend/instruction.h +++ b/deps/v8/src/compiler/backend/instruction.h @@ -17,6 +17,7 @@ #include "src/common/globals.h" #include "src/compiler/backend/instruction-codes.h" #include "src/compiler/common-operator.h" +#include "src/compiler/feedback-source.h" #include "src/compiler/frame.h" #include "src/compiler/opcodes.h" #include "src/numbers/double.h" @@ -130,7 +131,7 @@ class V8_EXPORT_PRIVATE InstructionOperand { inline uint64_t GetCanonicalizedValue() const; - class KindField : public BitField64<Kind, 0, 3> {}; + using KindField = BitField64<Kind, 0, 3>; uint64_t value_; }; @@ -331,20 +332,20 @@ class UnallocatedOperand final : public InstructionOperand { STATIC_ASSERT(KindField::kSize == 3); - class VirtualRegisterField : public BitField64<uint32_t, 3, 32> {}; + using VirtualRegisterField = BitField64<uint32_t, 3, 32>; // BitFields for all unallocated operands. - class BasicPolicyField : public BitField64<BasicPolicy, 35, 1> {}; + using BasicPolicyField = BitField64<BasicPolicy, 35, 1>; // BitFields specific to BasicPolicy::FIXED_SLOT. - class FixedSlotIndexField : public BitField64<int, 36, 28> {}; + using FixedSlotIndexField = BitField64<int, 36, 28>; // BitFields specific to BasicPolicy::EXTENDED_POLICY. - class ExtendedPolicyField : public BitField64<ExtendedPolicy, 36, 3> {}; - class LifetimeField : public BitField64<Lifetime, 39, 1> {}; - class HasSecondaryStorageField : public BitField64<bool, 40, 1> {}; - class FixedRegisterField : public BitField64<int, 41, 6> {}; - class SecondaryStorageField : public BitField64<int, 47, 3> {}; + using ExtendedPolicyField = BitField64<ExtendedPolicy, 36, 3>; + using LifetimeField = BitField64<Lifetime, 39, 1>; + using HasSecondaryStorageField = BitField64<bool, 40, 1>; + using FixedRegisterField = BitField64<int, 41, 6>; + using SecondaryStorageField = BitField64<int, 47, 3>; private: explicit UnallocatedOperand(int virtual_register) @@ -373,7 +374,7 @@ class ConstantOperand : public InstructionOperand { INSTRUCTION_OPERAND_CASTS(ConstantOperand, CONSTANT) STATIC_ASSERT(KindField::kSize == 3); - class VirtualRegisterField : public BitField64<uint32_t, 3, 32> {}; + using VirtualRegisterField = BitField64<uint32_t, 3, 32>; }; class ImmediateOperand : public InstructionOperand { @@ -406,8 +407,8 @@ class ImmediateOperand : public InstructionOperand { INSTRUCTION_OPERAND_CASTS(ImmediateOperand, IMMEDIATE) STATIC_ASSERT(KindField::kSize == 3); - class TypeField : public BitField64<ImmediateType, 3, 1> {}; - class ValueField : public BitField64<int32_t, 32, 32> {}; + using TypeField = BitField64<ImmediateType, 3, 1>; + using ValueField = BitField64<int32_t, 32, 32>; }; class LocationOperand : public InstructionOperand { @@ -509,9 +510,9 @@ class LocationOperand : public InstructionOperand { } STATIC_ASSERT(KindField::kSize == 3); - class LocationKindField : public BitField64<LocationKind, 3, 2> {}; - class RepresentationField : public BitField64<MachineRepresentation, 5, 8> {}; - class IndexField : public BitField64<int32_t, 35, 29> {}; + using LocationKindField = BitField64<LocationKind, 3, 2>; + using RepresentationField = BitField64<MachineRepresentation, 5, 8>; + using IndexField = BitField64<int32_t, 35, 29>; }; class V8_EXPORT_PRIVATE ExplicitOperand @@ -1270,6 +1271,20 @@ class FrameStateDescriptor : public ZoneObject { type_ == FrameStateType::kConstructStub; } + // The frame height on the stack, in number of slots, as serialized into a + // Translation and later used by the deoptimizer. Does *not* include + // information from the chain of outer states. Unlike |GetSize| this does not + // always include parameters, locals, and stack slots; instead, the returned + // slot kinds depend on the frame type. + size_t GetHeight() const; + + // Returns an overapproximation of the unoptimized stack frame size in bytes, + // as later produced by the deoptimizer. Considers both this and the chain of + // outer states. + size_t total_conservative_frame_size_in_bytes() const { + return total_conservative_frame_size_in_bytes_; + } + size_t GetSize() const; size_t GetTotalSize() const; size_t GetFrameCount() const; @@ -1283,12 +1298,13 @@ class FrameStateDescriptor : public ZoneObject { FrameStateType type_; BailoutId bailout_id_; OutputFrameStateCombine frame_state_combine_; - size_t parameters_count_; - size_t locals_count_; - size_t stack_count_; + const size_t parameters_count_; + const size_t locals_count_; + const size_t stack_count_; + const size_t total_conservative_frame_size_in_bytes_; StateValueList values_; MaybeHandle<SharedFunctionInfo> const shared_info_; - FrameStateDescriptor* outer_state_; + FrameStateDescriptor* const outer_state_; }; // A deoptimization entry is a pair of the reason why we deoptimize and the @@ -1297,7 +1313,7 @@ class DeoptimizationEntry final { public: DeoptimizationEntry() = default; DeoptimizationEntry(FrameStateDescriptor* descriptor, DeoptimizeKind kind, - DeoptimizeReason reason, VectorSlotPair const& feedback) + DeoptimizeReason reason, FeedbackSource const& feedback) : descriptor_(descriptor), kind_(kind), reason_(reason), @@ -1306,13 +1322,13 @@ class DeoptimizationEntry final { FrameStateDescriptor* descriptor() const { return descriptor_; } DeoptimizeKind kind() const { return kind_; } DeoptimizeReason reason() const { return reason_; } - VectorSlotPair const& feedback() const { return feedback_; } + FeedbackSource const& feedback() const { return feedback_; } private: FrameStateDescriptor* descriptor_ = nullptr; DeoptimizeKind kind_ = DeoptimizeKind::kEager; DeoptimizeReason reason_ = DeoptimizeReason::kUnknown; - VectorSlotPair feedback_ = VectorSlotPair(); + FeedbackSource feedback_ = FeedbackSource(); }; using DeoptimizationVector = ZoneVector<DeoptimizationEntry>; @@ -1577,7 +1593,7 @@ class V8_EXPORT_PRIVATE InstructionSequence final int AddDeoptimizationEntry(FrameStateDescriptor* descriptor, DeoptimizeKind kind, DeoptimizeReason reason, - VectorSlotPair const& feedback); + FeedbackSource const& feedback); DeoptimizationEntry const& GetDeoptimizationEntry(int deoptimization_id); int GetDeoptimizationEntryCount() const { return static_cast<int>(deoptimization_entries_.size()); |