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

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

Issue 837173002: [turbofan] remove spill slot reuse flag (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 11 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/register-allocator.h ('k') | src/flag-definitions.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/register-allocator.cc
diff --git a/src/compiler/register-allocator.cc b/src/compiler/register-allocator.cc
index 219c71ec40dbde83fc13a580f7a4623782865a86..8e11e7c181af8fb17298ae0924760fed6e37a7ad 100644
--- a/src/compiler/register-allocator.cc
+++ b/src/compiler/register-allocator.cc
@@ -897,9 +897,7 @@ void SpillRange::MergeDisjointIntervals(UseInterval* other) {
}
-void RegisterAllocator::ReuseSpillSlots() {
- DCHECK(FLAG_turbo_reuse_spill_slots);
-
+void RegisterAllocator::AssignSpillSlots() {
// Merge disjoint spill ranges
for (size_t i = 0; i < spill_ranges().size(); i++) {
auto range = spill_ranges()[i];
@@ -942,7 +940,6 @@ void RegisterAllocator::CommitAssignment() {
SpillRange* RegisterAllocator::AssignSpillRangeToLiveRange(LiveRange* range) {
- DCHECK(FLAG_turbo_reuse_spill_slots);
auto spill_range = new (local_zone()) SpillRange(range, local_zone());
spill_ranges().push_back(spill_range);
return spill_range;
@@ -950,7 +947,6 @@ SpillRange* RegisterAllocator::AssignSpillRangeToLiveRange(LiveRange* range) {
bool RegisterAllocator::TryReuseSpillForPhi(LiveRange* range) {
- DCHECK(FLAG_turbo_reuse_spill_slots);
if (range->IsChild() || !range->is_phi()) return false;
DCHECK(range->HasNoSpillType());
@@ -1348,12 +1344,10 @@ void RegisterAllocator::ProcessInstructions(const InstructionBlock* block,
void RegisterAllocator::ResolvePhis(const InstructionBlock* block) {
for (auto phi : block->phis()) {
- if (FLAG_turbo_reuse_spill_slots) {
- auto res = phi_map_.insert(
- std::make_pair(phi->virtual_register(), PhiMapValue(phi, block)));
- DCHECK(res.second);
- USE(res);
- }
+ auto res = phi_map_.insert(
+ std::make_pair(phi->virtual_register(), PhiMapValue(phi, block)));
+ DCHECK(res.second);
+ USE(res);
auto output = phi->output();
int phi_vreg = phi->virtual_register();
if (!FLAG_turbo_delay_ssa_decon) {
@@ -1934,11 +1928,7 @@ void RegisterAllocator::AllocateRegisters() {
}
}
- if (FLAG_turbo_reuse_spill_slots) {
- if (TryReuseSpillForPhi(current)) {
- continue;
- }
- }
+ if (TryReuseSpillForPhi(current)) continue;
for (size_t i = 0; i < active_live_ranges().size(); ++i) {
auto cur_active = active_live_ranges()[i];
@@ -2067,36 +2057,9 @@ bool RegisterAllocator::UnhandledIsSorted() {
}
-void RegisterAllocator::FreeSpillSlot(LiveRange* range) {
- DCHECK(!FLAG_turbo_reuse_spill_slots);
- // Check that we are the last range.
- if (range->next() != nullptr) return;
- if (!range->TopLevel()->HasSpillOperand()) return;
- auto spill_operand = range->TopLevel()->GetSpillOperand();
- if (spill_operand->IsConstant()) return;
- if (spill_operand->index() >= 0) {
- reusable_slots().push_back(range);
- }
-}
-
-
-InstructionOperand* RegisterAllocator::TryReuseSpillSlot(LiveRange* range) {
- DCHECK(!FLAG_turbo_reuse_spill_slots);
- if (reusable_slots().empty()) return nullptr;
- if (reusable_slots().front()->End().Value() >
- range->TopLevel()->Start().Value()) {
- return nullptr;
- }
- auto result = reusable_slots().front()->TopLevel()->GetSpillOperand();
- reusable_slots().erase(reusable_slots().begin());
- return result;
-}
-
-
void RegisterAllocator::ActiveToHandled(LiveRange* range) {
RemoveElement(&active_live_ranges(), range);
TraceAlloc("Moving live range %d from active to handled\n", range->id());
- if (!FLAG_turbo_reuse_spill_slots) FreeSpillSlot(range);
}
@@ -2110,7 +2073,6 @@ void RegisterAllocator::ActiveToInactive(LiveRange* range) {
void RegisterAllocator::InactiveToHandled(LiveRange* range) {
RemoveElement(&inactive_live_ranges(), range);
TraceAlloc("Moving live range %d from inactive to handled\n", range->id());
- if (!FLAG_turbo_reuse_spill_slots) FreeSpillSlot(range);
}
@@ -2479,21 +2441,7 @@ void RegisterAllocator::Spill(LiveRange* range) {
TraceAlloc("Spilling live range %d\n", range->id());
auto first = range->TopLevel();
if (first->HasNoSpillType()) {
- if (FLAG_turbo_reuse_spill_slots) {
- AssignSpillRangeToLiveRange(first);
- } else {
- auto op = TryReuseSpillSlot(range);
- if (op == nullptr) {
- // Allocate a new operand referring to the spill slot.
- RegisterKind kind = range->Kind();
- int index = frame()->AllocateSpillSlot(kind == DOUBLE_REGISTERS);
- auto op_kind = kind == DOUBLE_REGISTERS
- ? InstructionOperand::DOUBLE_STACK_SLOT
- : InstructionOperand::STACK_SLOT;
- op = new (code_zone()) InstructionOperand(op_kind, index);
- }
- first->SetSpillOperand(op);
- }
+ AssignSpillRangeToLiveRange(first);
}
range->MakeSpilled();
}
« no previous file with comments | « src/compiler/register-allocator.h ('k') | src/flag-definitions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698