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

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

Issue 10116012: Add more timing information. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | runtime/vm/compiler_stats.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 #include "vm/ast_printer.h" 8 #include "vm/ast_printer.h"
9 #include "vm/code_generator.h" 9 #include "vm/code_generator.h"
10 #include "vm/code_patcher.h" 10 #include "vm/code_patcher.h"
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 bool is_compiled = false; 157 bool is_compiled = false;
158 if (FLAG_use_new_compiler) { 158 if (FLAG_use_new_compiler) {
159 ASSERT(!optimized); 159 ASSERT(!optimized);
160 LongJump* old_base = isolate->long_jump_base(); 160 LongJump* old_base = isolate->long_jump_base();
161 LongJump bailout_jump; 161 LongJump bailout_jump;
162 isolate->set_long_jump_base(&bailout_jump); 162 isolate->set_long_jump_base(&bailout_jump);
163 if (setjmp(*bailout_jump.Set()) == 0) { 163 if (setjmp(*bailout_jump.Set()) == 0) {
164 FlowGraphBuilder graph_builder(parsed_function); 164 FlowGraphBuilder graph_builder(parsed_function);
165 graph_builder.BuildGraph(); 165 graph_builder.BuildGraph();
166 166
167 Assembler assembler;
168 // The non-optimizing compiler compiles blocks in reverse postorder, 167 // The non-optimizing compiler compiles blocks in reverse postorder,
169 // because it is a 'natural' order for the human reader of the 168 // because it is a 'natural' order for the human reader of the
170 // generated code. 169 // generated code.
171 intptr_t length = graph_builder.postorder_block_entries().length(); 170 intptr_t length = graph_builder.postorder_block_entries().length();
172 GrowableArray<BlockEntryInstr*> block_order(length); 171 GrowableArray<BlockEntryInstr*> block_order(length);
173 for (intptr_t i = length - 1; i >= 0; --i) { 172 for (intptr_t i = length - 1; i >= 0; --i) {
174 block_order.Add(graph_builder.postorder_block_entries()[i]); 173 block_order.Add(graph_builder.postorder_block_entries()[i]);
175 } 174 }
175
176 Assembler assembler;
176 FlowGraphCompiler graph_compiler(&assembler, parsed_function, 177 FlowGraphCompiler graph_compiler(&assembler, parsed_function,
177 block_order); 178 block_order);
178 graph_compiler.CompileGraph(); 179 graph_compiler.CompileGraph();
180
181 TimerScope timer(FLAG_compiler_stats,
182 &CompilerStats::codefinalizer_timer);
179 const Code& code = 183 const Code& code =
180 Code::Handle(Code::FinalizeCode(function_fullname, &assembler)); 184 Code::Handle(Code::FinalizeCode(function_fullname, &assembler));
181 code.set_is_optimized(false); 185 code.set_is_optimized(false);
182 graph_compiler.FinalizePcDescriptors(code); 186 graph_compiler.FinalizePcDescriptors(code);
187 graph_compiler.FinalizeStackmaps(code);
183 graph_compiler.FinalizeVarDescriptors(code); 188 graph_compiler.FinalizeVarDescriptors(code);
184 graph_compiler.FinalizeExceptionHandlers(code); 189 graph_compiler.FinalizeExceptionHandlers(code);
185 function.set_unoptimized_code(code); 190 function.set_unoptimized_code(code);
186 function.SetCode(code); 191 function.SetCode(code);
187 ASSERT(CodePatcher::CodeIsPatchable(code)); 192 ASSERT(CodePatcher::CodeIsPatchable(code));
188 is_compiled = true; 193 is_compiled = true;
189 } else { 194 } else {
190 // We bailed out. 195 // We bailed out.
191 Error& bailout_error = Error::Handle( 196 Error& bailout_error = Error::Handle(
192 isolate->object_store()->sticky_error()); 197 isolate->object_store()->sticky_error());
(...skipping 15 matching lines...) Expand all
208 // Do not use type feedback to optimize a function that was 213 // Do not use type feedback to optimize a function that was
209 // deoptimized too often. 214 // deoptimized too often.
210 if (parsed_function.function().deoptimization_counter() < 215 if (parsed_function.function().deoptimization_counter() <
211 FLAG_deoptimization_counter_threshold) { 216 FLAG_deoptimization_counter_threshold) {
212 ExtractTypeFeedback( 217 ExtractTypeFeedback(
213 Code::Handle(parsed_function.function().unoptimized_code()), 218 Code::Handle(parsed_function.function().unoptimized_code()),
214 parsed_function.node_sequence()); 219 parsed_function.node_sequence());
215 } 220 }
216 OptimizingCodeGenerator code_gen(&assembler, parsed_function); 221 OptimizingCodeGenerator code_gen(&assembler, parsed_function);
217 code_gen.GenerateCode(); 222 code_gen.GenerateCode();
223 TimerScope timer(FLAG_compiler_stats,
224 &CompilerStats::codefinalizer_timer);
218 Code& code = Code::Handle( 225 Code& code = Code::Handle(
219 Code::FinalizeCode(function_fullname, &assembler)); 226 Code::FinalizeCode(function_fullname, &assembler));
220 code.set_is_optimized(true); 227 code.set_is_optimized(true);
221 code_gen.FinalizePcDescriptors(code); 228 code_gen.FinalizePcDescriptors(code);
222 code_gen.FinalizeStackmaps(code); 229 code_gen.FinalizeStackmaps(code);
223 code_gen.FinalizeExceptionHandlers(code); 230 code_gen.FinalizeExceptionHandlers(code);
224 function.SetCode(code); 231 function.SetCode(code);
225 CodePatcher::PatchEntry(Code::Handle(function.unoptimized_code())); 232 CodePatcher::PatchEntry(Code::Handle(function.unoptimized_code()));
226 if (FLAG_trace_compiler) { 233 if (FLAG_trace_compiler) {
227 OS::Print("--> patching entry 0x%x\n", 234 OS::Print("--> patching entry 0x%x\n",
228 Code::Handle(function.unoptimized_code()).EntryPoint()); 235 Code::Handle(function.unoptimized_code()).EntryPoint());
229 } 236 }
230 } else { 237 } else {
231 // Compile unnoptimized code. 238 // Compile unnoptimized code.
232 ASSERT(!function.HasCode()); 239 ASSERT(!function.HasCode());
233 // Compiling first time. 240 // Compiling first time.
234 CodeGenerator code_gen(&assembler, parsed_function); 241 CodeGenerator code_gen(&assembler, parsed_function);
235 code_gen.GenerateCode(); 242 code_gen.GenerateCode();
243 TimerScope timer(FLAG_compiler_stats,
244 &CompilerStats::codefinalizer_timer);
236 const Code& code = 245 const Code& code =
237 Code::Handle(Code::FinalizeCode(function_fullname, &assembler)); 246 Code::Handle(Code::FinalizeCode(function_fullname, &assembler));
238 code.set_is_optimized(false); 247 code.set_is_optimized(false);
239 code_gen.FinalizePcDescriptors(code); 248 code_gen.FinalizePcDescriptors(code);
240 code_gen.FinalizeStackmaps(code); 249 code_gen.FinalizeStackmaps(code);
241 code_gen.FinalizeVarDescriptors(code); 250 code_gen.FinalizeVarDescriptors(code);
242 code_gen.FinalizeExceptionHandlers(code); 251 code_gen.FinalizeExceptionHandlers(code);
243 function.set_unoptimized_code(code); 252 function.set_unoptimized_code(code);
244 function.SetCode(code); 253 function.SetCode(code);
245 ASSERT(CodePatcher::CodeIsPatchable(code)); 254 ASSERT(CodePatcher::CodeIsPatchable(code));
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 } else { 401 } else {
393 result = isolate->object_store()->sticky_error(); 402 result = isolate->object_store()->sticky_error();
394 isolate->object_store()->clear_sticky_error(); 403 isolate->object_store()->clear_sticky_error();
395 } 404 }
396 isolate->set_long_jump_base(base); 405 isolate->set_long_jump_base(base);
397 return result.raw(); 406 return result.raw();
398 } 407 }
399 408
400 409
401 } // namespace dart 410 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/compiler_stats.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698