Commit c35559ff authored by haitao.feng@intel.com's avatar haitao.feng@intel.com

Refactor register allocator a little bit

R=jkummerow@chromium.org

Review URL: https://codereview.chromium.org/24438006

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16998 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 15d56ffe
...@@ -412,18 +412,19 @@ void LTransitionElementsKind::PrintDataTo(StringStream* stream) { ...@@ -412,18 +412,19 @@ void LTransitionElementsKind::PrintDataTo(StringStream* stream) {
} }
int LPlatformChunk::GetNextSpillIndex(bool is_double) { int LPlatformChunk::GetNextSpillIndex(RegisterKind kind) {
// Skip a slot if for a double-width slot. // Skip a slot if for a double-width slot.
if (is_double) spill_slot_count_++; if (kind == DOUBLE_REGISTERS) spill_slot_count_++;
return spill_slot_count_++; return spill_slot_count_++;
} }
LOperand* LPlatformChunk::GetNextSpillSlot(bool is_double) { LOperand* LPlatformChunk::GetNextSpillSlot(RegisterKind kind) {
int index = GetNextSpillIndex(is_double); int index = GetNextSpillIndex(kind);
if (is_double) { if (kind == DOUBLE_REGISTERS) {
return LDoubleStackSlot::Create(index, zone()); return LDoubleStackSlot::Create(index, zone());
} else { } else {
ASSERT(kind == GENERAL_REGISTERS);
return LStackSlot::Create(index, zone()); return LStackSlot::Create(index, zone());
} }
} }
...@@ -439,7 +440,7 @@ LPlatformChunk* LChunkBuilder::Build() { ...@@ -439,7 +440,7 @@ LPlatformChunk* LChunkBuilder::Build() {
// which will be subsumed into this frame. // which will be subsumed into this frame.
if (graph()->has_osr()) { if (graph()->has_osr()) {
for (int i = graph()->osr()->UnoptimizedFrameSlots(); i > 0; i--) { for (int i = graph()->osr()->UnoptimizedFrameSlots(); i > 0; i--) {
chunk_->GetNextSpillIndex(false); chunk_->GetNextSpillIndex(GENERAL_REGISTERS);
} }
} }
......
...@@ -2728,8 +2728,8 @@ class LPlatformChunk V8_FINAL : public LChunk { ...@@ -2728,8 +2728,8 @@ class LPlatformChunk V8_FINAL : public LChunk {
LPlatformChunk(CompilationInfo* info, HGraph* graph) LPlatformChunk(CompilationInfo* info, HGraph* graph)
: LChunk(info, graph) { } : LChunk(info, graph) { }
int GetNextSpillIndex(bool is_double); int GetNextSpillIndex(RegisterKind kind);
LOperand* GetNextSpillSlot(bool is_double); LOperand* GetNextSpillSlot(RegisterKind kind);
}; };
......
...@@ -386,9 +386,9 @@ void LAccessArgumentsAt::PrintDataTo(StringStream* stream) { ...@@ -386,9 +386,9 @@ void LAccessArgumentsAt::PrintDataTo(StringStream* stream) {
} }
int LPlatformChunk::GetNextSpillIndex(bool is_double) { int LPlatformChunk::GetNextSpillIndex(RegisterKind kind) {
// Skip a slot if for a double-width slot. // Skip a slot if for a double-width slot.
if (is_double) { if (kind == DOUBLE_REGISTERS) {
spill_slot_count_++; spill_slot_count_++;
spill_slot_count_ |= 1; spill_slot_count_ |= 1;
num_double_slots_++; num_double_slots_++;
...@@ -397,11 +397,12 @@ int LPlatformChunk::GetNextSpillIndex(bool is_double) { ...@@ -397,11 +397,12 @@ int LPlatformChunk::GetNextSpillIndex(bool is_double) {
} }
LOperand* LPlatformChunk::GetNextSpillSlot(bool is_double) { LOperand* LPlatformChunk::GetNextSpillSlot(RegisterKind kind) {
int index = GetNextSpillIndex(is_double); int index = GetNextSpillIndex(kind);
if (is_double) { if (kind == DOUBLE_REGISTERS) {
return LDoubleStackSlot::Create(index, zone()); return LDoubleStackSlot::Create(index, zone());
} else { } else {
ASSERT(kind == GENERAL_REGISTERS);
return LStackSlot::Create(index, zone()); return LStackSlot::Create(index, zone());
} }
} }
...@@ -479,7 +480,7 @@ LPlatformChunk* LChunkBuilder::Build() { ...@@ -479,7 +480,7 @@ LPlatformChunk* LChunkBuilder::Build() {
// Reserve the first spill slot for the state of dynamic alignment. // Reserve the first spill slot for the state of dynamic alignment.
if (info()->IsOptimizing()) { if (info()->IsOptimizing()) {
int alignment_state_index = chunk_->GetNextSpillIndex(false); int alignment_state_index = chunk_->GetNextSpillIndex(GENERAL_REGISTERS);
ASSERT_EQ(alignment_state_index, 0); ASSERT_EQ(alignment_state_index, 0);
USE(alignment_state_index); USE(alignment_state_index);
} }
...@@ -488,7 +489,7 @@ LPlatformChunk* LChunkBuilder::Build() { ...@@ -488,7 +489,7 @@ LPlatformChunk* LChunkBuilder::Build() {
// which will be subsumed into this frame. // which will be subsumed into this frame.
if (graph()->has_osr()) { if (graph()->has_osr()) {
for (int i = graph()->osr()->UnoptimizedFrameSlots(); i > 0; i--) { for (int i = graph()->osr()->UnoptimizedFrameSlots(); i > 0; i--) {
chunk_->GetNextSpillIndex(false); chunk_->GetNextSpillIndex(GENERAL_REGISTERS);
} }
} }
......
...@@ -2736,8 +2736,8 @@ class LPlatformChunk V8_FINAL : public LChunk { ...@@ -2736,8 +2736,8 @@ class LPlatformChunk V8_FINAL : public LChunk {
: LChunk(info, graph), : LChunk(info, graph),
num_double_slots_(0) { } num_double_slots_(0) { }
int GetNextSpillIndex(bool is_double); int GetNextSpillIndex(RegisterKind kind);
LOperand* GetNextSpillSlot(bool is_double); LOperand* GetNextSpillSlot(RegisterKind kind);
int num_double_slots() const { return num_double_slots_; } int num_double_slots() const { return num_double_slots_; }
......
...@@ -145,16 +145,14 @@ void UseIterator::Advance() { ...@@ -145,16 +145,14 @@ void UseIterator::Advance() {
} }
void LAllocator::SetLiveRangeAssignedRegister( void LAllocator::SetLiveRangeAssignedRegister(LiveRange* range, int reg) {
LiveRange* range, if (range->Kind() == DOUBLE_REGISTERS) {
int reg,
RegisterKind register_kind) {
if (register_kind == DOUBLE_REGISTERS) {
assigned_double_registers_->Add(reg); assigned_double_registers_->Add(reg);
} else { } else {
ASSERT(range->Kind() == GENERAL_REGISTERS);
assigned_registers_->Add(reg); assigned_registers_->Add(reg);
} }
range->set_assigned_register(reg, register_kind, chunk()->zone()); range->set_assigned_register(reg, chunk()->zone());
} }
......
...@@ -131,7 +131,7 @@ bool LiveRange::HasOverlap(UseInterval* target) const { ...@@ -131,7 +131,7 @@ bool LiveRange::HasOverlap(UseInterval* target) const {
LiveRange::LiveRange(int id, Zone* zone) LiveRange::LiveRange(int id, Zone* zone)
: id_(id), : id_(id),
spilled_(false), spilled_(false),
is_double_(false), kind_(UNALLOCATED_REGISTERS),
assigned_register_(kInvalidAssignment), assigned_register_(kInvalidAssignment),
last_interval_(NULL), last_interval_(NULL),
first_interval_(NULL), first_interval_(NULL),
...@@ -145,12 +145,9 @@ LiveRange::LiveRange(int id, Zone* zone) ...@@ -145,12 +145,9 @@ LiveRange::LiveRange(int id, Zone* zone)
spill_start_index_(kMaxInt) { } spill_start_index_(kMaxInt) { }
void LiveRange::set_assigned_register(int reg, void LiveRange::set_assigned_register(int reg, Zone* zone) {
RegisterKind register_kind,
Zone* zone) {
ASSERT(!HasRegisterAssigned() && !IsSpilled()); ASSERT(!HasRegisterAssigned() && !IsSpilled());
assigned_register_ = reg; assigned_register_ = reg;
is_double_ = (register_kind == DOUBLE_REGISTERS);
ConvertOperands(zone); ConvertOperands(zone);
} }
...@@ -234,10 +231,15 @@ LOperand* LiveRange::CreateAssignedOperand(Zone* zone) { ...@@ -234,10 +231,15 @@ LOperand* LiveRange::CreateAssignedOperand(Zone* zone) {
LOperand* op = NULL; LOperand* op = NULL;
if (HasRegisterAssigned()) { if (HasRegisterAssigned()) {
ASSERT(!IsSpilled()); ASSERT(!IsSpilled());
if (IsDouble()) { switch (Kind()) {
op = LDoubleRegister::Create(assigned_register(), zone); case GENERAL_REGISTERS:
} else { op = LRegister::Create(assigned_register(), zone);
op = LRegister::Create(assigned_register(), zone); break;
case DOUBLE_REGISTERS:
op = LDoubleRegister::Create(assigned_register(), zone);
break;
default:
UNREACHABLE();
} }
} else if (IsSpilled()) { } else if (IsSpilled()) {
ASSERT(!HasRegisterAssigned()); ASSERT(!HasRegisterAssigned());
...@@ -352,6 +354,7 @@ void LiveRange::SplitAt(LifetimePosition position, ...@@ -352,6 +354,7 @@ void LiveRange::SplitAt(LifetimePosition position,
// Link the new live range in the chain before any of the other // Link the new live range in the chain before any of the other
// ranges linked from the range before the split. // ranges linked from the range before the split.
result->parent_ = (parent_ == NULL) ? this : parent_; result->parent_ = (parent_ == NULL) ? this : parent_;
result->kind_ = result->parent_->kind_;
result->next_ = next_; result->next_ = next_;
next_ = result; next_ = result;
...@@ -553,7 +556,7 @@ LAllocator::LAllocator(int num_values, HGraph* graph) ...@@ -553,7 +556,7 @@ LAllocator::LAllocator(int num_values, HGraph* graph)
reusable_slots_(8, zone()), reusable_slots_(8, zone()),
next_virtual_register_(num_values), next_virtual_register_(num_values),
first_artificial_register_(num_values), first_artificial_register_(num_values),
mode_(GENERAL_REGISTERS), mode_(UNALLOCATED_REGISTERS),
num_registers_(-1), num_registers_(-1),
graph_(graph), graph_(graph),
has_osr_entry_(false), has_osr_entry_(false),
...@@ -653,7 +656,8 @@ LiveRange* LAllocator::FixedLiveRangeFor(int index) { ...@@ -653,7 +656,8 @@ LiveRange* LAllocator::FixedLiveRangeFor(int index) {
if (result == NULL) { if (result == NULL) {
result = new(zone()) LiveRange(FixedLiveRangeID(index), chunk()->zone()); result = new(zone()) LiveRange(FixedLiveRangeID(index), chunk()->zone());
ASSERT(result->IsFixed()); ASSERT(result->IsFixed());
SetLiveRangeAssignedRegister(result, index, GENERAL_REGISTERS); result->kind_ = GENERAL_REGISTERS;
SetLiveRangeAssignedRegister(result, index);
fixed_live_ranges_[index] = result; fixed_live_ranges_[index] = result;
} }
return result; return result;
...@@ -667,7 +671,8 @@ LiveRange* LAllocator::FixedDoubleLiveRangeFor(int index) { ...@@ -667,7 +671,8 @@ LiveRange* LAllocator::FixedDoubleLiveRangeFor(int index) {
result = new(zone()) LiveRange(FixedDoubleLiveRangeID(index), result = new(zone()) LiveRange(FixedDoubleLiveRangeID(index),
chunk()->zone()); chunk()->zone());
ASSERT(result->IsFixed()); ASSERT(result->IsFixed());
SetLiveRangeAssignedRegister(result, index, DOUBLE_REGISTERS); result->kind_ = DOUBLE_REGISTERS;
SetLiveRangeAssignedRegister(result, index);
fixed_double_live_ranges_[index] = result; fixed_double_live_ranges_[index] = result;
} }
return result; return result;
...@@ -1375,6 +1380,12 @@ void LAllocator::BuildLiveRanges() { ...@@ -1375,6 +1380,12 @@ void LAllocator::BuildLiveRanges() {
} }
#endif #endif
} }
for (int i = 0; i < live_ranges_.length(); ++i) {
if (live_ranges_[i] != NULL) {
live_ranges_[i]->kind_ = RequiredRegisterKind(live_ranges_[i]->id());
}
}
} }
...@@ -1481,6 +1492,7 @@ void LAllocator::PopulatePointerMaps() { ...@@ -1481,6 +1492,7 @@ void LAllocator::PopulatePointerMaps() {
void LAllocator::AllocateGeneralRegisters() { void LAllocator::AllocateGeneralRegisters() {
LAllocatorPhase phase("L_Allocate general registers", this); LAllocatorPhase phase("L_Allocate general registers", this);
num_registers_ = Register::NumAllocatableRegisters(); num_registers_ = Register::NumAllocatableRegisters();
mode_ = GENERAL_REGISTERS;
AllocateRegisters(); AllocateRegisters();
} }
...@@ -1498,7 +1510,7 @@ void LAllocator::AllocateRegisters() { ...@@ -1498,7 +1510,7 @@ void LAllocator::AllocateRegisters() {
for (int i = 0; i < live_ranges_.length(); ++i) { for (int i = 0; i < live_ranges_.length(); ++i) {
if (live_ranges_[i] != NULL) { if (live_ranges_[i] != NULL) {
if (RequiredRegisterKind(live_ranges_[i]->id()) == mode_) { if (live_ranges_[i]->Kind() == mode_) {
AddToUnhandledUnsorted(live_ranges_[i]); AddToUnhandledUnsorted(live_ranges_[i]);
} }
} }
...@@ -1518,6 +1530,7 @@ void LAllocator::AllocateRegisters() { ...@@ -1518,6 +1530,7 @@ void LAllocator::AllocateRegisters() {
} }
} }
} else { } else {
ASSERT(mode_ == GENERAL_REGISTERS);
for (int i = 0; i < fixed_live_ranges_.length(); ++i) { for (int i = 0; i < fixed_live_ranges_.length(); ++i) {
LiveRange* current = fixed_live_ranges_.at(i); LiveRange* current = fixed_live_ranges_.at(i);
if (current != NULL) { if (current != NULL) {
...@@ -1812,7 +1825,7 @@ bool LAllocator::TryAllocateFreeReg(LiveRange* current) { ...@@ -1812,7 +1825,7 @@ bool LAllocator::TryAllocateFreeReg(LiveRange* current) {
TraceAlloc("Assigning preferred reg %s to live range %d\n", TraceAlloc("Assigning preferred reg %s to live range %d\n",
RegisterName(register_index), RegisterName(register_index),
current->id()); current->id());
SetLiveRangeAssignedRegister(current, register_index, mode_); SetLiveRangeAssignedRegister(current, register_index);
return true; return true;
} }
} }
...@@ -1847,7 +1860,7 @@ bool LAllocator::TryAllocateFreeReg(LiveRange* current) { ...@@ -1847,7 +1860,7 @@ bool LAllocator::TryAllocateFreeReg(LiveRange* current) {
TraceAlloc("Assigning free reg %s to live range %d\n", TraceAlloc("Assigning free reg %s to live range %d\n",
RegisterName(reg), RegisterName(reg),
current->id()); current->id());
SetLiveRangeAssignedRegister(current, reg, mode_); SetLiveRangeAssignedRegister(current, reg);
return true; return true;
} }
...@@ -1932,7 +1945,7 @@ void LAllocator::AllocateBlockedReg(LiveRange* current) { ...@@ -1932,7 +1945,7 @@ void LAllocator::AllocateBlockedReg(LiveRange* current) {
TraceAlloc("Assigning blocked reg %s to live range %d\n", TraceAlloc("Assigning blocked reg %s to live range %d\n",
RegisterName(reg), RegisterName(reg),
current->id()); current->id());
SetLiveRangeAssignedRegister(current, reg, mode_); SetLiveRangeAssignedRegister(current, reg);
// This register was not free. Thus we need to find and spill // This register was not free. Thus we need to find and spill
// parts of active and inactive live regions that use the same register // parts of active and inactive live regions that use the same register
...@@ -2149,7 +2162,7 @@ void LAllocator::Spill(LiveRange* range) { ...@@ -2149,7 +2162,7 @@ void LAllocator::Spill(LiveRange* range) {
if (!first->HasAllocatedSpillOperand()) { if (!first->HasAllocatedSpillOperand()) {
LOperand* op = TryReuseSpillSlot(range); LOperand* op = TryReuseSpillSlot(range);
if (op == NULL) op = chunk_->GetNextSpillSlot(mode_ == DOUBLE_REGISTERS); if (op == NULL) op = chunk_->GetNextSpillSlot(range->Kind());
first->SetSpillOperand(op); first->SetSpillOperand(op);
} }
range->MakeSpilled(chunk()->zone()); range->MakeSpilled(chunk()->zone());
......
...@@ -146,6 +146,7 @@ class LifetimePosition { ...@@ -146,6 +146,7 @@ class LifetimePosition {
enum RegisterKind { enum RegisterKind {
UNALLOCATED_REGISTERS,
GENERAL_REGISTERS, GENERAL_REGISTERS,
DOUBLE_REGISTERS DOUBLE_REGISTERS
}; };
...@@ -290,9 +291,7 @@ class LiveRange: public ZoneObject { ...@@ -290,9 +291,7 @@ class LiveRange: public ZoneObject {
LOperand* CreateAssignedOperand(Zone* zone); LOperand* CreateAssignedOperand(Zone* zone);
int assigned_register() const { return assigned_register_; } int assigned_register() const { return assigned_register_; }
int spill_start_index() const { return spill_start_index_; } int spill_start_index() const { return spill_start_index_; }
void set_assigned_register(int reg, void set_assigned_register(int reg, Zone* zone);
RegisterKind register_kind,
Zone* zone);
void MakeSpilled(Zone* zone); void MakeSpilled(Zone* zone);
// Returns use position in this live range that follows both start // Returns use position in this live range that follows both start
...@@ -323,7 +322,7 @@ class LiveRange: public ZoneObject { ...@@ -323,7 +322,7 @@ class LiveRange: public ZoneObject {
// live range to the result live range. // live range to the result live range.
void SplitAt(LifetimePosition position, LiveRange* result, Zone* zone); void SplitAt(LifetimePosition position, LiveRange* result, Zone* zone);
bool IsDouble() const { return is_double_; } RegisterKind Kind() const { return kind_; }
bool HasRegisterAssigned() const { bool HasRegisterAssigned() const {
return assigned_register_ != kInvalidAssignment; return assigned_register_ != kInvalidAssignment;
} }
...@@ -392,7 +391,7 @@ class LiveRange: public ZoneObject { ...@@ -392,7 +391,7 @@ class LiveRange: public ZoneObject {
int id_; int id_;
bool spilled_; bool spilled_;
bool is_double_; RegisterKind kind_;
int assigned_register_; int assigned_register_;
UseInterval* last_interval_; UseInterval* last_interval_;
UseInterval* first_interval_; UseInterval* first_interval_;
...@@ -406,6 +405,8 @@ class LiveRange: public ZoneObject { ...@@ -406,6 +405,8 @@ class LiveRange: public ZoneObject {
LOperand* current_hint_operand_; LOperand* current_hint_operand_;
LOperand* spill_operand_; LOperand* spill_operand_;
int spill_start_index_; int spill_start_index_;
friend class LAllocator; // Assigns to kind_.
}; };
...@@ -568,9 +569,7 @@ class LAllocator BASE_EMBEDDED { ...@@ -568,9 +569,7 @@ class LAllocator BASE_EMBEDDED {
HBasicBlock* block, HBasicBlock* block,
HBasicBlock* pred); HBasicBlock* pred);
inline void SetLiveRangeAssignedRegister(LiveRange* range, inline void SetLiveRangeAssignedRegister(LiveRange* range, int reg);
int reg,
RegisterKind register_kind);
// Return parallel move that should be used to connect ranges split at the // Return parallel move that should be used to connect ranges split at the
// given position. // given position.
......
...@@ -417,18 +417,19 @@ void LTransitionElementsKind::PrintDataTo(StringStream* stream) { ...@@ -417,18 +417,19 @@ void LTransitionElementsKind::PrintDataTo(StringStream* stream) {
} }
int LPlatformChunk::GetNextSpillIndex(bool is_double) { int LPlatformChunk::GetNextSpillIndex(RegisterKind kind) {
// Skip a slot if for a double-width slot. // Skip a slot if for a double-width slot.
if (is_double) spill_slot_count_++; if (kind == DOUBLE_REGISTERS) spill_slot_count_++;
return spill_slot_count_++; return spill_slot_count_++;
} }
LOperand* LPlatformChunk::GetNextSpillSlot(bool is_double) { LOperand* LPlatformChunk::GetNextSpillSlot(RegisterKind kind) {
int index = GetNextSpillIndex(is_double); int index = GetNextSpillIndex(kind);
if (is_double) { if (kind == DOUBLE_REGISTERS) {
return LDoubleStackSlot::Create(index, zone()); return LDoubleStackSlot::Create(index, zone());
} else { } else {
ASSERT(kind == GENERAL_REGISTERS);
return LStackSlot::Create(index, zone()); return LStackSlot::Create(index, zone());
} }
} }
...@@ -444,7 +445,7 @@ LPlatformChunk* LChunkBuilder::Build() { ...@@ -444,7 +445,7 @@ LPlatformChunk* LChunkBuilder::Build() {
// which will be subsumed into this frame. // which will be subsumed into this frame.
if (graph()->has_osr()) { if (graph()->has_osr()) {
for (int i = graph()->osr()->UnoptimizedFrameSlots(); i > 0; i--) { for (int i = graph()->osr()->UnoptimizedFrameSlots(); i > 0; i--) {
chunk_->GetNextSpillIndex(false); chunk_->GetNextSpillIndex(GENERAL_REGISTERS);
} }
} }
......
...@@ -2592,8 +2592,8 @@ class LPlatformChunk V8_FINAL : public LChunk { ...@@ -2592,8 +2592,8 @@ class LPlatformChunk V8_FINAL : public LChunk {
LPlatformChunk(CompilationInfo* info, HGraph* graph) LPlatformChunk(CompilationInfo* info, HGraph* graph)
: LChunk(info, graph) { } : LChunk(info, graph) { }
int GetNextSpillIndex(bool is_double); int GetNextSpillIndex(RegisterKind kind);
LOperand* GetNextSpillSlot(bool is_double); LOperand* GetNextSpillSlot(RegisterKind kind);
}; };
......
...@@ -353,19 +353,20 @@ void LAccessArgumentsAt::PrintDataTo(StringStream* stream) { ...@@ -353,19 +353,20 @@ void LAccessArgumentsAt::PrintDataTo(StringStream* stream) {
} }
int LPlatformChunk::GetNextSpillIndex(bool is_double) { int LPlatformChunk::GetNextSpillIndex(RegisterKind kind) {
return spill_slot_count_++; return spill_slot_count_++;
} }
LOperand* LPlatformChunk::GetNextSpillSlot(bool is_double) { LOperand* LPlatformChunk::GetNextSpillSlot(RegisterKind kind) {
// All stack slots are Double stack slots on x64. // All stack slots are Double stack slots on x64.
// Alternatively, at some point, start using half-size // Alternatively, at some point, start using half-size
// stack slots for int32 values. // stack slots for int32 values.
int index = GetNextSpillIndex(is_double); int index = GetNextSpillIndex(kind);
if (is_double) { if (kind == DOUBLE_REGISTERS) {
return LDoubleStackSlot::Create(index, zone()); return LDoubleStackSlot::Create(index, zone());
} else { } else {
ASSERT(kind == GENERAL_REGISTERS);
return LStackSlot::Create(index, zone()); return LStackSlot::Create(index, zone());
} }
} }
...@@ -445,7 +446,7 @@ LPlatformChunk* LChunkBuilder::Build() { ...@@ -445,7 +446,7 @@ LPlatformChunk* LChunkBuilder::Build() {
// which will be subsumed into this frame. // which will be subsumed into this frame.
if (graph()->has_osr()) { if (graph()->has_osr()) {
for (int i = graph()->osr()->UnoptimizedFrameSlots(); i > 0; i--) { for (int i = graph()->osr()->UnoptimizedFrameSlots(); i > 0; i--) {
chunk_->GetNextSpillIndex(false); chunk_->GetNextSpillIndex(GENERAL_REGISTERS);
} }
} }
......
...@@ -2542,8 +2542,8 @@ class LPlatformChunk V8_FINAL : public LChunk { ...@@ -2542,8 +2542,8 @@ class LPlatformChunk V8_FINAL : public LChunk {
LPlatformChunk(CompilationInfo* info, HGraph* graph) LPlatformChunk(CompilationInfo* info, HGraph* graph)
: LChunk(info, graph) { } : LChunk(info, graph) { }
int GetNextSpillIndex(bool is_double); int GetNextSpillIndex(RegisterKind kind);
LOperand* GetNextSpillSlot(bool is_double); LOperand* GetNextSpillSlot(RegisterKind kind);
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment