Index: src/compiler/pipeline.cc |
diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc |
index 59684c1ac10d2fca9bc7ae65b2a77d72cbcba910..0d28dafb708d5f50121a4c8ee14c216c912218f4 100644 |
--- a/src/compiler/pipeline.cc |
+++ b/src/compiler/pipeline.cc |
@@ -742,23 +742,25 @@ struct BuildLiveRangesPhase { |
}; |
+template <typename RegAllocator> |
struct AllocateGeneralRegistersPhase { |
static const char* phase_name() { return "allocate general registers"; } |
void Run(PipelineData* data, Zone* temp_zone) { |
- LinearScanAllocator allocator(data->register_allocation_data(), |
- GENERAL_REGISTERS, temp_zone); |
+ RegAllocator allocator(data->register_allocation_data(), GENERAL_REGISTERS, |
+ temp_zone); |
allocator.AllocateRegisters(); |
} |
}; |
+template <typename RegAllocator> |
struct AllocateDoubleRegistersPhase { |
static const char* phase_name() { return "allocate double registers"; } |
void Run(PipelineData* data, Zone* temp_zone) { |
- LinearScanAllocator allocator(data->register_allocation_data(), |
- DOUBLE_REGISTERS, temp_zone); |
+ RegAllocator allocator(data->register_allocation_data(), DOUBLE_REGISTERS, |
+ temp_zone); |
allocator.AllocateRegisters(); |
} |
}; |
@@ -1269,8 +1271,13 @@ void Pipeline::AllocateRegisters(const RegisterConfiguration* config, |
if (verifier != nullptr) { |
CHECK(!data->register_allocation_data()->ExistsUseWithoutDefinition()); |
} |
- Run<AllocateGeneralRegistersPhase>(); |
- Run<AllocateDoubleRegistersPhase>(); |
+ if (FLAG_turbo_greedy_regalloc) { |
+ Run<AllocateGeneralRegistersPhase<GreedyAllocator>>(); |
+ Run<AllocateDoubleRegistersPhase<GreedyAllocator>>(); |
+ } else { |
+ Run<AllocateGeneralRegistersPhase<LinearScanAllocator>>(); |
+ Run<AllocateDoubleRegistersPhase<LinearScanAllocator>>(); |
+ } |
Run<AssignSpillSlotsPhase>(); |
Run<CommitAssignmentPhase>(); |