Index: src/compiler/pipeline.cc |
diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc |
index 7b74592cdca6d48188aface5e091dd48a2b963d3..84995be5970643168447e8af529c49bbe6aeadf8 100644 |
--- a/src/compiler/pipeline.cc |
+++ b/src/compiler/pipeline.cc |
@@ -79,7 +79,6 @@ class PipelineData { |
javascript_(nullptr), |
jsgraph_(nullptr), |
js_type_feedback_(nullptr), |
- typer_(nullptr), |
schedule_(nullptr), |
instruction_zone_scope_(zone_pool_), |
instruction_zone_(instruction_zone_scope_.zone()), |
@@ -98,7 +97,6 @@ class PipelineData { |
javascript_ = new (graph_zone_) JSOperatorBuilder(graph_zone_); |
jsgraph_ = new (graph_zone_) |
JSGraph(isolate_, graph_, common_, javascript_, machine_); |
- typer_.Reset(new Typer(isolate_, graph_, info_->context())); |
} |
// For machine graph testing entry point. |
@@ -121,7 +119,6 @@ class PipelineData { |
javascript_(nullptr), |
jsgraph_(nullptr), |
js_type_feedback_(nullptr), |
- typer_(nullptr), |
schedule_(schedule), |
instruction_zone_scope_(zone_pool_), |
instruction_zone_(instruction_zone_scope_.zone()), |
@@ -150,7 +147,6 @@ class PipelineData { |
javascript_(nullptr), |
jsgraph_(nullptr), |
js_type_feedback_(nullptr), |
- typer_(nullptr), |
schedule_(nullptr), |
instruction_zone_scope_(zone_pool_), |
instruction_zone_(sequence->zone()), |
@@ -194,7 +190,6 @@ class PipelineData { |
void set_js_type_feedback(JSTypeFeedbackTable* js_type_feedback) { |
js_type_feedback_ = js_type_feedback; |
} |
- Typer* typer() const { return typer_.get(); } |
LoopAssignmentAnalysis* loop_assignment() const { return loop_assignment_; } |
void set_loop_assignment(LoopAssignmentAnalysis* loop_assignment) { |
@@ -220,7 +215,6 @@ class PipelineData { |
void DeleteGraphZone() { |
// Destroy objects with destructors first. |
source_positions_.Reset(nullptr); |
- typer_.Reset(nullptr); |
if (graph_zone_ == nullptr) return; |
// Destroy zone and clear pointers. |
graph_zone_scope_.Destroy(); |
@@ -291,8 +285,6 @@ class PipelineData { |
JSOperatorBuilder* javascript_; |
JSGraph* jsgraph_; |
JSTypeFeedbackTable* js_type_feedback_; |
- // TODO(dcarney): make this into a ZoneObject. |
- SmartPointer<Typer> typer_; |
Schedule* schedule_; |
// All objects in the following group of fields are allocated in |
@@ -524,7 +516,11 @@ struct InliningPhase { |
struct TyperPhase { |
static const char* phase_name() { return "typer"; } |
- void Run(PipelineData* data, Zone* temp_zone) { data->typer()->Run(); } |
+ void Run(PipelineData* data, Zone* temp_zone, Typer* typer) { |
+ NodeVector roots(temp_zone); |
+ data->jsgraph()->GetCachedNodes(&roots); |
+ typer->Run(roots); |
+ } |
}; |
@@ -1058,9 +1054,11 @@ Handle<Code> Pipeline::GenerateCode() { |
// Bailout here in case target architecture is not supported. |
if (!SupportedTarget()) return Handle<Code>::null(); |
+ SmartPointer<Typer> typer; |
if (info()->is_typing_enabled()) { |
// Type the graph. |
- Run<TyperPhase>(); |
+ typer.Reset(new Typer(isolate(), data.graph(), info()->context())); |
+ Run<TyperPhase>(typer.get()); |
RunPrintAndVerify("Typed"); |
} |
@@ -1073,7 +1071,7 @@ Handle<Code> Pipeline::GenerateCode() { |
if (FLAG_turbo_stress_loop_peeling) { |
Run<StressLoopPeelingPhase>(); |
- RunPrintAndVerify("Loop peeled", true); |
+ RunPrintAndVerify("Loop peeled"); |
} |
if (info()->is_osr()) { |
@@ -1107,7 +1105,7 @@ Handle<Code> Pipeline::GenerateCode() { |
if (info()->is_osr()) { |
Run<OsrDeconstructionPhase>(); |
if (info()->bailout_reason() != kNoReason) return Handle<Code>::null(); |
- RunPrintAndVerify("OSR deconstruction"); |
+ RunPrintAndVerify("OSR deconstruction", true); |
} |
} |
@@ -1124,6 +1122,9 @@ Handle<Code> Pipeline::GenerateCode() { |
data.source_positions()->RemoveDecorator(); |
+ // Kill the Typer and thereby uninstall the decorator (if any). |
+ typer.Reset(nullptr); |
+ |
return ScheduleAndGenerateCode( |
Linkage::ComputeIncoming(data.instruction_zone(), info())); |
} |