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

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

Issue 10559035: Implement a simple register allocator that tries to keep instruction results in registers. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 6 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
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/code_generator.h" 5 #include "vm/code_generator.h"
6 6
7 #include "vm/assembler_macros.h" 7 #include "vm/assembler_macros.h"
8 #include "vm/code_patcher.h" 8 #include "vm/code_patcher.h"
9 #include "vm/compiler.h" 9 #include "vm/compiler.h"
10 #include "vm/dart_api_impl.h" 10 #include "vm/dart_api_impl.h"
(...skipping 14 matching lines...) Expand all
25 DEFINE_FLAG(bool, trace_deopt, false, "Trace deoptimization"); 25 DEFINE_FLAG(bool, trace_deopt, false, "Trace deoptimization");
26 DEFINE_FLAG(bool, trace_ic, false, "trace IC handling"); 26 DEFINE_FLAG(bool, trace_ic, false, "trace IC handling");
27 DEFINE_FLAG(bool, trace_patching, false, "Trace patching of code."); 27 DEFINE_FLAG(bool, trace_patching, false, "Trace patching of code.");
28 DEFINE_FLAG(bool, trace_runtime_calls, false, "Trace runtime calls."); 28 DEFINE_FLAG(bool, trace_runtime_calls, false, "Trace runtime calls.");
29 DEFINE_FLAG(int, optimization_counter_threshold, 2000, 29 DEFINE_FLAG(int, optimization_counter_threshold, 2000,
30 "function's usage-counter value before it is optimized, -1 means never."); 30 "function's usage-counter value before it is optimized, -1 means never.");
31 DECLARE_FLAG(bool, enable_type_checks); 31 DECLARE_FLAG(bool, enable_type_checks);
32 DECLARE_FLAG(bool, trace_type_checks); 32 DECLARE_FLAG(bool, trace_type_checks);
33 DECLARE_FLAG(bool, report_usage_count); 33 DECLARE_FLAG(bool, report_usage_count);
34 DECLARE_FLAG(int, deoptimization_counter_threshold); 34 DECLARE_FLAG(int, deoptimization_counter_threshold);
35 DEFINE_FLAG(charp, optimization_filter, NULL, "Optimize only named function");
35 36
36 37
37 bool CodeGenerator::CanOptimize() { 38 bool CodeGenerator::CanOptimize() {
38 return 39 return
39 !FLAG_report_usage_count && 40 !FLAG_report_usage_count &&
40 (FLAG_optimization_counter_threshold >= 0) && 41 (FLAG_optimization_counter_threshold >= 0) &&
41 !Isolate::Current()->debugger()->IsActive(); 42 !Isolate::Current()->debugger()->IsActive();
42 } 43 }
43 44
44 45
(...skipping 1289 matching lines...) Expand 10 before | Expand all | Expand 10 after
1334 } 1335 }
1335 if (function.HasOptimizedCode()) { 1336 if (function.HasOptimizedCode()) {
1336 // The caller has been already optimized. 1337 // The caller has been already optimized.
1337 // TODO(srdjan): This is a significant slowdown, the caller is probably in 1338 // TODO(srdjan): This is a significant slowdown, the caller is probably in
1338 // a loop. Maybe test if the code has been optimized before calling. 1339 // a loop. Maybe test if the code has been optimized before calling.
1339 // If this happens from optimized code, then it means that the optimized 1340 // If this happens from optimized code, then it means that the optimized
1340 // code needs to be reoptimized. 1341 // code needs to be reoptimized.
1341 function.set_usage_counter(kLowInvocationCount); 1342 function.set_usage_counter(kLowInvocationCount);
1342 return; 1343 return;
1343 } 1344 }
1345 if ((FLAG_optimization_filter != NULL) &&
1346 (strncmp(function.ToFullyQualifiedCString(),
1347 FLAG_optimization_filter,
1348 strlen(FLAG_optimization_filter)) != 0)) {
1349 function.set_usage_counter(kLowInvocationCount);
srdjan 2012/06/18 16:33:20 Why not doing this in the compiler and "Bailout" f
Vyacheslav Egorov (Google) 2012/06/18 17:51:16 I don't see any profit in bailing out so late in t
1350 return;
1351 }
1344 if (function.is_optimizable()) { 1352 if (function.is_optimizable()) {
1345 ASSERT(!function.HasOptimizedCode()); 1353 ASSERT(!function.HasOptimizedCode());
1346 const Code& unoptimized_code = Code::Handle(function.unoptimized_code()); 1354 const Code& unoptimized_code = Code::Handle(function.unoptimized_code());
1347 // Compilation patches the entry of unoptimized code. 1355 // Compilation patches the entry of unoptimized code.
1348 const Error& error = 1356 const Error& error =
1349 Error::Handle(Compiler::CompileOptimizedFunction(function)); 1357 Error::Handle(Compiler::CompileOptimizedFunction(function));
1350 if (!error.IsNull()) { 1358 if (!error.IsNull()) {
1351 Exceptions::PropagateError(error); 1359 Exceptions::PropagateError(error);
1352 } 1360 }
1353 const Code& optimized_code = Code::Handle(function.CurrentCode()); 1361 const Code& optimized_code = Code::Handle(function.CurrentCode());
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
1568 } 1576 }
1569 } 1577 }
1570 } 1578 }
1571 // The cache is null terminated, therefore the loop above should never 1579 // The cache is null terminated, therefore the loop above should never
1572 // terminate by itself. 1580 // terminate by itself.
1573 UNREACHABLE(); 1581 UNREACHABLE();
1574 return Code::null(); 1582 return Code::null();
1575 } 1583 }
1576 1584
1577 } // namespace dart 1585 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698