| OLD | NEW |
| 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" |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 InstructionSelector::SupportedMachineOperatorFlags()); | 84 InstructionSelector::SupportedMachineOperatorFlags()); |
| 85 common_ = new (graph_zone()) CommonOperatorBuilder(graph_zone()); | 85 common_ = new (graph_zone()) CommonOperatorBuilder(graph_zone()); |
| 86 javascript_ = new (graph_zone()) JSOperatorBuilder(graph_zone()); | 86 javascript_ = new (graph_zone()) JSOperatorBuilder(graph_zone()); |
| 87 jsgraph_ = | 87 jsgraph_ = |
| 88 new (graph_zone()) JSGraph(graph(), common(), javascript(), machine()); | 88 new (graph_zone()) JSGraph(graph(), common(), javascript(), machine()); |
| 89 typer_.Reset(new Typer(graph(), info()->context())); | 89 typer_.Reset(new Typer(graph(), info()->context())); |
| 90 instruction_zone_ = instruction_zone_scope_.zone(); | 90 instruction_zone_ = instruction_zone_scope_.zone(); |
| 91 } | 91 } |
| 92 | 92 |
| 93 // For machine graph testing entry point. | 93 // For machine graph testing entry point. |
| 94 void Initialize(Graph* graph, Schedule* schedule) { | 94 void InitializeTorTesting(Graph* graph, Schedule* schedule) { |
| 95 graph_ = graph; | 95 graph_ = graph; |
| 96 source_positions_.Reset(new SourcePositionTable(graph)); | 96 source_positions_.Reset(new SourcePositionTable(graph)); |
| 97 schedule_ = schedule; | 97 schedule_ = schedule; |
| 98 instruction_zone_ = instruction_zone_scope_.zone(); | 98 instruction_zone_ = instruction_zone_scope_.zone(); |
| 99 } | 99 } |
| 100 | 100 |
| 101 // For register allocation entry point. | 101 // For register allocation testing entry point. |
| 102 void Initialize(InstructionSequence* sequence) { | 102 void InitializeTorTesting(InstructionSequence* sequence) { |
| 103 instruction_zone_ = sequence->zone(); | 103 instruction_zone_ = sequence->zone(); |
| 104 sequence_ = sequence; | 104 sequence_ = sequence; |
| 105 } | 105 } |
| 106 | 106 |
| 107 Isolate* isolate() const { return isolate_; } | 107 Isolate* isolate() const { return isolate_; } |
| 108 CompilationInfo* info() const { return info_; } | 108 CompilationInfo* info() const { return info_; } |
| 109 ZonePool* zone_pool() const { return zone_pool_; } | 109 ZonePool* zone_pool() const { return zone_pool_; } |
| 110 PipelineStatistics* pipeline_statistics() { return pipeline_statistics_; } | 110 PipelineStatistics* pipeline_statistics() { return pipeline_statistics_; } |
| 111 bool compilation_failed() const { return compilation_failed_; } | 111 bool compilation_failed() const { return compilation_failed_; } |
| 112 void set_compilation_failed() { compilation_failed_ = true; } | 112 void set_compilation_failed() { compilation_failed_ = true; } |
| (...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 771 OFStream os(stdout); | 771 OFStream os(stdout); |
| 772 os << "--------------------------------------------------\n" | 772 os << "--------------------------------------------------\n" |
| 773 << "Finished compiling method " << GetDebugName(info()).get() | 773 << "Finished compiling method " << GetDebugName(info()).get() |
| 774 << " using Turbofan" << std::endl; | 774 << " using Turbofan" << std::endl; |
| 775 } | 775 } |
| 776 | 776 |
| 777 return code; | 777 return code; |
| 778 } | 778 } |
| 779 | 779 |
| 780 | 780 |
| 781 Handle<Code> Pipeline::GenerateCodeForMachineGraph(Linkage* linkage, | 781 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info, |
| 782 Graph* graph, | 782 Graph* graph, |
| 783 Schedule* schedule) { | 783 Schedule* schedule) { |
| 784 ZonePool zone_pool(isolate()); | 784 CallDescriptor* call_descriptor = |
| 785 Linkage::ComputeIncoming(info->zone(), info); |
| 786 return GenerateCodeForTesting(info, call_descriptor, graph, schedule); |
| 787 } |
| 788 |
| 789 |
| 790 Handle<Code> Pipeline::GenerateCodeForTesting(CallDescriptor* call_descriptor, |
| 791 Graph* graph, |
| 792 Schedule* schedule) { |
| 793 CompilationInfo info(graph->zone()->isolate(), graph->zone()); |
| 794 return GenerateCodeForTesting(&info, call_descriptor, graph, schedule); |
| 795 } |
| 796 |
| 797 |
| 798 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info, |
| 799 CallDescriptor* call_descriptor, |
| 800 Graph* graph, |
| 801 Schedule* schedule) { |
| 785 CHECK(SupportedBackend()); | 802 CHECK(SupportedBackend()); |
| 786 PipelineData data(&zone_pool, info()); | 803 ZonePool zone_pool(info->isolate()); |
| 787 data.Initialize(graph, schedule); | 804 Pipeline pipeline(info); |
| 788 this->data_ = &data; | 805 PipelineData data(&zone_pool, info); |
| 806 pipeline.data_ = &data; |
| 807 data.InitializeTorTesting(graph, schedule); |
| 789 if (schedule == NULL) { | 808 if (schedule == NULL) { |
| 790 // TODO(rossberg): Should this really be untyped? | 809 // TODO(rossberg): Should this really be untyped? |
| 791 RunPrintAndVerify("Machine", true); | 810 pipeline.RunPrintAndVerify("Machine", true); |
| 792 Run<ComputeSchedulePhase>(); | 811 pipeline.Run<ComputeSchedulePhase>(); |
| 793 } else { | 812 } else { |
| 794 TraceSchedule(schedule); | 813 TraceSchedule(schedule); |
| 795 } | 814 } |
| 796 | 815 |
| 797 GenerateCode(linkage); | 816 Linkage linkage(info->zone(), call_descriptor); |
| 817 pipeline.GenerateCode(&linkage); |
| 798 Handle<Code> code = data.code(); | 818 Handle<Code> code = data.code(); |
| 799 | 819 |
| 800 #if ENABLE_DISASSEMBLER | 820 #if ENABLE_DISASSEMBLER |
| 801 if (!code.is_null() && FLAG_print_opt_code) { | 821 if (!code.is_null() && FLAG_print_opt_code) { |
| 802 CodeTracer::Scope tracing_scope(isolate()->GetCodeTracer()); | 822 CodeTracer::Scope tracing_scope(info->isolate()->GetCodeTracer()); |
| 803 OFStream os(tracing_scope.file()); | 823 OFStream os(tracing_scope.file()); |
| 804 code->Disassemble("test code", os); | 824 code->Disassemble("test code", os); |
| 805 } | 825 } |
| 806 #endif | 826 #endif |
| 807 return code; | 827 return code; |
| 808 } | 828 } |
| 809 | 829 |
| 810 | 830 |
| 811 bool Pipeline::AllocateRegisters(const RegisterConfiguration* config, | 831 bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config, |
| 812 InstructionSequence* sequence, | 832 InstructionSequence* sequence, |
| 813 bool run_verifier) { | 833 bool run_verifier) { |
| 814 CompilationInfo info(sequence->zone()->isolate(), sequence->zone()); | 834 CompilationInfo info(sequence->zone()->isolate(), sequence->zone()); |
| 815 ZonePool zone_pool(sequence->zone()->isolate()); | 835 ZonePool zone_pool(sequence->zone()->isolate()); |
| 816 PipelineData data(&zone_pool, &info); | 836 PipelineData data(&zone_pool, &info); |
| 817 data.Initialize(sequence); | 837 data.InitializeTorTesting(sequence); |
| 818 Pipeline pipeline(&info); | 838 Pipeline pipeline(&info); |
| 819 pipeline.data_ = &data; | 839 pipeline.data_ = &data; |
| 820 pipeline.AllocateRegisters(config, run_verifier); | 840 pipeline.AllocateRegisters(config, run_verifier); |
| 821 return !data.compilation_failed(); | 841 return !data.compilation_failed(); |
| 822 } | 842 } |
| 823 | 843 |
| 824 | 844 |
| 825 void Pipeline::GenerateCode(Linkage* linkage) { | 845 void Pipeline::GenerateCode(Linkage* linkage) { |
| 826 PipelineData* data = this->data_; | 846 PipelineData* data = this->data_; |
| 827 | 847 |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 953 } | 973 } |
| 954 | 974 |
| 955 | 975 |
| 956 void Pipeline::TearDown() { | 976 void Pipeline::TearDown() { |
| 957 InstructionOperand::TearDownCaches(); | 977 InstructionOperand::TearDownCaches(); |
| 958 } | 978 } |
| 959 | 979 |
| 960 } // namespace compiler | 980 } // namespace compiler |
| 961 } // namespace internal | 981 } // namespace internal |
| 962 } // namespace v8 | 982 } // namespace v8 |
| OLD | NEW |