Index: src/compiler/pipeline.cc |
diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc |
index 215104e54f571e5099df055742beb92087d321d3..30be80c370d15547c81a449562683237f5438b8f 100644 |
--- a/src/compiler/pipeline.cc |
+++ b/src/compiler/pipeline.cc |
@@ -800,8 +800,8 @@ struct InliningPhase { |
data->info()->is_function_context_specializing() |
? handle(data->info()->context()) |
: MaybeHandle<Context>()); |
- JSFrameSpecialization frame_specialization(data->info()->osr_frame(), |
- data->jsgraph()); |
+ JSFrameSpecialization frame_specialization( |
+ &graph_reducer, data->info()->osr_frame(), data->jsgraph()); |
JSGlobalObjectSpecialization global_object_specialization( |
&graph_reducer, data->jsgraph(), data->native_context(), |
data->info()->dependencies()); |
@@ -860,7 +860,20 @@ struct TyperPhase { |
} |
}; |
-#ifdef DEBUG |
+struct OsrTyperPhase { |
+ static const char* phase_name() { return "osr typer"; } |
+ |
+ void Run(PipelineData* data, Zone* temp_zone) { |
+ NodeVector roots(temp_zone); |
+ data->jsgraph()->GetCachedNodes(&roots); |
+ // Dummy induction variable optimizer: at the moment, we do not try |
+ // to compute loop variable bounds on OSR. |
+ LoopVariableOptimizer induction_vars(data->jsgraph()->graph(), |
+ data->common(), temp_zone); |
+ Typer typer(data->isolate(), data->graph()); |
+ typer.Run(roots, &induction_vars); |
+ } |
+}; |
struct UntyperPhase { |
static const char* phase_name() { return "untyper"; } |
@@ -877,6 +890,12 @@ struct UntyperPhase { |
} |
}; |
+ NodeVector roots(temp_zone); |
+ data->jsgraph()->GetCachedNodes(&roots); |
+ for (Node* node : roots) { |
+ NodeProperties::RemoveType(node); |
+ } |
+ |
JSGraphReducer graph_reducer(data->jsgraph(), temp_zone); |
RemoveTypeReducer remove_type_reducer; |
AddReducer(data, &graph_reducer, &remove_type_reducer); |
@@ -884,12 +903,15 @@ struct UntyperPhase { |
} |
}; |
-#endif // DEBUG |
- |
struct OsrDeconstructionPhase { |
static const char* phase_name() { return "OSR deconstruction"; } |
void Run(PipelineData* data, Zone* temp_zone) { |
+ GraphTrimmer trimmer(temp_zone, data->graph()); |
+ NodeVector roots(temp_zone); |
+ data->jsgraph()->GetCachedNodes(&roots); |
+ trimmer.TrimGraph(roots.begin(), roots.end()); |
+ |
OsrHelper osr_helper(data->info()); |
osr_helper.Deconstruct(data->jsgraph(), data->common(), temp_zone); |
} |
@@ -1496,7 +1518,11 @@ bool PipelineImpl::CreateGraph() { |
// Perform OSR deconstruction. |
if (info()->is_osr()) { |
+ Run<OsrTyperPhase>(); |
+ |
Run<OsrDeconstructionPhase>(); |
+ |
+ Run<UntyperPhase>(); |
RunPrintAndVerify("OSR deconstruction", true); |
} |