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

Unified Diff: src/compiler/pipeline.cc

Issue 1810333003: [turbofan] Move frame elision logic to the end (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 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 | « no previous file | src/compiler/register-allocator.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/pipeline.cc
diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc
index 802024e5644f6d2892ac73444eb9b08cbc21c6d3..6129526553cd6dd20e524c6fd7b73ac70af268f0 100644
--- a/src/compiler/pipeline.cc
+++ b/src/compiler/pipeline.cc
@@ -267,13 +267,16 @@ class PipelineData {
register_allocation_data_ = nullptr;
}
- void InitializeInstructionSequence() {
+ void InitializeInstructionSequence(const CallDescriptor* descriptor) {
DCHECK(sequence_ == nullptr);
InstructionBlocks* instruction_blocks =
InstructionSequence::InstructionBlocksFor(instruction_zone(),
schedule());
sequence_ = new (instruction_zone()) InstructionSequence(
info()->isolate(), instruction_zone(), instruction_blocks);
+ if (descriptor && descriptor->RequiresFrameAsIncoming()) {
+ sequence_->instruction_blocks()[0]->mark_needs_frame();
+ }
}
void InitializeFrameData(CallDescriptor* descriptor) {
@@ -1336,7 +1339,7 @@ Handle<Code> Pipeline::ScheduleAndGenerateCode(
data->schedule());
}
- data->InitializeInstructionSequence();
+ data->InitializeInstructionSequence(call_descriptor);
data->InitializeFrameData(call_descriptor);
// Select and schedule instructions covering the scheduled graph.
@@ -1485,12 +1488,6 @@ void Pipeline::AllocateRegisters(const RegisterConfiguration* config,
Run<MergeSplintersPhase>();
}
- // We plan to enable frame elision only for stubs and bytecode handlers.
- if (FLAG_turbo_frame_elision && info()->IsStub()) {
- Run<LocateSpillSlotsPhase>();
- Run<FrameElisionPhase>();
- }
-
Run<AssignSpillSlotsPhase>();
Run<CommitAssignmentPhase>();
@@ -1501,6 +1498,9 @@ void Pipeline::AllocateRegisters(const RegisterConfiguration* config,
Run<OptimizeMovesPhase>();
}
+ Run<LocateSpillSlotsPhase>();
+ Run<FrameElisionPhase>();
+
if (FLAG_trace_turbo_graph) {
OFStream os(stdout);
PrintableInstructionSequence printable = {config, data->sequence()};
« no previous file with comments | « no previous file | src/compiler/register-allocator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698