Index: src/compiler/register-allocator.cc |
diff --git a/src/compiler/register-allocator.cc b/src/compiler/register-allocator.cc |
index 13f7ceeb91f5e8969c4f48690f5fee7a0cd723f8..fcb935a940cf81cbc077cfc34d1f8006b3119fb1 100644 |
--- a/src/compiler/register-allocator.cc |
+++ b/src/compiler/register-allocator.cc |
@@ -92,18 +92,17 @@ bool IsOutputDoubleRegisterOf(Instruction* instr, DoubleRegister reg) { |
// TODO(dcarney): fix frame to allow frame accesses to half size location. |
-int GetByteWidth(MachineType machine_type) { |
- DCHECK_EQ(RepresentationOf(machine_type), machine_type); |
- switch (machine_type) { |
- case kRepBit: |
- case kRepWord8: |
- case kRepWord16: |
- case kRepWord32: |
- case kRepTagged: |
+int GetByteWidth(MachineRepresentation rep) { |
+ switch (rep) { |
+ case MachineRepresentation::kBit: |
+ case MachineRepresentation::kWord8: |
+ case MachineRepresentation::kWord16: |
+ case MachineRepresentation::kWord32: |
+ case MachineRepresentation::kTagged: |
return kPointerSize; |
- case kRepFloat32: |
- case kRepWord64: |
- case kRepFloat64: |
+ case MachineRepresentation::kFloat32: |
+ case MachineRepresentation::kWord64: |
+ case MachineRepresentation::kFloat64: |
return 8; |
default: |
UNREACHABLE(); |
@@ -251,7 +250,7 @@ const float LiveRange::kInvalidWeight = -1; |
const float LiveRange::kMaxWeight = std::numeric_limits<float>::max(); |
-LiveRange::LiveRange(int relative_id, MachineType machine_type, |
+LiveRange::LiveRange(int relative_id, MachineRepresentation rep, |
TopLevelLiveRange* top_level) |
: relative_id_(relative_id), |
bits_(0), |
@@ -267,9 +266,9 @@ LiveRange::LiveRange(int relative_id, MachineType machine_type, |
size_(kInvalidSize), |
weight_(kInvalidWeight), |
group_(nullptr) { |
- DCHECK(AllocatedOperand::IsSupportedMachineType(machine_type)); |
+ DCHECK(AllocatedOperand::IsSupportedRepresentation(rep)); |
bits_ = AssignedRegisterField::encode(kUnassignedRegister) | |
- MachineTypeField::encode(machine_type); |
+ RepresentationField::encode(rep); |
} |
@@ -309,14 +308,8 @@ void LiveRange::Spill() { |
RegisterKind LiveRange::kind() const { |
- switch (RepresentationOf(machine_type())) { |
- case kRepFloat32: |
- case kRepFloat64: |
- return DOUBLE_REGISTERS; |
- default: |
- break; |
- } |
- return GENERAL_REGISTERS; |
+ return IsFloatingPoint(representation()) ? DOUBLE_REGISTERS |
+ : GENERAL_REGISTERS; |
} |
@@ -397,7 +390,7 @@ bool LiveRange::IsTopLevel() const { return top_level_ == this; } |
InstructionOperand LiveRange::GetAssignedOperand() const { |
if (HasRegisterAssigned()) { |
DCHECK(!spilled()); |
- return AllocatedOperand(LocationOperand::REGISTER, machine_type(), |
+ return AllocatedOperand(LocationOperand::REGISTER, representation(), |
assigned_register()); |
} |
DCHECK(spilled()); |
@@ -436,7 +429,7 @@ void LiveRange::AdvanceLastProcessedMarker( |
LiveRange* LiveRange::SplitAt(LifetimePosition position, Zone* zone) { |
int new_id = TopLevel()->GetNextChildId(); |
- LiveRange* child = new (zone) LiveRange(new_id, machine_type(), TopLevel()); |
+ LiveRange* child = new (zone) LiveRange(new_id, representation(), TopLevel()); |
DetachAt(position, child, zone); |
child->top_level_ = TopLevel(); |
@@ -681,8 +674,8 @@ struct TopLevelLiveRange::SpillMoveInsertionList : ZoneObject { |
}; |
-TopLevelLiveRange::TopLevelLiveRange(int vreg, MachineType machine_type) |
- : LiveRange(0, machine_type, this), |
+TopLevelLiveRange::TopLevelLiveRange(int vreg, MachineRepresentation rep) |
+ : LiveRange(0, rep, this), |
vreg_(vreg), |
last_child_id_(0), |
splintered_from_(nullptr), |
@@ -797,7 +790,7 @@ void TopLevelLiveRange::SetSpillRange(SpillRange* spill_range) { |
AllocatedOperand TopLevelLiveRange::GetSpillRangeOperand() const { |
auto spill_range = GetSpillRange(); |
int index = spill_range->assigned_slot(); |
- return AllocatedOperand(LocationOperand::STACK_SLOT, machine_type(), index); |
+ return AllocatedOperand(LocationOperand::STACK_SLOT, representation(), index); |
} |
@@ -806,7 +799,7 @@ void TopLevelLiveRange::Splinter(LifetimePosition start, LifetimePosition end, |
DCHECK(start != Start() || end != End()); |
DCHECK(start < end); |
- TopLevelLiveRange splinter_temp(-1, machine_type()); |
+ TopLevelLiveRange splinter_temp(-1, representation()); |
UsePosition* last_in_splinter = nullptr; |
// Live ranges defined in deferred blocks stay in deferred blocks, so we |
// don't need to splinter them. That means that start should always be |
@@ -824,7 +817,7 @@ void TopLevelLiveRange::Splinter(LifetimePosition start, LifetimePosition end, |
UsePosition* last = DetachAt(start, &splinter_temp, zone); |
- LiveRange end_part(kInvalidId, this->machine_type(), nullptr); |
+ LiveRange end_part(kInvalidId, this->representation(), nullptr); |
last_in_splinter = splinter_temp.DetachAt(end, &end_part, zone); |
next_ = end_part.next_; |
@@ -1088,7 +1081,7 @@ std::ostream& operator<<(std::ostream& os, |
SpillRange::SpillRange(TopLevelLiveRange* parent, Zone* zone) |
: live_ranges_(zone), |
assigned_slot_(kUnassignedSlot), |
- byte_width_(GetByteWidth(parent->machine_type())), |
+ byte_width_(GetByteWidth(parent->representation())), |
kind_(parent->kind()) { |
// Spill ranges are created for top level, non-splintered ranges. This is so |
// that, when merging decisions are made, we consider the full extent of the |
@@ -1118,7 +1111,7 @@ SpillRange::SpillRange(TopLevelLiveRange* parent, Zone* zone) |
int SpillRange::ByteWidth() const { |
- return GetByteWidth(live_ranges_[0]->machine_type()); |
+ return GetByteWidth(live_ranges_[0]->representation()); |
} |
@@ -1257,7 +1250,8 @@ MoveOperands* RegisterAllocationData::AddGapMove( |
} |
-MachineType RegisterAllocationData::MachineTypeFor(int virtual_register) { |
+MachineRepresentation RegisterAllocationData::RepresentationFor( |
+ int virtual_register) { |
DCHECK_LT(virtual_register, code()->VirtualRegisterCount()); |
return code()->GetRepresentation(virtual_register); |
} |
@@ -1269,7 +1263,7 @@ TopLevelLiveRange* RegisterAllocationData::GetOrCreateLiveRangeFor(int index) { |
} |
auto result = live_ranges()[index]; |
if (result == nullptr) { |
- result = NewLiveRange(index, MachineTypeFor(index)); |
+ result = NewLiveRange(index, RepresentationFor(index)); |
live_ranges()[index] = result; |
} |
return result; |
@@ -1277,8 +1271,8 @@ TopLevelLiveRange* RegisterAllocationData::GetOrCreateLiveRangeFor(int index) { |
TopLevelLiveRange* RegisterAllocationData::NewLiveRange( |
- int index, MachineType machine_type) { |
- return new (allocation_zone()) TopLevelLiveRange(index, machine_type); |
+ int index, MachineRepresentation rep) { |
+ return new (allocation_zone()) TopLevelLiveRange(index, rep); |
} |
@@ -1292,9 +1286,9 @@ int RegisterAllocationData::GetNextLiveRangeId() { |
TopLevelLiveRange* RegisterAllocationData::NextLiveRange( |
- MachineType machine_type) { |
+ MachineRepresentation rep) { |
int vreg = GetNextLiveRangeId(); |
- TopLevelLiveRange* ret = NewLiveRange(vreg, machine_type); |
+ TopLevelLiveRange* ret = NewLiveRange(vreg, rep); |
return ret; |
} |
@@ -1501,22 +1495,22 @@ InstructionOperand* ConstraintBuilder::AllocateFixed( |
TRACE("Allocating fixed reg for op %d\n", operand->virtual_register()); |
DCHECK(operand->HasFixedPolicy()); |
InstructionOperand allocated; |
- MachineType machine_type = InstructionSequence::DefaultRepresentation(); |
+ MachineRepresentation rep = InstructionSequence::DefaultRepresentation(); |
int virtual_register = operand->virtual_register(); |
if (virtual_register != InstructionOperand::kInvalidVirtualRegister) { |
- machine_type = data()->MachineTypeFor(virtual_register); |
+ rep = data()->RepresentationFor(virtual_register); |
} |
if (operand->HasFixedSlotPolicy()) { |
- allocated = AllocatedOperand(AllocatedOperand::STACK_SLOT, machine_type, |
+ allocated = AllocatedOperand(AllocatedOperand::STACK_SLOT, rep, |
operand->fixed_slot_index()); |
} else if (operand->HasFixedRegisterPolicy()) { |
- DCHECK(!IsFloatingPoint(machine_type)); |
- allocated = AllocatedOperand(AllocatedOperand::REGISTER, machine_type, |
+ DCHECK(!IsFloatingPoint(rep)); |
+ allocated = AllocatedOperand(AllocatedOperand::REGISTER, rep, |
operand->fixed_register_index()); |
} else if (operand->HasFixedDoubleRegisterPolicy()) { |
- DCHECK(IsFloatingPoint(machine_type)); |
+ DCHECK(IsFloatingPoint(rep)); |
DCHECK_NE(InstructionOperand::kInvalidVirtualRegister, virtual_register); |
- allocated = AllocatedOperand(AllocatedOperand::REGISTER, machine_type, |
+ allocated = AllocatedOperand(AllocatedOperand::REGISTER, rep, |
operand->fixed_register_index()); |
} else { |
UNREACHABLE(); |
@@ -1628,7 +1622,7 @@ void ConstraintBuilder::MeetConstraintsAfter(int instr_index) { |
range->MarkHasPreassignedSlot(); |
InstructionOperand* spill_op = AllocatedOperand::New( |
data()->code_zone(), LocationOperand::LocationKind::STACK_SLOT, |
- range->machine_type(), first_output->GetSecondaryStorage()); |
+ range->representation(), first_output->GetSecondaryStorage()); |
range->RecordSpillLocation(allocation_zone(), instr_index + 1, |
first_output); |
range->SetSpillOperand(spill_op); |
@@ -1827,7 +1821,8 @@ TopLevelLiveRange* LiveRangeBuilder::FixedDoubleLiveRangeFor(int index) { |
DCHECK(index < config()->num_double_registers()); |
auto result = data()->fixed_double_live_ranges()[index]; |
if (result == nullptr) { |
- result = data()->NewLiveRange(FixedDoubleLiveRangeID(index), kRepFloat64); |
+ result = data()->NewLiveRange(FixedDoubleLiveRangeID(index), |
+ MachineRepresentation::kFloat64); |
DCHECK(result->IsFixed()); |
result->set_assigned_register(index); |
data()->MarkAllocated(DOUBLE_REGISTERS, index); |
@@ -3100,8 +3095,8 @@ void ReferenceMapPopulator::PopulateReferenceMaps() { |
spill_operand = range->GetSpillRangeOperand(); |
} |
DCHECK(spill_operand.IsStackSlot()); |
- DCHECK_EQ(kRepTagged, |
- AllocatedOperand::cast(spill_operand).machine_type()); |
+ DCHECK_EQ(MachineRepresentation::kTagged, |
+ AllocatedOperand::cast(spill_operand).representation()); |
} |
// Step through the safe points to see whether they are in the range. |
@@ -3142,7 +3137,8 @@ void ReferenceMapPopulator::PopulateReferenceMaps() { |
safe_point); |
auto operand = cur->GetAssignedOperand(); |
DCHECK(!operand.IsStackSlot()); |
- DCHECK_EQ(kRepTagged, AllocatedOperand::cast(operand).machine_type()); |
+ DCHECK_EQ(MachineRepresentation::kTagged, |
+ AllocatedOperand::cast(operand).representation()); |
map->RecordReference(AllocatedOperand::cast(operand)); |
} |
} |