| Index: src/compiler/pipeline.cc
|
| diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc
|
| index df8673797a0ce7eb888078c91291fb01951d17e6..8c995616fe7e6a9a3ea419a25054ee33c7039d2f 100644
|
| --- a/src/compiler/pipeline.cc
|
| +++ b/src/compiler/pipeline.cc
|
| @@ -30,6 +30,7 @@
|
| #include "src/compiler/typer.h"
|
| #include "src/compiler/value-numbering-reducer.h"
|
| #include "src/compiler/verifier.h"
|
| +#include "src/compiler/zone-pool.h"
|
| #include "src/hydrogen.h"
|
| #include "src/ostreams.h"
|
| #include "src/utils.h"
|
| @@ -42,20 +43,24 @@ class PhaseStats {
|
| public:
|
| enum PhaseKind { CREATE_GRAPH, OPTIMIZATION, CODEGEN };
|
|
|
| - PhaseStats(CompilationInfo* info, PhaseKind kind, const char* name)
|
| + PhaseStats(CompilationInfo* info, ZonePool* zone_pool, PhaseKind kind,
|
| + const char* name)
|
| : info_(info),
|
| + stats_scope_(zone_pool),
|
| kind_(kind),
|
| name_(name),
|
| - size_(info->zone()->allocation_size()) {
|
| + size_(0) {
|
| if (FLAG_turbo_stats) {
|
| timer_.Start();
|
| + size_ = info_->zone()->allocation_size();
|
| }
|
| }
|
|
|
| ~PhaseStats() {
|
| if (FLAG_turbo_stats) {
|
| base::TimeDelta delta = timer_.Elapsed();
|
| - size_t bytes = info_->zone()->allocation_size() - size_;
|
| + size_t bytes = info_->zone()->allocation_size() +
|
| + stats_scope_.GetMaxAllocatedBytes() - size_;
|
| HStatistics* stats = info_->isolate()->GetTStatistics();
|
| stats->SaveTiming(name_, delta, static_cast<int>(bytes));
|
|
|
| @@ -75,6 +80,7 @@ class PhaseStats {
|
|
|
| private:
|
| CompilationInfo* info_;
|
| + ZonePool::StatsScope stats_scope_;
|
| PhaseKind kind_;
|
| const char* name_;
|
| size_t size_;
|
| @@ -229,6 +235,8 @@ Handle<Code> Pipeline::GenerateCode() {
|
| PrintCompilationStart();
|
| }
|
|
|
| + ZonePool zone_pool(isolate());
|
| +
|
| // Build the graph.
|
| Graph graph(zone());
|
| SourcePositionTable source_positions(&graph);
|
| @@ -243,7 +251,7 @@ Handle<Code> Pipeline::GenerateCode() {
|
| JSGraph jsgraph(&graph, &common, &javascript, &machine);
|
| Node* context_node;
|
| {
|
| - PhaseStats graph_builder_stats(info(), PhaseStats::CREATE_GRAPH,
|
| + PhaseStats graph_builder_stats(info(), &zone_pool, PhaseStats::CREATE_GRAPH,
|
| "graph builder");
|
| AstGraphBuilderWithPositions graph_builder(info(), &jsgraph,
|
| &source_positions);
|
| @@ -251,7 +259,7 @@ Handle<Code> Pipeline::GenerateCode() {
|
| context_node = graph_builder.GetFunctionContext();
|
| }
|
| {
|
| - PhaseStats phi_reducer_stats(info(), PhaseStats::CREATE_GRAPH,
|
| + PhaseStats phi_reducer_stats(info(), &zone_pool, PhaseStats::CREATE_GRAPH,
|
| "phi reduction");
|
| PhiReducer phi_reducer;
|
| GraphReducer graph_reducer(&graph);
|
| @@ -292,13 +300,14 @@ Handle<Code> Pipeline::GenerateCode() {
|
| if (info()->is_typing_enabled()) {
|
| {
|
| // Type the graph.
|
| - PhaseStats typer_stats(info(), PhaseStats::CREATE_GRAPH, "typer");
|
| + PhaseStats typer_stats(info(), &zone_pool, PhaseStats::CREATE_GRAPH,
|
| + "typer");
|
| typer.Run();
|
| VerifyAndPrintGraph(&graph, "Typed");
|
| }
|
| {
|
| // Lower JSOperators where we can determine types.
|
| - PhaseStats lowering_stats(info(), PhaseStats::CREATE_GRAPH,
|
| + PhaseStats lowering_stats(info(), &zone_pool, PhaseStats::CREATE_GRAPH,
|
| "typed lowering");
|
| SourcePositionTable::Scope pos(&source_positions,
|
| SourcePosition::Unknown());
|
| @@ -315,7 +324,7 @@ Handle<Code> Pipeline::GenerateCode() {
|
| }
|
| {
|
| // Lower simplified operators and insert changes.
|
| - PhaseStats lowering_stats(info(), PhaseStats::CREATE_GRAPH,
|
| + PhaseStats lowering_stats(info(), &zone_pool, PhaseStats::CREATE_GRAPH,
|
| "simplified lowering");
|
| SourcePositionTable::Scope pos(&source_positions,
|
| SourcePosition::Unknown());
|
| @@ -332,7 +341,7 @@ Handle<Code> Pipeline::GenerateCode() {
|
| }
|
| {
|
| // Lower changes that have been inserted before.
|
| - PhaseStats lowering_stats(info(), PhaseStats::OPTIMIZATION,
|
| + PhaseStats lowering_stats(info(), &zone_pool, PhaseStats::OPTIMIZATION,
|
| "change lowering");
|
| SourcePositionTable::Scope pos(&source_positions,
|
| SourcePosition::Unknown());
|
| @@ -356,8 +365,8 @@ Handle<Code> Pipeline::GenerateCode() {
|
| {
|
| SourcePositionTable::Scope pos(&source_positions,
|
| SourcePosition::Unknown());
|
| - PhaseStats control_reducer_stats(info(), PhaseStats::CREATE_GRAPH,
|
| - "control reduction");
|
| + PhaseStats control_reducer_stats(
|
| + info(), &zone_pool, PhaseStats::CREATE_GRAPH, "control reduction");
|
| ControlReducer::ReduceGraph(&jsgraph, &common);
|
|
|
| VerifyAndPrintGraph(&graph, "Control reduced");
|
| @@ -366,7 +375,7 @@ Handle<Code> Pipeline::GenerateCode() {
|
|
|
| {
|
| // Lower any remaining generic JSOperators.
|
| - PhaseStats lowering_stats(info(), PhaseStats::CREATE_GRAPH,
|
| + PhaseStats lowering_stats(info(), &zone_pool, PhaseStats::CREATE_GRAPH,
|
| "generic lowering");
|
| SourcePositionTable::Scope pos(&source_positions,
|
| SourcePosition::Unknown());
|
| @@ -384,9 +393,10 @@ Handle<Code> Pipeline::GenerateCode() {
|
| Handle<Code> code = Handle<Code>::null();
|
| {
|
| // Compute a schedule.
|
| - Schedule* schedule = ComputeSchedule(&graph);
|
| + Schedule* schedule = ComputeSchedule(&zone_pool, &graph);
|
| // Generate optimized code.
|
| - PhaseStats codegen_stats(info(), PhaseStats::CODEGEN, "codegen");
|
| + PhaseStats codegen_stats(info(), &zone_pool, PhaseStats::CODEGEN,
|
| + "codegen");
|
| Linkage linkage(info());
|
| code = GenerateCode(&linkage, &graph, schedule, &source_positions);
|
| info()->SetCode(code);
|
| @@ -407,9 +417,10 @@ Handle<Code> Pipeline::GenerateCode() {
|
| }
|
|
|
|
|
| -Schedule* Pipeline::ComputeSchedule(Graph* graph) {
|
| - PhaseStats schedule_stats(info(), PhaseStats::CODEGEN, "scheduling");
|
| - Schedule* schedule = Scheduler::ComputeSchedule(graph);
|
| +Schedule* Pipeline::ComputeSchedule(ZonePool* zone_pool, Graph* graph) {
|
| + PhaseStats schedule_stats(info(), zone_pool, PhaseStats::CODEGEN,
|
| + "scheduling");
|
| + Schedule* schedule = Scheduler::ComputeSchedule(zone_pool, graph);
|
| TraceSchedule(schedule);
|
| if (VerifyGraphs()) ScheduleVerifier::Run(schedule);
|
| return schedule;
|
| @@ -423,7 +434,8 @@ Handle<Code> Pipeline::GenerateCodeForMachineGraph(Linkage* linkage,
|
| if (schedule == NULL) {
|
| // TODO(rossberg): Should this really be untyped?
|
| VerifyAndPrintGraph(graph, "Machine", true);
|
| - schedule = ComputeSchedule(graph);
|
| + ZonePool zone_pool(isolate());
|
| + schedule = ComputeSchedule(&zone_pool, graph);
|
| }
|
| TraceSchedule(schedule);
|
|
|
|
|