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

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

Issue 868883002: Remove the dependency of Zone on Isolate (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix compilation issues Created 5 years, 11 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
« no previous file with comments | « src/compiler/pipeline.h ('k') | src/compiler/pipeline-statistics.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 #include "src/ostreams.h" 47 #include "src/ostreams.h"
48 #include "src/utils.h" 48 #include "src/utils.h"
49 49
50 namespace v8 { 50 namespace v8 {
51 namespace internal { 51 namespace internal {
52 namespace compiler { 52 namespace compiler {
53 53
54 class PipelineData { 54 class PipelineData {
55 public: 55 public:
56 explicit PipelineData(ZonePool* zone_pool, CompilationInfo* info) 56 explicit PipelineData(ZonePool* zone_pool, CompilationInfo* info)
57 : isolate_(info->zone()->isolate()), 57 : isolate_(info->isolate()),
58 info_(info), 58 info_(info),
59 outer_zone_(nullptr), 59 outer_zone_(nullptr),
60 zone_pool_(zone_pool), 60 zone_pool_(zone_pool),
61 pipeline_statistics_(nullptr), 61 pipeline_statistics_(nullptr),
62 compilation_failed_(false), 62 compilation_failed_(false),
63 code_(Handle<Code>::null()), 63 code_(Handle<Code>::null()),
64 graph_zone_scope_(zone_pool_), 64 graph_zone_scope_(zone_pool_),
65 graph_zone_(nullptr), 65 graph_zone_(nullptr),
66 graph_(nullptr), 66 graph_(nullptr),
67 loop_assignment_(nullptr), 67 loop_assignment_(nullptr),
(...skipping 21 matching lines...) Expand all
89 outer_zone_ = info()->zone(); 89 outer_zone_ = info()->zone();
90 pipeline_statistics_ = pipeline_statistics; 90 pipeline_statistics_ = pipeline_statistics;
91 graph_zone_ = graph_zone_scope_.zone(); 91 graph_zone_ = graph_zone_scope_.zone();
92 graph_ = new (graph_zone()) Graph(graph_zone()); 92 graph_ = new (graph_zone()) Graph(graph_zone());
93 source_positions_.Reset(new SourcePositionTable(graph())); 93 source_positions_.Reset(new SourcePositionTable(graph()));
94 machine_ = new (graph_zone()) MachineOperatorBuilder( 94 machine_ = new (graph_zone()) MachineOperatorBuilder(
95 graph_zone(), kMachPtr, 95 graph_zone(), kMachPtr,
96 InstructionSelector::SupportedMachineOperatorFlags()); 96 InstructionSelector::SupportedMachineOperatorFlags());
97 common_ = new (graph_zone()) CommonOperatorBuilder(graph_zone()); 97 common_ = new (graph_zone()) CommonOperatorBuilder(graph_zone());
98 javascript_ = new (graph_zone()) JSOperatorBuilder(graph_zone()); 98 javascript_ = new (graph_zone()) JSOperatorBuilder(graph_zone());
99 jsgraph_ = 99 jsgraph_ = new (graph_zone())
100 new (graph_zone()) JSGraph(graph(), common(), javascript(), machine()); 100 JSGraph(info()->isolate(), graph(), common(), javascript(), machine());
101 typer_.Reset(new Typer(graph(), info()->context())); 101 typer_.Reset(new Typer(info()->isolate(), graph(), info()->context()));
102 instruction_zone_ = instruction_zone_scope_.zone(); 102 instruction_zone_ = instruction_zone_scope_.zone();
103 } 103 }
104 104
105 // For machine graph testing entry point. 105 // For machine graph testing entry point.
106 void InitializeTorTesting(Graph* graph, Schedule* schedule) { 106 void InitializeTorTesting(Graph* graph, Schedule* schedule) {
107 graph_ = graph; 107 graph_ = graph;
108 source_positions_.Reset(new SourcePositionTable(graph)); 108 source_positions_.Reset(new SourcePositionTable(graph));
109 schedule_ = schedule; 109 schedule_ = schedule;
110 instruction_zone_ = instruction_zone_scope_.zone(); 110 instruction_zone_ = instruction_zone_scope_.zone();
111 } 111 }
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 sequence_ = nullptr; 190 sequence_ = nullptr;
191 frame_ = nullptr; 191 frame_ = nullptr;
192 register_allocator_ = nullptr; 192 register_allocator_ = nullptr;
193 } 193 }
194 194
195 void InitializeInstructionSequence() { 195 void InitializeInstructionSequence() {
196 DCHECK_EQ(nullptr, sequence_); 196 DCHECK_EQ(nullptr, sequence_);
197 InstructionBlocks* instruction_blocks = 197 InstructionBlocks* instruction_blocks =
198 InstructionSequence::InstructionBlocksFor(instruction_zone(), 198 InstructionSequence::InstructionBlocksFor(instruction_zone(),
199 schedule()); 199 schedule());
200 sequence_ = new (instruction_zone()) 200 sequence_ = new (instruction_zone()) InstructionSequence(
201 InstructionSequence(instruction_zone(), instruction_blocks); 201 info()->isolate(), instruction_zone(), instruction_blocks);
202 } 202 }
203 203
204 void InitializeRegisterAllocator(Zone* local_zone, 204 void InitializeRegisterAllocator(Zone* local_zone,
205 const RegisterConfiguration* config, 205 const RegisterConfiguration* config,
206 const char* debug_name) { 206 const char* debug_name) {
207 DCHECK_EQ(nullptr, register_allocator_); 207 DCHECK_EQ(nullptr, register_allocator_);
208 DCHECK_EQ(nullptr, frame_); 208 DCHECK_EQ(nullptr, frame_);
209 frame_ = new (instruction_zone()) Frame(); 209 frame_ = new (instruction_zone()) Frame();
210 register_allocator_ = new (instruction_zone()) 210 register_allocator_ = new (instruction_zone())
211 RegisterAllocator(config, local_zone, frame(), sequence(), debug_name); 211 RegisterAllocator(config, local_zone, frame(), sequence(), debug_name);
(...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 // the correct solution is to restore the context register after invoking 778 // the correct solution is to restore the context register after invoking
779 // builtins from full-codegen. 779 // builtins from full-codegen.
780 Handle<SharedFunctionInfo> shared = info()->shared_info(); 780 Handle<SharedFunctionInfo> shared = info()->shared_info();
781 if (isolate()->bootstrapper()->IsActive() || 781 if (isolate()->bootstrapper()->IsActive() ||
782 shared->disable_optimization_reason() == 782 shared->disable_optimization_reason() ==
783 kBuiltinFunctionCannotBeOptimized) { 783 kBuiltinFunctionCannotBeOptimized) {
784 shared->DisableOptimization(kBuiltinFunctionCannotBeOptimized); 784 shared->DisableOptimization(kBuiltinFunctionCannotBeOptimized);
785 return Handle<Code>::null(); 785 return Handle<Code>::null();
786 } 786 }
787 787
788 ZonePool zone_pool(isolate()); 788 ZonePool zone_pool;
789 SmartPointer<PipelineStatistics> pipeline_statistics; 789 SmartPointer<PipelineStatistics> pipeline_statistics;
790 790
791 if (FLAG_turbo_stats) { 791 if (FLAG_turbo_stats) {
792 pipeline_statistics.Reset(new PipelineStatistics(info(), &zone_pool)); 792 pipeline_statistics.Reset(new PipelineStatistics(info(), &zone_pool));
793 pipeline_statistics->BeginPhaseKind("initializing"); 793 pipeline_statistics->BeginPhaseKind("initializing");
794 } 794 }
795 795
796 PipelineData data(&zone_pool, info()); 796 PipelineData data(&zone_pool, info());
797 this->data_ = &data; 797 this->data_ = &data;
798 data.Initialize(pipeline_statistics.get()); 798 data.Initialize(pipeline_statistics.get());
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
917 917
918 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info, 918 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info,
919 Graph* graph, 919 Graph* graph,
920 Schedule* schedule) { 920 Schedule* schedule) {
921 CallDescriptor* call_descriptor = 921 CallDescriptor* call_descriptor =
922 Linkage::ComputeIncoming(info->zone(), info); 922 Linkage::ComputeIncoming(info->zone(), info);
923 return GenerateCodeForTesting(info, call_descriptor, graph, schedule); 923 return GenerateCodeForTesting(info, call_descriptor, graph, schedule);
924 } 924 }
925 925
926 926
927 Handle<Code> Pipeline::GenerateCodeForTesting(CallDescriptor* call_descriptor, 927 Handle<Code> Pipeline::GenerateCodeForTesting(Isolate* isolate,
928 CallDescriptor* call_descriptor,
928 Graph* graph, 929 Graph* graph,
929 Schedule* schedule) { 930 Schedule* schedule) {
930 CompilationInfo info(graph->zone()->isolate(), graph->zone()); 931 CompilationInfo info(isolate, graph->zone());
931 return GenerateCodeForTesting(&info, call_descriptor, graph, schedule); 932 return GenerateCodeForTesting(&info, call_descriptor, graph, schedule);
932 } 933 }
933 934
934 935
935 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info, 936 Handle<Code> Pipeline::GenerateCodeForTesting(CompilationInfo* info,
936 CallDescriptor* call_descriptor, 937 CallDescriptor* call_descriptor,
937 Graph* graph, 938 Graph* graph,
938 Schedule* schedule) { 939 Schedule* schedule) {
939 CHECK(SupportedBackend()); 940 CHECK(SupportedBackend());
940 ZonePool zone_pool(info->isolate()); 941 ZonePool zone_pool;
941 Pipeline pipeline(info); 942 Pipeline pipeline(info);
942 PipelineData data(&zone_pool, info); 943 PipelineData data(&zone_pool, info);
943 pipeline.data_ = &data; 944 pipeline.data_ = &data;
944 data.InitializeTorTesting(graph, schedule); 945 data.InitializeTorTesting(graph, schedule);
945 if (schedule == NULL) { 946 if (schedule == NULL) {
946 // TODO(rossberg): Should this really be untyped? 947 // TODO(rossberg): Should this really be untyped?
947 pipeline.RunPrintAndVerify("Machine", true); 948 pipeline.RunPrintAndVerify("Machine", true);
948 pipeline.Run<ComputeSchedulePhase>(); 949 pipeline.Run<ComputeSchedulePhase>();
949 } else { 950 } else {
950 TraceSchedule(schedule); 951 TraceSchedule(schedule);
951 } 952 }
952 953
953 Linkage linkage(info->zone(), call_descriptor); 954 Linkage linkage(info->isolate(), info->zone(), call_descriptor);
954 pipeline.GenerateCode(&linkage); 955 pipeline.GenerateCode(&linkage);
955 Handle<Code> code = data.code(); 956 Handle<Code> code = data.code();
956 957
957 #if ENABLE_DISASSEMBLER 958 #if ENABLE_DISASSEMBLER
958 if (!code.is_null() && FLAG_print_opt_code) { 959 if (!code.is_null() && FLAG_print_opt_code) {
959 CodeTracer::Scope tracing_scope(info->isolate()->GetCodeTracer()); 960 CodeTracer::Scope tracing_scope(info->isolate()->GetCodeTracer());
960 OFStream os(tracing_scope.file()); 961 OFStream os(tracing_scope.file());
961 code->Disassemble("test code", os); 962 code->Disassemble("test code", os);
962 } 963 }
963 #endif 964 #endif
964 return code; 965 return code;
965 } 966 }
966 967
967 968
968 bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config, 969 bool Pipeline::AllocateRegistersForTesting(const RegisterConfiguration* config,
969 InstructionSequence* sequence, 970 InstructionSequence* sequence,
970 bool run_verifier) { 971 bool run_verifier) {
971 CompilationInfo info(sequence->zone()->isolate(), sequence->zone()); 972 CompilationInfo info(sequence->isolate(), sequence->zone());
972 ZonePool zone_pool(sequence->zone()->isolate()); 973 ZonePool zone_pool;
973 PipelineData data(&zone_pool, &info); 974 PipelineData data(&zone_pool, &info);
974 data.InitializeTorTesting(sequence); 975 data.InitializeTorTesting(sequence);
975 Pipeline pipeline(&info); 976 Pipeline pipeline(&info);
976 pipeline.data_ = &data; 977 pipeline.data_ = &data;
977 pipeline.AllocateRegisters(config, run_verifier); 978 pipeline.AllocateRegisters(config, run_verifier);
978 return !data.compilation_failed(); 979 return !data.compilation_failed();
979 } 980 }
980 981
981 982
982 void Pipeline::GenerateCode(Linkage* linkage) { 983 void Pipeline::GenerateCode(Linkage* linkage) {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1037 1038
1038 1039
1039 void Pipeline::AllocateRegisters(const RegisterConfiguration* config, 1040 void Pipeline::AllocateRegisters(const RegisterConfiguration* config,
1040 bool run_verifier) { 1041 bool run_verifier) {
1041 PipelineData* data = this->data_; 1042 PipelineData* data = this->data_;
1042 1043
1043 // Don't track usage for this zone in compiler stats. 1044 // Don't track usage for this zone in compiler stats.
1044 SmartPointer<Zone> verifier_zone; 1045 SmartPointer<Zone> verifier_zone;
1045 RegisterAllocatorVerifier* verifier = nullptr; 1046 RegisterAllocatorVerifier* verifier = nullptr;
1046 if (run_verifier) { 1047 if (run_verifier) {
1047 verifier_zone.Reset(new Zone(info()->isolate())); 1048 verifier_zone.Reset(new Zone());
1048 verifier = new (verifier_zone.get()) RegisterAllocatorVerifier( 1049 verifier = new (verifier_zone.get()) RegisterAllocatorVerifier(
1049 verifier_zone.get(), config, data->sequence()); 1050 verifier_zone.get(), config, data->sequence());
1050 } 1051 }
1051 1052
1052 SmartArrayPointer<char> debug_name; 1053 SmartArrayPointer<char> debug_name;
1053 #ifdef DEBUG 1054 #ifdef DEBUG
1054 debug_name = GetDebugName(data->info()); 1055 debug_name = GetDebugName(data->info());
1055 #endif 1056 #endif
1056 1057
1057 ZonePool::Scope zone_scope(data->zone_pool()); 1058 ZonePool::Scope zone_scope(data->zone_pool());
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1110 } 1111 }
1111 1112
1112 1113
1113 void Pipeline::TearDown() { 1114 void Pipeline::TearDown() {
1114 InstructionOperand::TearDownCaches(); 1115 InstructionOperand::TearDownCaches();
1115 } 1116 }
1116 1117
1117 } // namespace compiler 1118 } // namespace compiler
1118 } // namespace internal 1119 } // namespace internal
1119 } // namespace v8 1120 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/pipeline.h ('k') | src/compiler/pipeline-statistics.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698