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

Side by Side Diff: src/compiler.cc

Issue 23441029: Move global V8::UseCrankshaft() into the Isolate. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed comments by Sven Panne. Created 7 years, 3 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 | « src/compiler.h ('k') | src/factory.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 opt_count_ = shared_info().is_null() ? 0 : shared_info()->opt_count(); 112 opt_count_ = shared_info().is_null() ? 0 : shared_info()->opt_count();
113 no_frame_ranges_ = isolate->cpu_profiler()->is_profiling() 113 no_frame_ranges_ = isolate->cpu_profiler()->is_profiling()
114 ? new List<OffsetRange>(2) : NULL; 114 ? new List<OffsetRange>(2) : NULL;
115 for (int i = 0; i < DependentCode::kGroupCount; i++) { 115 for (int i = 0; i < DependentCode::kGroupCount; i++) {
116 dependencies_[i] = NULL; 116 dependencies_[i] = NULL;
117 } 117 }
118 if (mode == STUB) { 118 if (mode == STUB) {
119 mode_ = STUB; 119 mode_ = STUB;
120 return; 120 return;
121 } 121 }
122 mode_ = V8::UseCrankshaft() ? mode : NONOPT; 122 mode_ = isolate->use_crankshaft() ? mode : NONOPT;
123 abort_due_to_dependency_ = false; 123 abort_due_to_dependency_ = false;
124 if (script_->type()->value() == Script::TYPE_NATIVE) { 124 if (script_->type()->value() == Script::TYPE_NATIVE) {
125 MarkAsNative(); 125 MarkAsNative();
126 } 126 }
127 if (!shared_info_.is_null()) { 127 if (!shared_info_.is_null()) {
128 ASSERT(language_mode() == CLASSIC_MODE); 128 ASSERT(language_mode() == CLASSIC_MODE);
129 SetLanguageMode(shared_info_->language_mode()); 129 SetLanguageMode(shared_info_->language_mode());
130 } 130 }
131 set_bailout_reason(kUnknown); 131 set_bailout_reason(kUnknown);
132 } 132 }
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 // Determine whether to use the full compiler for all code. If the flag 235 // Determine whether to use the full compiler for all code. If the flag
236 // --always-full-compiler is specified this is the case. For the virtual frame 236 // --always-full-compiler is specified this is the case. For the virtual frame
237 // based compiler the full compiler is also used if a debugger is connected, as 237 // based compiler the full compiler is also used if a debugger is connected, as
238 // the code from the full compiler supports mode precise break points. For the 238 // the code from the full compiler supports mode precise break points. For the
239 // crankshaft adaptive compiler debugging the optimized code is not possible at 239 // crankshaft adaptive compiler debugging the optimized code is not possible at
240 // all. However crankshaft support recompilation of functions, so in this case 240 // all. However crankshaft support recompilation of functions, so in this case
241 // the full compiler need not be be used if a debugger is attached, but only if 241 // the full compiler need not be be used if a debugger is attached, but only if
242 // break points has actually been set. 242 // break points has actually been set.
243 static bool IsDebuggerActive(Isolate* isolate) { 243 static bool IsDebuggerActive(Isolate* isolate) {
244 #ifdef ENABLE_DEBUGGER_SUPPORT 244 #ifdef ENABLE_DEBUGGER_SUPPORT
245 return V8::UseCrankshaft() ? 245 return isolate->use_crankshaft() ?
246 isolate->debug()->has_break_points() : 246 isolate->debug()->has_break_points() :
247 isolate->debugger()->IsDebuggerActive(); 247 isolate->debugger()->IsDebuggerActive();
248 #else 248 #else
249 return false; 249 return false;
250 #endif 250 #endif
251 } 251 }
252 252
253 253
254 static bool AlwaysFullCompiler(Isolate* isolate) { 254 static bool AlwaysFullCompiler(Isolate* isolate) {
255 return FLAG_always_full_compiler || IsDebuggerActive(isolate); 255 return FLAG_always_full_compiler || IsDebuggerActive(isolate);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 if (status != OptimizingCompiler::SUCCEEDED) { 303 if (status != OptimizingCompiler::SUCCEEDED) {
304 status = compiler.AbortOptimization(); 304 status = compiler.AbortOptimization();
305 return status != OptimizingCompiler::FAILED; 305 return status != OptimizingCompiler::FAILED;
306 } 306 }
307 status = compiler.GenerateAndInstallCode(); 307 status = compiler.GenerateAndInstallCode();
308 return status != OptimizingCompiler::FAILED; 308 return status != OptimizingCompiler::FAILED;
309 } 309 }
310 310
311 311
312 OptimizingCompiler::Status OptimizingCompiler::CreateGraph() { 312 OptimizingCompiler::Status OptimizingCompiler::CreateGraph() {
313 ASSERT(V8::UseCrankshaft()); 313 ASSERT(isolate()->use_crankshaft());
314 ASSERT(info()->IsOptimizing()); 314 ASSERT(info()->IsOptimizing());
315 ASSERT(!info()->IsCompilingForDebugging()); 315 ASSERT(!info()->IsCompilingForDebugging());
316 316
317 // We should never arrive here if there is no code object on the 317 // We should never arrive here if there is no code object on the
318 // shared function object. 318 // shared function object.
319 ASSERT(info()->shared_info()->code()->kind() == Code::FUNCTION); 319 ASSERT(info()->shared_info()->code()->kind() == Code::FUNCTION);
320 320
321 // We should never arrive here if optimization has been disabled on the 321 // We should never arrive here if optimization has been disabled on the
322 // shared function info. 322 // shared function info.
323 ASSERT(!info()->shared_info()->optimization_disabled()); 323 ASSERT(!info()->shared_info()->optimization_disabled());
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 return AbortOptimization(); 492 return AbortOptimization();
493 } 493 }
494 info()->SetCode(optimized_code); 494 info()->SetCode(optimized_code);
495 } 495 }
496 RecordOptimizationStats(); 496 RecordOptimizationStats();
497 return SetLastStatus(SUCCEEDED); 497 return SetLastStatus(SUCCEEDED);
498 } 498 }
499 499
500 500
501 static bool GenerateCode(CompilationInfo* info) { 501 static bool GenerateCode(CompilationInfo* info) {
502 bool is_optimizing = V8::UseCrankshaft() && 502 bool is_optimizing = info->isolate()->use_crankshaft() &&
503 !info->IsCompilingForDebugging() && 503 !info->IsCompilingForDebugging() &&
504 info->IsOptimizing(); 504 info->IsOptimizing();
505 if (is_optimizing) { 505 if (is_optimizing) {
506 Logger::TimerEventScope timer( 506 Logger::TimerEventScope timer(
507 info->isolate(), Logger::TimerEventScope::v8_recompile_synchronous); 507 info->isolate(), Logger::TimerEventScope::v8_recompile_synchronous);
508 return MakeCrankshaftCode(info); 508 return MakeCrankshaftCode(info);
509 } else { 509 } else {
510 if (info->IsOptimizing()) { 510 if (info->IsOptimizing()) {
511 // Have the CompilationInfo decide if the compilation should be 511 // Have the CompilationInfo decide if the compilation should be
512 // BASE or NONOPT. 512 // BASE or NONOPT.
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 FunctionLiteral* lit = info->function(); 831 FunctionLiteral* lit = info->function();
832 int expected = lit->expected_property_count(); 832 int expected = lit->expected_property_count();
833 SetExpectedNofPropertiesFromEstimate(shared, expected); 833 SetExpectedNofPropertiesFromEstimate(shared, expected);
834 834
835 // Check the function has compiled code. 835 // Check the function has compiled code.
836 ASSERT(shared->is_compiled()); 836 ASSERT(shared->is_compiled());
837 shared->set_dont_optimize(lit->flags()->Contains(kDontOptimize)); 837 shared->set_dont_optimize(lit->flags()->Contains(kDontOptimize));
838 shared->set_dont_inline(lit->flags()->Contains(kDontInline)); 838 shared->set_dont_inline(lit->flags()->Contains(kDontInline));
839 shared->set_ast_node_count(lit->ast_node_count()); 839 shared->set_ast_node_count(lit->ast_node_count());
840 840
841 if (V8::UseCrankshaft() && 841 if (info->isolate()->use_crankshaft() &&
842 !function.is_null() && 842 !function.is_null() &&
843 !shared->optimization_disabled()) { 843 !shared->optimization_disabled()) {
844 // If we're asked to always optimize, we compile the optimized 844 // If we're asked to always optimize, we compile the optimized
845 // version of the function right away - unless the debugger is 845 // version of the function right away - unless the debugger is
846 // active as it makes no sense to compile optimized code then. 846 // active as it makes no sense to compile optimized code then.
847 if (FLAG_always_opt && 847 if (FLAG_always_opt &&
848 !Isolate::Current()->DebuggerHasBreakPoints()) { 848 !Isolate::Current()->DebuggerHasBreakPoints()) {
849 CompilationInfoWithZone optimized(function); 849 CompilationInfoWithZone optimized(function);
850 optimized.SetOptimizing(BailoutId::None()); 850 optimized.SetOptimizing(BailoutId::None());
851 return Compiler::CompileLazy(&optimized); 851 return Compiler::CompileLazy(&optimized);
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
1256 AllowHandleDereference allow_deref; 1256 AllowHandleDereference allow_deref;
1257 bool tracing_on = info()->IsStub() 1257 bool tracing_on = info()->IsStub()
1258 ? FLAG_trace_hydrogen_stubs 1258 ? FLAG_trace_hydrogen_stubs
1259 : (FLAG_trace_hydrogen && 1259 : (FLAG_trace_hydrogen &&
1260 info()->closure()->PassesFilter(FLAG_trace_hydrogen_filter)); 1260 info()->closure()->PassesFilter(FLAG_trace_hydrogen_filter));
1261 return (tracing_on && 1261 return (tracing_on &&
1262 OS::StrChr(const_cast<char*>(FLAG_trace_phase), name_[0]) != NULL); 1262 OS::StrChr(const_cast<char*>(FLAG_trace_phase), name_[0]) != NULL);
1263 } 1263 }
1264 1264
1265 } } // namespace v8::internal 1265 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/compiler.h ('k') | src/factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698