Index: src/compiler/pipeline.cc |
diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc |
index 6ee34ab933d83873397382e33efd35212fc49b7e..0013da6e1771c9e33135d231f2051360bba50f7a 100644 |
--- a/src/compiler/pipeline.cc |
+++ b/src/compiler/pipeline.cc |
@@ -276,11 +276,8 @@ class PipelineData { |
info()->isolate(), instruction_zone(), instruction_blocks); |
} |
- void InitializeRegisterAllocationData(const RegisterConfiguration* config, |
- CallDescriptor* descriptor, |
- const char* debug_name) { |
+ void InitializeFrameData(CallDescriptor* descriptor) { |
DCHECK(frame_ == nullptr); |
- DCHECK(register_allocation_data_ == nullptr); |
int fixed_frame_size = 0; |
if (descriptor != nullptr) { |
fixed_frame_size = (descriptor->IsCFunctionCall()) |
@@ -289,6 +286,12 @@ class PipelineData { |
: StandardFrameConstants::kFixedSlotCount; |
} |
frame_ = new (instruction_zone()) Frame(fixed_frame_size, descriptor); |
+ } |
+ |
+ void InitializeRegisterAllocationData(const RegisterConfiguration* config, |
+ CallDescriptor* descriptor, |
+ const char* debug_name) { |
+ DCHECK(register_allocation_data_ == nullptr); |
register_allocation_data_ = new (register_allocation_zone()) |
RegisterAllocationData(config, register_allocation_zone(), frame(), |
sequence(), debug_name); |
@@ -816,7 +819,7 @@ struct InstructionSelectionPhase { |
void Run(PipelineData* data, Zone* temp_zone, Linkage* linkage) { |
InstructionSelector selector( |
temp_zone, data->graph()->NodeCount(), linkage, data->sequence(), |
- data->schedule(), data->source_positions(), |
+ data->schedule(), data->source_positions(), data->frame(), |
data->info()->is_source_positions_enabled() |
? InstructionSelector::kAllSourcePositions |
: InstructionSelector::kCallSourcePositions); |
@@ -1282,6 +1285,7 @@ bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config, |
PipelineData data(&zone_pool, &info, sequence); |
Pipeline pipeline(&info); |
pipeline.data_ = &data; |
+ pipeline.data_->InitializeFrameData(nullptr); |
pipeline.AllocateRegisters(config, nullptr, run_verifier); |
return !data.compilation_failed(); |
} |
@@ -1304,6 +1308,7 @@ Handle<Code> Pipeline::ScheduleAndGenerateCode( |
data->InitializeInstructionSequence(); |
+ data->InitializeFrameData(call_descriptor); |
// Select and schedule instructions covering the scheduled graph. |
Linkage linkage(call_descriptor); |
Run<InstructionSelectionPhase>(&linkage); |
@@ -1325,6 +1330,7 @@ Handle<Code> Pipeline::ScheduleAndGenerateCode( |
BeginPhaseKind("register allocation"); |
bool run_verifier = FLAG_turbo_verify_allocation; |
+ |
// Allocate registers. |
AllocateRegisters( |
RegisterConfiguration::ArchDefault(RegisterConfiguration::TURBOFAN), |