Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(100)

Unified Diff: src/compiler/greedy-allocator.cc

Issue 1311983002: [turbofan] Separate LiveRange and TopLevelLiveRange concepts (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler/graph-visualizer.cc ('k') | src/compiler/live-range-separator.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/greedy-allocator.cc
diff --git a/src/compiler/greedy-allocator.cc b/src/compiler/greedy-allocator.cc
index 2da30bd2897510e720ae77f8db9b6ddb621e7052..e1f13a64d4d8173850a7c8370071ca0260378410 100644
--- a/src/compiler/greedy-allocator.cc
+++ b/src/compiler/greedy-allocator.cc
@@ -22,11 +22,11 @@ const float GreedyAllocator::kAllocatedRangeMultiplier = 10.0;
namespace {
-void UpdateOperands(LiveRange* range, RegisterAllocationData* data) {
+void UpdateOperands(TopLevelLiveRange* range, RegisterAllocationData* data) {
int reg_id = range->assigned_register();
range->SetUseHints(reg_id);
if (range->is_phi()) {
- data->GetPhiMapValueFor(range->id())->set_assigned_register(reg_id);
+ data->GetPhiMapValueFor(range)->set_assigned_register(reg_id);
}
}
@@ -38,8 +38,7 @@ LiveRange* Split(LiveRange* range, RegisterAllocationData* data,
(data->code()
->GetInstructionBlock(pos.ToInstructionIndex())
->last_instruction_index() != pos.ToInstructionIndex()));
- LiveRange* result = data->NewChildRangeFor(range);
- range->SplitAt(pos, result, data->allocation_zone());
+ LiveRange* result = range->SplitAt(pos, data->allocation_zone());
return result;
}
@@ -117,7 +116,8 @@ AllocationCandidate AllocationScheduler::GetNext() {
void AllocationScheduler::Schedule(LiveRange* range) {
- TRACE("Scheduling live range %d.\n", range->id());
+ TRACE("Scheduling live range %d:%d.\n", range->TopLevel()->vreg(),
+ range->relative_id());
queue_.push(AllocationCandidate(range));
}
@@ -130,14 +130,15 @@ GreedyAllocator::GreedyAllocator(RegisterAllocationData* data,
void GreedyAllocator::AssignRangeToRegister(int reg_id, LiveRange* range) {
- TRACE("Assigning register %s to live range %d\n", RegisterName(reg_id),
- range->id());
+ TRACE("Assigning register %s to live range %d:%d\n", RegisterName(reg_id),
+ range->TopLevel()->vreg(), range->relative_id());
DCHECK(!range->HasRegisterAssigned());
AllocateRegisterToRange(reg_id, range);
- TRACE("Assigning %s to range %d\n", RegisterName(reg_id), range->id());
+ TRACE("Assigning %s to range %d%d.\n", RegisterName(reg_id),
+ range->TopLevel()->vreg(), range->relative_id());
range->set_assigned_register(reg_id);
}
@@ -151,7 +152,7 @@ void GreedyAllocator::PreallocateFixedRanges() {
for (LiveRange* fixed_range : GetFixedRegisters()) {
if (fixed_range != nullptr) {
DCHECK_EQ(mode(), fixed_range->kind());
- DCHECK(fixed_range->IsFixed());
+ DCHECK(fixed_range->TopLevel()->IsFixed());
int reg_nr = fixed_range->assigned_register();
EnsureValidRangeWeight(fixed_range);
@@ -180,7 +181,8 @@ void GreedyAllocator::TryAllocateCandidate(
void GreedyAllocator::TryAllocateLiveRange(LiveRange* range) {
// TODO(mtrofin): once we introduce groups, we'll want to first try and
// allocate at the preferred register.
- TRACE("Attempting to allocate live range %d\n", range->id());
+ TRACE("Attempting to allocate live range %d:%d.\n", range->TopLevel()->vreg(),
+ range->relative_id());
int free_reg = -1;
int evictable_reg = -1;
EnsureValidRangeWeight(range);
@@ -206,8 +208,9 @@ void GreedyAllocator::TryAllocateLiveRange(LiveRange* range) {
// We have a free register, so we use it.
if (free_reg >= 0) {
- TRACE("Found free register %s for live range %d\n", RegisterName(free_reg),
- range->id());
+ TRACE("Found free register %s for live range %d:%d.\n",
+ RegisterName(free_reg), range->TopLevel()->vreg(),
+ range->relative_id());
AssignRangeToRegister(free_reg, range);
return;
}
@@ -215,8 +218,9 @@ void GreedyAllocator::TryAllocateLiveRange(LiveRange* range) {
// We found a register to perform evictions, so we evict and allocate our
// candidate.
if (evictable_reg >= 0) {
- TRACE("Found evictable register %s for live range %d\n",
- RegisterName(free_reg), range->id());
+ TRACE("Found evictable register %s for live range %d:%d.\n",
+ RegisterName(free_reg), range->TopLevel()->vreg(),
+ range->relative_id());
EvictAndRescheduleConflicts(evictable_reg, range);
AssignRangeToRegister(evictable_reg, range);
return;
@@ -233,11 +237,12 @@ void GreedyAllocator::EvictAndRescheduleConflicts(unsigned reg_id,
for (LiveRange* conflict = conflicts.Current(); conflict != nullptr;
conflict = conflicts.RemoveCurrentAndGetNext()) {
DCHECK(conflict->HasRegisterAssigned());
- CHECK(!conflict->IsFixed());
+ CHECK(!conflict->TopLevel()->IsFixed());
conflict->UnsetAssignedRegister();
UpdateWeightAtEviction(conflict);
scheduler().Schedule(conflict);
- TRACE("Evicted range %d.\n", conflict->id());
+ TRACE("Evicted range %d%d.\n", conflict->TopLevel()->vreg(),
+ conflict->relative_id());
}
}
@@ -250,7 +255,8 @@ void GreedyAllocator::SplitAndSpillRangesDefinedByMemoryOperand() {
if (range->HasNoSpillType()) continue;
LifetimePosition start = range->Start();
- TRACE("Live range %d is defined by a spill operand.\n", range->id());
+ TRACE("Live range %d:%d is defined by a spill operand.\n",
+ range->TopLevel()->vreg(), range->relative_id());
auto next_pos = start;
if (next_pos.IsGapPosition()) {
next_pos = next_pos.NextStart();
@@ -335,7 +341,7 @@ void GreedyAllocator::EnsureValidRangeWeight(LiveRange* range) {
// unallocated.
if (range->weight() != LiveRange::kInvalidWeight) return;
- if (range->IsFixed()) {
+ if (range->TopLevel()->IsFixed()) {
range->set_weight(LiveRange::kMaxWeight);
return;
}
« no previous file with comments | « src/compiler/graph-visualizer.cc ('k') | src/compiler/live-range-separator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698