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

Side by Side Diff: runtime/vm/compiler.cc

Issue 1760763002: Turn on background compilation (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Disable background compilation of regexp compilation Created 4 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
« no previous file with comments | « runtime/vm/code_generator.cc ('k') | runtime/vm/flag_list.h » ('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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/compiler.h" 5 #include "vm/compiler.h"
6 6
7 #include "vm/assembler.h" 7 #include "vm/assembler.h"
8 8
9 #include "vm/ast_printer.h" 9 #include "vm/ast_printer.h"
10 #include "vm/block_scheduler.h" 10 #include "vm/block_scheduler.h"
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 99
100 void DartCompilationPipeline::FinalizeCompilation() { } 100 void DartCompilationPipeline::FinalizeCompilation() { }
101 101
102 102
103 void IrregexpCompilationPipeline::ParseFunction( 103 void IrregexpCompilationPipeline::ParseFunction(
104 ParsedFunction* parsed_function) { 104 ParsedFunction* parsed_function) {
105 RegExpParser::ParseFunction(parsed_function); 105 RegExpParser::ParseFunction(parsed_function);
106 // Variables are allocated after compilation. 106 // Variables are allocated after compilation.
107 } 107 }
108 108
109
109 FlowGraph* IrregexpCompilationPipeline::BuildFlowGraph( 110 FlowGraph* IrregexpCompilationPipeline::BuildFlowGraph(
110 Zone* zone, 111 Zone* zone,
111 ParsedFunction* parsed_function, 112 ParsedFunction* parsed_function,
112 const ZoneGrowableArray<const ICData*>& ic_data_array, 113 const ZoneGrowableArray<const ICData*>& ic_data_array,
113 intptr_t osr_id) { 114 intptr_t osr_id) {
114 // Compile to the dart IR. 115 // Compile to the dart IR.
115 RegExpEngine::CompilationResult result = 116 RegExpEngine::CompilationResult result =
116 RegExpEngine::CompileIR(parsed_function->regexp_compile_data(), 117 RegExpEngine::CompileIR(parsed_function->regexp_compile_data(),
117 parsed_function, 118 parsed_function,
118 ic_data_array); 119 ic_data_array);
119 backtrack_goto_ = result.backtrack_goto; 120 backtrack_goto_ = result.backtrack_goto;
120 121
121 // Allocate variables now that we know the number of locals. 122 // Allocate variables now that we know the number of locals.
122 parsed_function->AllocateIrregexpVariables(result.num_stack_locals); 123 parsed_function->AllocateIrregexpVariables(result.num_stack_locals);
123 124
124 // Build the flow graph. 125 // Build the flow graph.
125 FlowGraphBuilder builder(*parsed_function, 126 FlowGraphBuilder builder(*parsed_function,
126 ic_data_array, 127 ic_data_array,
127 NULL, // NULL = not inlining. 128 NULL, // NULL = not inlining.
128 osr_id); 129 osr_id);
129 130
130 return new(zone) FlowGraph(*parsed_function, 131 return new(zone) FlowGraph(*parsed_function,
131 result.graph_entry, 132 result.graph_entry,
132 result.num_blocks); 133 result.num_blocks);
133 } 134 }
134 135
136
135 void IrregexpCompilationPipeline::FinalizeCompilation() { 137 void IrregexpCompilationPipeline::FinalizeCompilation() {
136 backtrack_goto_->ComputeOffsetTable(); 138 backtrack_goto_->ComputeOffsetTable();
137 } 139 }
138 140
141
139 CompilationPipeline* CompilationPipeline::New(Zone* zone, 142 CompilationPipeline* CompilationPipeline::New(Zone* zone,
140 const Function& function) { 143 const Function& function) {
141 if (function.IsIrregexpFunction()) { 144 if (function.IsIrregexpFunction()) {
142 return new(zone) IrregexpCompilationPipeline(); 145 return new(zone) IrregexpCompilationPipeline();
143 } else { 146 } else {
144 return new(zone) DartCompilationPipeline(); 147 return new(zone) DartCompilationPipeline();
145 } 148 }
146 } 149 }
147 150
148 151
(...skipping 1135 matching lines...) Expand 10 before | Expand all | Expand 10 after
1284 1287
1285 RawError* Compiler::CompileOptimizedFunction(Thread* thread, 1288 RawError* Compiler::CompileOptimizedFunction(Thread* thread,
1286 const Function& function, 1289 const Function& function,
1287 intptr_t osr_id) { 1290 intptr_t osr_id) {
1288 VMTagScope tagScope(thread, VMTag::kCompileOptimizedTagId); 1291 VMTagScope tagScope(thread, VMTag::kCompileOptimizedTagId);
1289 TIMELINE_FUNCTION_COMPILATION_DURATION(thread, 1292 TIMELINE_FUNCTION_COMPILATION_DURATION(thread,
1290 "OptimizedFunction", function); 1293 "OptimizedFunction", function);
1291 1294
1292 // Optimization must happen in non-mutator/Dart thread if background 1295 // Optimization must happen in non-mutator/Dart thread if background
1293 // compilation is on. OSR compilation still occurs in the main thread. 1296 // compilation is on. OSR compilation still occurs in the main thread.
1297 // TODO(Srdjan): Remove assert allowance for regular expression functions
1298 // once they can be compiled in background.
1294 ASSERT((osr_id != kNoOSRDeoptId) || !FLAG_background_compilation || 1299 ASSERT((osr_id != kNoOSRDeoptId) || !FLAG_background_compilation ||
1295 !thread->IsMutatorThread()); 1300 !thread->IsMutatorThread() ||
1301 function.IsIrregexpFunction());
1296 CompilationPipeline* pipeline = 1302 CompilationPipeline* pipeline =
1297 CompilationPipeline::New(thread->zone(), function); 1303 CompilationPipeline::New(thread->zone(), function);
1298 return CompileFunctionHelper(pipeline, 1304 return CompileFunctionHelper(pipeline,
1299 function, 1305 function,
1300 true, /* optimized */ 1306 true, /* optimized */
1301 osr_id); 1307 osr_id);
1302 } 1308 }
1303 1309
1304 1310
1305 // This is only used from unit tests. 1311 // This is only used from unit tests.
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after
1858 } 1864 }
1859 1865
1860 1866
1861 void BackgroundCompiler::EnsureInit(Thread* thread) { 1867 void BackgroundCompiler::EnsureInit(Thread* thread) {
1862 UNREACHABLE(); 1868 UNREACHABLE();
1863 } 1869 }
1864 1870
1865 #endif // DART_PRECOMPILED_RUNTIME 1871 #endif // DART_PRECOMPILED_RUNTIME
1866 1872
1867 } // namespace dart 1873 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/code_generator.cc ('k') | runtime/vm/flag_list.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698