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); |
+ profiler_data->SetCode(&os); |
+#endif |
+ } |
+ return code; |
} |