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

Side by Side Diff: src/compiler.cc

Issue 261253005: Clean up debugger flags. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: rebase Created 6 years, 7 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/debug.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 "v8.h" 5 #include "v8.h"
6 6
7 #include "compiler.h" 7 #include "compiler.h"
8 8
9 #include "bootstrapper.h" 9 #include "bootstrapper.h"
10 #include "codegen.h" 10 #include "codegen.h"
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 ? new List<OffsetRange>(2) : NULL; 103 ? new List<OffsetRange>(2) : NULL;
104 for (int i = 0; i < DependentCode::kGroupCount; i++) { 104 for (int i = 0; i < DependentCode::kGroupCount; i++) {
105 dependencies_[i] = NULL; 105 dependencies_[i] = NULL;
106 } 106 }
107 if (mode == STUB) { 107 if (mode == STUB) {
108 mode_ = STUB; 108 mode_ = STUB;
109 return; 109 return;
110 } 110 }
111 mode_ = mode; 111 mode_ = mode;
112 abort_due_to_dependency_ = false; 112 abort_due_to_dependency_ = false;
113 if (script_->type()->value() == Script::TYPE_NATIVE) { 113 if (script_->type()->value() == Script::TYPE_NATIVE) MarkAsNative();
114 MarkAsNative(); 114 if (isolate_->debugger()->is_active()) MarkAsDebug();
115 } 115
116 if (!shared_info_.is_null()) { 116 if (!shared_info_.is_null()) {
117 ASSERT(strict_mode() == SLOPPY); 117 ASSERT(strict_mode() == SLOPPY);
118 SetStrictMode(shared_info_->strict_mode()); 118 SetStrictMode(shared_info_->strict_mode());
119 } 119 }
120 set_bailout_reason(kUnknown); 120 set_bailout_reason(kUnknown);
121 121
122 if (!shared_info().is_null() && shared_info()->is_compiled()) { 122 if (!shared_info().is_null() && shared_info()->is_compiled()) {
123 // We should initialize the CompilationInfo feedback vector from the 123 // We should initialize the CompilationInfo feedback vector from the
124 // passed in shared info, rather than creating a new one. 124 // passed in shared info, rather than creating a new one.
125 feedback_vector_ = Handle<FixedArray>(shared_info()->feedback_vector(), 125 feedback_vector_ = Handle<FixedArray>(shared_info()->feedback_vector(),
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 #define DEF_VISIT(type) \ 272 #define DEF_VISIT(type) \
273 virtual void Visit##type(type* node) V8_OVERRIDE { \ 273 virtual void Visit##type(type* node) V8_OVERRIDE { \
274 HOptimizedGraphBuilder::Visit##type(node); \ 274 HOptimizedGraphBuilder::Visit##type(node); \
275 } 275 }
276 MODULE_NODE_LIST(DEF_VISIT) 276 MODULE_NODE_LIST(DEF_VISIT)
277 DECLARATION_NODE_LIST(DEF_VISIT) 277 DECLARATION_NODE_LIST(DEF_VISIT)
278 #undef DEF_VISIT 278 #undef DEF_VISIT
279 }; 279 };
280 280
281 281
282 // Determine whether to use the full compiler for all code. If the flag
283 // --always-full-compiler is specified this is the case. For the virtual frame
284 // based compiler the full compiler is also used if a debugger is connected, as
285 // the code from the full compiler supports mode precise break points. For the
286 // crankshaft adaptive compiler debugging the optimized code is not possible at
287 // all. However crankshaft support recompilation of functions, so in this case
288 // the full compiler need not be be used if a debugger is attached, but only if
289 // break points has actually been set.
290 static bool IsDebuggerActive(Isolate* isolate) {
291 return isolate->use_crankshaft() ?
292 isolate->debug()->has_break_points() :
293 isolate->debugger()->IsDebuggerActive();
294 }
295
296
297 OptimizedCompileJob::Status OptimizedCompileJob::CreateGraph() { 282 OptimizedCompileJob::Status OptimizedCompileJob::CreateGraph() {
298 ASSERT(isolate()->use_crankshaft()); 283 ASSERT(isolate()->use_crankshaft());
299 ASSERT(info()->IsOptimizing()); 284 ASSERT(info()->IsOptimizing());
300 ASSERT(!info()->IsCompilingForDebugging()); 285 ASSERT(!info()->IsCompilingForDebugging());
301 286
302 // We should never arrive here if there is no code object on the 287 // We should never arrive here if there is no code object on the
303 // shared function object. 288 // shared function object.
304 ASSERT(info()->shared_info()->code()->kind() == Code::FUNCTION); 289 ASSERT(info()->shared_info()->code()->kind() == Code::FUNCTION);
305 290
306 // We should never arrive here if optimization has been disabled on the 291 // We should never arrive here if optimization has been disabled on the
307 // shared function info. 292 // shared function info.
308 ASSERT(!info()->shared_info()->optimization_disabled()); 293 ASSERT(!info()->shared_info()->optimization_disabled());
309 294
310 // Fall back to using the full code generator if it's not possible 295 // Fall back to using the full code generator if it's not possible
311 // to use the Hydrogen-based optimizing compiler. We already have 296 // to use the Hydrogen-based optimizing compiler. We already have
312 // generated code for this from the shared function object. 297 // generated code for this from the shared function object.
313 if (FLAG_always_full_compiler) return AbortOptimization(); 298 if (FLAG_always_full_compiler) return AbortOptimization();
314 if (IsDebuggerActive(isolate())) return AbortOptimization(kDebuggerIsActive); 299
300 // Do not use crankshaft if compiling for debugging.
301 if (info()->is_debug()) return AbortOptimization(kDebuggerIsActive);
315 302
316 // Limit the number of times we re-compile a functions with 303 // Limit the number of times we re-compile a functions with
317 // the optimizing compiler. 304 // the optimizing compiler.
318 const int kMaxOptCount = 305 const int kMaxOptCount =
319 FLAG_deopt_every_n_times == 0 ? FLAG_max_opt_count : 1000; 306 FLAG_deopt_every_n_times == 0 ? FLAG_max_opt_count : 1000;
320 if (info()->opt_count() > kMaxOptCount) { 307 if (info()->opt_count() > kMaxOptCount) {
321 return AbortAndDisableOptimization(kOptimizedTooManyTimes); 308 return AbortAndDisableOptimization(kOptimizedTooManyTimes);
322 } 309 }
323 310
324 // Due to an encoding limit on LUnallocated operands in the Lithium 311 // Due to an encoding limit on LUnallocated operands in the Lithium
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
704 // the same flags as the previous version, that is flags which can change 691 // the same flags as the previous version, that is flags which can change
705 // the code generated. The current method of mapping from already compiled 692 // the code generated. The current method of mapping from already compiled
706 // full code without debug break slots to full code with debug break slots 693 // full code without debug break slots to full code with debug break slots
707 // depends on the generated code is otherwise exactly the same. 694 // depends on the generated code is otherwise exactly the same.
708 // If compilation fails, just keep the existing code. 695 // If compilation fails, just keep the existing code.
709 MaybeHandle<Code> Compiler::GetCodeForDebugging(Handle<JSFunction> function) { 696 MaybeHandle<Code> Compiler::GetCodeForDebugging(Handle<JSFunction> function) {
710 CompilationInfoWithZone info(function); 697 CompilationInfoWithZone info(function);
711 Isolate* isolate = info.isolate(); 698 Isolate* isolate = info.isolate();
712 VMState<COMPILER> state(isolate); 699 VMState<COMPILER> state(isolate);
713 700
701 info.MarkAsDebug();
702
714 ASSERT(!isolate->has_pending_exception()); 703 ASSERT(!isolate->has_pending_exception());
715 Handle<Code> old_code(function->shared()->code()); 704 Handle<Code> old_code(function->shared()->code());
716 ASSERT(old_code->kind() == Code::FUNCTION); 705 ASSERT(old_code->kind() == Code::FUNCTION);
717 ASSERT(!old_code->has_debug_break_slots()); 706 ASSERT(!old_code->has_debug_break_slots());
718 707
719 info.MarkCompilingForDebugging(); 708 info.MarkCompilingForDebugging();
720 if (old_code->is_compiled_optimizable()) { 709 if (old_code->is_compiled_optimizable()) {
721 info.EnableDeoptimizationSupport(); 710 info.EnableDeoptimizationSupport();
722 } else { 711 } else {
723 info.MarkNonOptimizable(); 712 info.MarkNonOptimizable();
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after
1296 AllowHandleDereference allow_deref; 1285 AllowHandleDereference allow_deref;
1297 bool tracing_on = info()->IsStub() 1286 bool tracing_on = info()->IsStub()
1298 ? FLAG_trace_hydrogen_stubs 1287 ? FLAG_trace_hydrogen_stubs
1299 : (FLAG_trace_hydrogen && 1288 : (FLAG_trace_hydrogen &&
1300 info()->closure()->PassesFilter(FLAG_trace_hydrogen_filter)); 1289 info()->closure()->PassesFilter(FLAG_trace_hydrogen_filter));
1301 return (tracing_on && 1290 return (tracing_on &&
1302 OS::StrChr(const_cast<char*>(FLAG_trace_phase), name_[0]) != NULL); 1291 OS::StrChr(const_cast<char*>(FLAG_trace_phase), name_[0]) != NULL);
1303 } 1292 }
1304 1293
1305 } } // namespace v8::internal 1294 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/compiler.h ('k') | src/debug.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698