summaryrefslogtreecommitdiff
path: root/deps/v8/src/maglev/maglev-regalloc.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/maglev/maglev-regalloc.h')
-rw-r--r--deps/v8/src/maglev/maglev-regalloc.h30
1 files changed, 22 insertions, 8 deletions
diff --git a/deps/v8/src/maglev/maglev-regalloc.h b/deps/v8/src/maglev/maglev-regalloc.h
index 120f5cfa6d..e02b914424 100644
--- a/deps/v8/src/maglev/maglev-regalloc.h
+++ b/deps/v8/src/maglev/maglev-regalloc.h
@@ -124,8 +124,13 @@ class RegisterFrameState {
bool is_blocked(RegisterT reg) { return blocked_.has(reg); }
void clear_blocked() { blocked_ = kEmptyRegList; }
- compiler::AllocatedOperand ChooseInputRegister(ValueNode* node);
- compiler::AllocatedOperand AllocateRegister(ValueNode* node);
+ compiler::InstructionOperand TryChooseInputRegister(
+ ValueNode* node, const compiler::InstructionOperand& hint =
+ compiler::InstructionOperand());
+ compiler::InstructionOperand TryChooseUnblockedInputRegister(ValueNode* node);
+ compiler::AllocatedOperand AllocateRegister(
+ ValueNode* node, const compiler::InstructionOperand& hint =
+ compiler::InstructionOperand());
private:
ValueNode* values_[RegisterT::kNumRegisters];
@@ -165,8 +170,6 @@ class StraightForwardRegisterAllocator {
void UpdateUse(Input* input) { return UpdateUse(input->node(), input); }
void UpdateUse(ValueNode* node, InputLocation* input_location);
- void UpdateUse(const EagerDeoptInfo& deopt_info);
- void UpdateUse(const LazyDeoptInfo& deopt_info);
void MarkAsClobbered(ValueNode* node,
const compiler::AllocatedOperand& location);
@@ -174,8 +177,10 @@ class StraightForwardRegisterAllocator {
void AllocateControlNode(ControlNode* node, BasicBlock* block);
void AllocateNode(Node* node);
void AllocateNodeResult(ValueNode* node);
+ void AllocateEagerDeopt(const EagerDeoptInfo& deopt_info);
+ void AllocateLazyDeopt(const LazyDeoptInfo& deopt_info);
void AssignFixedInput(Input& input);
- void AssignArbitraryRegisterInput(Input& input);
+ void AssignArbitraryRegisterInput(NodeBase* result_node, Input& input);
void AssignAnyInput(Input& input);
void AssignInputs(NodeBase* node);
template <typename RegisterT>
@@ -186,6 +191,8 @@ class StraightForwardRegisterAllocator {
void AssignArbitraryTemporaries(RegisterFrameState<RegisterT>& registers,
NodeBase* node);
void AssignArbitraryTemporaries(NodeBase* node);
+ template <typename RegisterT>
+ void SetLoopPhiRegisterHint(Phi* phi, RegisterT reg);
void TryAllocateToInput(Phi* phi);
void VerifyInputs(NodeBase* node);
@@ -207,7 +214,8 @@ class StraightForwardRegisterAllocator {
void FreeRegistersUsedBy(ValueNode* node);
template <typename RegisterT>
- RegisterT FreeUnblockedRegister();
+ RegisterT FreeUnblockedRegister(
+ RegListBase<RegisterT> reserved = RegListBase<RegisterT>());
template <typename RegisterT>
RegisterT PickRegisterToFree(RegListBase<RegisterT> reserved);
@@ -222,8 +230,10 @@ class StraightForwardRegisterAllocator {
template <typename RegisterT>
void DropRegisterValueAtEnd(RegisterT reg);
+ bool IsCurrentNodeLastUseOf(ValueNode* node);
template <typename RegisterT>
- void EnsureFreeRegisterAtEnd();
+ void EnsureFreeRegisterAtEnd(const compiler::InstructionOperand& hint =
+ compiler::InstructionOperand());
compiler::AllocatedOperand AllocateRegisterAtEnd(ValueNode* node);
template <typename RegisterT>
@@ -232,7 +242,9 @@ class StraightForwardRegisterAllocator {
void DropRegisterValue(Register reg);
void DropRegisterValue(DoubleRegister reg);
- compiler::AllocatedOperand AllocateRegister(ValueNode* node);
+ compiler::AllocatedOperand AllocateRegister(
+ ValueNode* node, const compiler::InstructionOperand& hint =
+ compiler::InstructionOperand());
template <typename RegisterT>
compiler::AllocatedOperand ForceAllocate(
@@ -249,6 +261,8 @@ class StraightForwardRegisterAllocator {
void InitializeRegisterValues(MergePointRegisterState& target_state);
#ifdef DEBUG
bool IsInRegister(MergePointRegisterState& target_state, ValueNode* incoming);
+ bool IsForwardReachable(BasicBlock* start_block, NodeIdT first_id,
+ NodeIdT last_id);
#endif
void InitializeBranchTargetRegisterValues(ControlNode* source,