Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Side by Side Diff: src/compiler/pipeline.cc

Issue 985023002: [turbofan] Add schedule to visualizer output (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Remove redundant cdoe Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/pipeline.h" 5 #include "src/compiler/pipeline.h"
6 6
7 #include <fstream> // NOLINT(readability/streams) 7 #include <fstream> // NOLINT(readability/streams)
8 #include <sstream> 8 #include <sstream>
9 9
10 #include "src/base/platform/elapsed-timer.h" 10 #include "src/base/platform/elapsed-timer.h"
11 #include "src/bootstrapper.h" // TODO(mstarzinger): Only temporary. 11 #include "src/bootstrapper.h" // TODO(mstarzinger): Only temporary.
12 #include "src/compiler/ast-graph-builder.h" 12 #include "src/compiler/ast-graph-builder.h"
13 #include "src/compiler/ast-loop-assignment-analyzer.h" 13 #include "src/compiler/ast-loop-assignment-analyzer.h"
14 #include "src/compiler/basic-block-instrumentor.h" 14 #include "src/compiler/basic-block-instrumentor.h"
15 #include "src/compiler/change-lowering.h" 15 #include "src/compiler/change-lowering.h"
16 #include "src/compiler/code-generator.h" 16 #include "src/compiler/code-generator.h"
17 #include "src/compiler/common-operator-reducer.h" 17 #include "src/compiler/common-operator-reducer.h"
18 #include "src/compiler/control-flow-optimizer.h" 18 #include "src/compiler/control-flow-optimizer.h"
19 #include "src/compiler/control-reducer.h" 19 #include "src/compiler/control-reducer.h"
20 #include "src/compiler/graph-replay.h" 20 #include "src/compiler/graph-replay.h"
21 #include "src/compiler/graph-visualizer.h"
22 #include "src/compiler/instruction.h" 21 #include "src/compiler/instruction.h"
23 #include "src/compiler/instruction-selector.h" 22 #include "src/compiler/instruction-selector.h"
24 #include "src/compiler/js-builtin-reducer.h" 23 #include "src/compiler/js-builtin-reducer.h"
25 #include "src/compiler/js-context-specialization.h" 24 #include "src/compiler/js-context-specialization.h"
26 #include "src/compiler/js-generic-lowering.h" 25 #include "src/compiler/js-generic-lowering.h"
27 #include "src/compiler/js-inlining.h" 26 #include "src/compiler/js-inlining.h"
28 #include "src/compiler/js-intrinsic-lowering.h" 27 #include "src/compiler/js-intrinsic-lowering.h"
29 #include "src/compiler/js-typed-lowering.h" 28 #include "src/compiler/js-typed-lowering.h"
30 #include "src/compiler/jump-threading.h" 29 #include "src/compiler/jump-threading.h"
31 #include "src/compiler/load-elimination.h" 30 #include "src/compiler/load-elimination.h"
32 #include "src/compiler/loop-analysis.h" 31 #include "src/compiler/loop-analysis.h"
33 #include "src/compiler/loop-peeling.h" 32 #include "src/compiler/loop-peeling.h"
34 #include "src/compiler/machine-operator-reducer.h" 33 #include "src/compiler/machine-operator-reducer.h"
35 #include "src/compiler/move-optimizer.h" 34 #include "src/compiler/move-optimizer.h"
36 #include "src/compiler/osr.h" 35 #include "src/compiler/osr.h"
37 #include "src/compiler/pipeline-statistics.h" 36 #include "src/compiler/pipeline-statistics.h"
38 #include "src/compiler/register-allocator.h" 37 #include "src/compiler/register-allocator.h"
39 #include "src/compiler/register-allocator-verifier.h" 38 #include "src/compiler/register-allocator-verifier.h"
40 #include "src/compiler/schedule.h" 39 #include "src/compiler/schedule.h"
41 #include "src/compiler/scheduler.h" 40 #include "src/compiler/scheduler.h"
42 #include "src/compiler/select-lowering.h" 41 #include "src/compiler/select-lowering.h"
43 #include "src/compiler/simplified-lowering.h" 42 #include "src/compiler/simplified-lowering.h"
44 #include "src/compiler/simplified-operator-reducer.h" 43 #include "src/compiler/simplified-operator-reducer.h"
45 #include "src/compiler/typer.h" 44 #include "src/compiler/typer.h"
46 #include "src/compiler/value-numbering-reducer.h" 45 #include "src/compiler/value-numbering-reducer.h"
47 #include "src/compiler/verifier.h" 46 #include "src/compiler/verifier.h"
47 #include "src/compiler/visualizer.h"
48 #include "src/compiler/zone-pool.h" 48 #include "src/compiler/zone-pool.h"
49 #include "src/ostreams.h" 49 #include "src/ostreams.h"
50 #include "src/utils.h" 50 #include "src/utils.h"
51 51
52 namespace v8 { 52 namespace v8 {
53 namespace internal { 53 namespace internal {
54 namespace compiler { 54 namespace compiler {
55 55
56 class PipelineData { 56 class PipelineData {
57 public: 57 public:
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 }; 277 };
278 278
279 279
280 struct TurboCfgFile : public std::ofstream { 280 struct TurboCfgFile : public std::ofstream {
281 explicit TurboCfgFile(Isolate* isolate) 281 explicit TurboCfgFile(Isolate* isolate)
282 : std::ofstream(isolate->GetTurboCfgFileName().c_str(), 282 : std::ofstream(isolate->GetTurboCfgFileName().c_str(),
283 std::ios_base::app) {} 283 std::ios_base::app) {}
284 }; 284 };
285 285
286 286
287 static void TraceSchedule(Schedule* schedule) { 287 static void TraceSchedule(CompilationInfo* info,
288 SourcePositionTable* source_positions,
289 Schedule* schedule) {
290 if (FLAG_trace_turbo) {
291 FILE* json_file = OpenVisualizerLogFile(info, NULL, "json", "a+");
292 if (json_file != nullptr) {
293 OFStream json_of(json_file);
294 json_of << "{\"name\":\"Schedule\",\"type\":\"schedule\",\"data\":\"";
295 std::stringstream schedule_stream;
296 schedule_stream << ScheduleAsJSON(*schedule, source_positions);
297 std::string schedule_string(schedule_stream.str());
298 for (const auto& c : schedule_string) {
299 json_of << AsEscapedUC16ForJSON(c);
300 }
301 json_of << "\"},\n";
302 fclose(json_file);
303 }
304 }
288 if (!FLAG_trace_turbo_graph && !FLAG_trace_turbo_scheduler) return; 305 if (!FLAG_trace_turbo_graph && !FLAG_trace_turbo_scheduler) return;
289 OFStream os(stdout); 306 OFStream os(stdout);
290 os << "-- Schedule --------------------------------------\n" << *schedule; 307 os << "-- Schedule --------------------------------------\n"
308 << ScheduleAsJSON(*schedule);
291 } 309 }
292 310
293 311
294 static SmartArrayPointer<char> GetDebugName(CompilationInfo* info) { 312 static SmartArrayPointer<char> GetDebugName(CompilationInfo* info) {
295 SmartArrayPointer<char> name; 313 SmartArrayPointer<char> name;
296 if (info->IsStub()) { 314 if (info->IsStub()) {
297 if (info->code_stub() != NULL) { 315 if (info->code_stub() != NULL) {
298 CodeStub::Major major_key = info->code_stub()->MajorKey(); 316 CodeStub::Major major_key = info->code_stub()->MajorKey();
299 const char* major_name = CodeStub::MajorName(major_key, false); 317 const char* major_name = CodeStub::MajorName(major_key, false);
300 size_t len = strlen(major_name); 318 size_t len = strlen(major_name);
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 OFStream dot_of(dot_file); 796 OFStream dot_of(dot_file);
779 dot_of << AsDOT(*graph); 797 dot_of << AsDOT(*graph);
780 fclose(dot_file); 798 fclose(dot_file);
781 } 799 }
782 800
783 { // Print JSON. 801 { // Print JSON.
784 FILE* json_file = OpenVisualizerLogFile(info, NULL, "json", "a+"); 802 FILE* json_file = OpenVisualizerLogFile(info, NULL, "json", "a+");
785 if (json_file == nullptr) return; 803 if (json_file == nullptr) return;
786 OFStream json_of(json_file); 804 OFStream json_of(json_file);
787 json_of << "{\"name\":\"" << phase << "\",\"type\":\"graph\",\"data\":" 805 json_of << "{\"name\":\"" << phase << "\",\"type\":\"graph\",\"data\":"
788 << AsJSON(*graph, data->source_positions()) << "},\n"; 806 << GraphAsJSON(*graph, data->source_positions()) << "},\n";
789 fclose(json_file); 807 fclose(json_file);
790 } 808 }
791 809
792 if (FLAG_trace_turbo_graph) { // Simple textual RPO. 810 if (FLAG_trace_turbo_graph) { // Simple textual RPO.
793 OFStream os(stdout); 811 OFStream os(stdout);
794 os << "-- Graph after " << phase << " -- " << std::endl; 812 os << "-- Graph after " << phase << " -- " << std::endl;
795 os << AsRPO(*graph); 813 os << AsRPO(*graph);
796 } 814 }
797 } 815 }
798 }; 816 };
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 1063
1046 1064
1047 Handle<Code> Pipeline::ScheduleAndGenerateCode( 1065 Handle<Code> Pipeline::ScheduleAndGenerateCode(
1048 CallDescriptor* call_descriptor) { 1066 CallDescriptor* call_descriptor) {
1049 PipelineData* data = this->data_; 1067 PipelineData* data = this->data_;
1050 1068
1051 DCHECK_NOT_NULL(data->graph()); 1069 DCHECK_NOT_NULL(data->graph());
1052 CHECK(SupportedBackend()); 1070 CHECK(SupportedBackend());
1053 1071
1054 if (data->schedule() == nullptr) Run<ComputeSchedulePhase>(); 1072 if (data->schedule() == nullptr) Run<ComputeSchedulePhase>();
1055 TraceSchedule(data->schedule()); 1073 TraceSchedule(data->info(), data->source_positions(), data->schedule());
1056 1074
1057 BasicBlockProfiler::Data* profiler_data = NULL; 1075 BasicBlockProfiler::Data* profiler_data = NULL;
1058 if (FLAG_turbo_profiling) { 1076 if (FLAG_turbo_profiling) {
1059 profiler_data = BasicBlockInstrumentor::Instrument(info(), data->graph(), 1077 profiler_data = BasicBlockInstrumentor::Instrument(info(), data->graph(),
1060 data->schedule()); 1078 data->schedule());
1061 } 1079 }
1062 1080
1063 data->InitializeInstructionSequence(); 1081 data->InitializeInstructionSequence();
1064 1082
1065 // Select and schedule instructions covering the scheduled graph. 1083 // Select and schedule instructions covering the scheduled graph.
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1197 1215
1198 if (FLAG_trace_turbo && !data->MayHaveUnverifiableGraph()) { 1216 if (FLAG_trace_turbo && !data->MayHaveUnverifiableGraph()) {
1199 TurboCfgFile tcf(data->isolate()); 1217 TurboCfgFile tcf(data->isolate());
1200 tcf << AsC1VAllocator("CodeGen", data->register_allocator()); 1218 tcf << AsC1VAllocator("CodeGen", data->register_allocator());
1201 } 1219 }
1202 } 1220 }
1203 1221
1204 } // namespace compiler 1222 } // namespace compiler
1205 } // namespace internal 1223 } // namespace internal
1206 } // namespace v8 1224 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/osr.cc ('k') | src/compiler/schedule.h » ('j') | src/compiler/visualizer.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698