Chromium Code Reviews| Index: src/compiler/pipeline.cc |
| diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc |
| index 9889b6a030263faa6f63b393f5fed994319ad269..e7cd7ec21d14d9b3620262fdad5e0aa6c986ebaa 100644 |
| --- a/src/compiler/pipeline.cc |
| +++ b/src/compiler/pipeline.cc |
| @@ -6,6 +6,7 @@ |
| #include "src/base/platform/elapsed-timer.h" |
| #include "src/compiler/ast-graph-builder.h" |
| +#include "src/compiler/basic-block-instrumentor.h" |
| #include "src/compiler/change-lowering.h" |
| #include "src/compiler/code-generator.h" |
| #include "src/compiler/graph-replay.h" |
| @@ -302,6 +303,8 @@ Handle<Code> Pipeline::GenerateCode() { |
| VerifyAndPrintGraph(&graph, "Lowered generic"); |
| } |
| + source_positions.RemoveDecorator(); |
| + |
| { |
| // Compute a schedule. |
| Schedule* schedule = ComputeSchedule(&graph); |
| @@ -368,6 +371,11 @@ Handle<Code> Pipeline::GenerateCode(Linkage* linkage, Graph* graph, |
| DCHECK_NOT_NULL(schedule); |
| CHECK(SupportedBackend()); |
| + BasicBlockProfiler::Data* profiler_data = NULL; |
| + if (FLAG_turbo_profiling) { |
| + profiler_data = BasicBlockInstrumentor::Instrument(info_, graph, schedule); |
| + } |
| + |
| InstructionSequence sequence(linkage, graph, schedule); |
| // Select and schedule instructions covering the scheduled graph. |
| @@ -404,7 +412,15 @@ Handle<Code> Pipeline::GenerateCode(Linkage* linkage, Graph* graph, |
| // Generate native sequence. |
| CodeGenerator generator(&sequence); |
| - return generator.GenerateCode(); |
| + Handle<Code> code = generator.GenerateCode(); |
| + if (profiler_data != NULL) { |
| +#if ENABLE_DISASSEMBLER |
| + OStringStream os; |
| + code->Disassemble(NULL, os); |
|
titzer
2014/09/24 14:59:31
Why do we need to eagerly disassemble the code?
dcarney
2014/09/25 08:15:15
there's no heap pointers kept alive in the profile
|
| + profiler_data->SetCode(&os); |
| +#endif |
| + } |
| + return code; |
| } |