summaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/backend/instruction.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/compiler/backend/instruction.h')
-rw-r--r--deps/v8/src/compiler/backend/instruction.h62
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());