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

Side by Side Diff: src/compiler.h

Issue 110203002: Refactor the compiling pipeline. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: addressed comments Created 7 years 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/compilation-cache.cc ('k') | src/compiler.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 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 Scope* global_scope() const { return global_scope_; } 77 Scope* global_scope() const { return global_scope_; }
78 Handle<Code> code() const { return code_; } 78 Handle<Code> code() const { return code_; }
79 Handle<JSFunction> closure() const { return closure_; } 79 Handle<JSFunction> closure() const { return closure_; }
80 Handle<SharedFunctionInfo> shared_info() const { return shared_info_; } 80 Handle<SharedFunctionInfo> shared_info() const { return shared_info_; }
81 Handle<Script> script() const { return script_; } 81 Handle<Script> script() const { return script_; }
82 HydrogenCodeStub* code_stub() const {return code_stub_; } 82 HydrogenCodeStub* code_stub() const {return code_stub_; }
83 v8::Extension* extension() const { return extension_; } 83 v8::Extension* extension() const { return extension_; }
84 ScriptDataImpl* pre_parse_data() const { return pre_parse_data_; } 84 ScriptDataImpl* pre_parse_data() const { return pre_parse_data_; }
85 Handle<Context> context() const { return context_; } 85 Handle<Context> context() const { return context_; }
86 BailoutId osr_ast_id() const { return osr_ast_id_; } 86 BailoutId osr_ast_id() const { return osr_ast_id_; }
87 uint32_t osr_pc_offset() const { return osr_pc_offset_; } 87 Handle<Code> unoptimized_code() const { return unoptimized_code_; }
88 Handle<Code> osr_patched_code() const { return osr_patched_code_; }
89 int opt_count() const { return opt_count_; } 88 int opt_count() const { return opt_count_; }
90 int num_parameters() const; 89 int num_parameters() const;
91 int num_heap_slots() const; 90 int num_heap_slots() const;
92 Code::Flags flags() const; 91 Code::Flags flags() const;
93 92
94 void MarkAsEval() { 93 void MarkAsEval() {
95 ASSERT(!is_lazy()); 94 ASSERT(!is_lazy());
96 flags_ |= IsEval::encode(true); 95 flags_ |= IsEval::encode(true);
97 } 96 }
98 void MarkAsGlobal() { 97 void MarkAsGlobal() {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 ASSERT(!is_lazy()); 181 ASSERT(!is_lazy());
183 extension_ = extension; 182 extension_ = extension;
184 } 183 }
185 void SetPreParseData(ScriptDataImpl* pre_parse_data) { 184 void SetPreParseData(ScriptDataImpl* pre_parse_data) {
186 ASSERT(!is_lazy()); 185 ASSERT(!is_lazy());
187 pre_parse_data_ = pre_parse_data; 186 pre_parse_data_ = pre_parse_data;
188 } 187 }
189 void SetContext(Handle<Context> context) { 188 void SetContext(Handle<Context> context) {
190 context_ = context; 189 context_ = context;
191 } 190 }
192 void MarkCompilingForDebugging(Handle<Code> current_code) { 191
193 ASSERT(mode_ != OPTIMIZE); 192 void MarkCompilingForDebugging() {
194 ASSERT(current_code->kind() == Code::FUNCTION);
195 flags_ |= IsCompilingForDebugging::encode(true); 193 flags_ |= IsCompilingForDebugging::encode(true);
196 if (current_code->is_compiled_optimizable()) {
197 EnableDeoptimizationSupport();
198 } else {
199 mode_ = CompilationInfo::NONOPT;
200 }
201 } 194 }
202 bool IsCompilingForDebugging() { 195 bool IsCompilingForDebugging() {
203 return IsCompilingForDebugging::decode(flags_); 196 return IsCompilingForDebugging::decode(flags_);
204 } 197 }
198 void MarkNonOptimizable() {
199 SetMode(CompilationInfo::NONOPT);
200 }
205 201
206 bool ShouldTrapOnDeopt() const { 202 bool ShouldTrapOnDeopt() const {
207 return (FLAG_trap_on_deopt && IsOptimizing()) || 203 return (FLAG_trap_on_deopt && IsOptimizing()) ||
208 (FLAG_trap_on_stub_deopt && IsStub()); 204 (FLAG_trap_on_stub_deopt && IsStub());
209 } 205 }
210 206
211 bool has_global_object() const { 207 bool has_global_object() const {
212 return !closure().is_null() && 208 return !closure().is_null() &&
213 (closure()->context()->global_object() != NULL); 209 (closure()->context()->global_object() != NULL);
214 } 210 }
215 211
216 GlobalObject* global_object() const { 212 GlobalObject* global_object() const {
217 return has_global_object() ? closure()->context()->global_object() : NULL; 213 return has_global_object() ? closure()->context()->global_object() : NULL;
218 } 214 }
219 215
220 // Accessors for the different compilation modes. 216 // Accessors for the different compilation modes.
221 bool IsOptimizing() const { return mode_ == OPTIMIZE; } 217 bool IsOptimizing() const { return mode_ == OPTIMIZE; }
222 bool IsOptimizable() const { return mode_ == BASE; } 218 bool IsOptimizable() const { return mode_ == BASE; }
223 bool IsStub() const { return mode_ == STUB; } 219 bool IsStub() const { return mode_ == STUB; }
224 void SetOptimizing(BailoutId osr_ast_id) { 220 void SetOptimizing(BailoutId osr_ast_id, Handle<Code> unoptimized) {
221 ASSERT(!shared_info_.is_null());
225 SetMode(OPTIMIZE); 222 SetMode(OPTIMIZE);
226 osr_ast_id_ = osr_ast_id; 223 osr_ast_id_ = osr_ast_id;
224 unoptimized_code_ = unoptimized;
227 } 225 }
228 void DisableOptimization(); 226 void DisableOptimization();
229 227
230 // Deoptimization support. 228 // Deoptimization support.
231 bool HasDeoptimizationSupport() const { 229 bool HasDeoptimizationSupport() const {
232 return SupportsDeoptimization::decode(flags_); 230 return SupportsDeoptimization::decode(flags_);
233 } 231 }
234 void EnableDeoptimizationSupport() { 232 void EnableDeoptimizationSupport() {
235 ASSERT(IsOptimizable()); 233 ASSERT(IsOptimizable());
236 flags_ |= SupportsDeoptimization::encode(true); 234 flags_ |= SupportsDeoptimization::encode(true);
237 } 235 }
238 236
239 // Determines whether or not to insert a self-optimization header. 237 // Determines whether or not to insert a self-optimization header.
240 bool ShouldSelfOptimize(); 238 bool ShouldSelfOptimize();
241 239
242 // Reset code to the unoptimized version when optimization is aborted.
243 void AbortOptimization() {
244 SetCode(handle(shared_info()->code()));
245 }
246
247 void set_deferred_handles(DeferredHandles* deferred_handles) { 240 void set_deferred_handles(DeferredHandles* deferred_handles) {
248 ASSERT(deferred_handles_ == NULL); 241 ASSERT(deferred_handles_ == NULL);
249 deferred_handles_ = deferred_handles; 242 deferred_handles_ = deferred_handles;
250 } 243 }
251 244
252 ZoneList<Handle<HeapObject> >* dependencies( 245 ZoneList<Handle<HeapObject> >* dependencies(
253 DependentCode::DependencyGroup group) { 246 DependentCode::DependencyGroup group) {
254 if (dependencies_[group] == NULL) { 247 if (dependencies_[group] == NULL) {
255 dependencies_[group] = new(zone_) ZoneList<Handle<HeapObject> >(2, zone_); 248 dependencies_[group] = new(zone_) ZoneList<Handle<HeapObject> >(2, zone_);
256 } 249 }
257 return dependencies_[group]; 250 return dependencies_[group];
258 } 251 }
259 252
260 void CommitDependencies(Handle<Code> code); 253 void CommitDependencies(Handle<Code> code);
261 254
262 void RollbackDependencies(); 255 void RollbackDependencies();
263 256
264 void SaveHandles() { 257 void SaveHandles() {
265 SaveHandle(&closure_); 258 SaveHandle(&closure_);
266 SaveHandle(&shared_info_); 259 SaveHandle(&shared_info_);
267 SaveHandle(&context_); 260 SaveHandle(&context_);
268 SaveHandle(&script_); 261 SaveHandle(&script_);
269 SaveHandle(&osr_patched_code_); 262 SaveHandle(&unoptimized_code_);
270 } 263 }
271 264
272 BailoutReason bailout_reason() const { return bailout_reason_; } 265 BailoutReason bailout_reason() const { return bailout_reason_; }
273 void set_bailout_reason(BailoutReason reason) { bailout_reason_ = reason; } 266 void set_bailout_reason(BailoutReason reason) { bailout_reason_ = reason; }
274 267
275 int prologue_offset() const { 268 int prologue_offset() const {
276 ASSERT_NE(Code::kPrologueOffsetNotSet, prologue_offset_); 269 ASSERT_NE(Code::kPrologueOffsetNotSet, prologue_offset_);
277 return prologue_offset_; 270 return prologue_offset_;
278 } 271 }
279 272
(...skipping 26 matching lines...) Expand all
306 void AbortDueToDependencyChange() { 299 void AbortDueToDependencyChange() {
307 ASSERT(!OptimizingCompilerThread::IsOptimizerThread(isolate())); 300 ASSERT(!OptimizingCompilerThread::IsOptimizerThread(isolate()));
308 abort_due_to_dependency_ = true; 301 abort_due_to_dependency_ = true;
309 } 302 }
310 303
311 bool HasAbortedDueToDependencyChange() { 304 bool HasAbortedDueToDependencyChange() {
312 ASSERT(!OptimizingCompilerThread::IsOptimizerThread(isolate())); 305 ASSERT(!OptimizingCompilerThread::IsOptimizerThread(isolate()));
313 return abort_due_to_dependency_; 306 return abort_due_to_dependency_;
314 } 307 }
315 308
316 void SetOsrInfo(Handle<Code> code, uint32_t pc_offset) { 309 bool HasSameOsrEntry(Handle<JSFunction> function, BailoutId osr_ast_id) {
317 osr_patched_code_ = code; 310 return osr_ast_id_ == osr_ast_id && function.is_identical_to(closure_);
318 osr_pc_offset_ = pc_offset;
319 }
320
321 bool HasSameOsrEntry(Handle<JSFunction> function, uint32_t pc_offset) {
322 return osr_pc_offset_ == pc_offset && function.is_identical_to(closure_);
323 } 311 }
324 312
325 protected: 313 protected:
326 CompilationInfo(Handle<Script> script, 314 CompilationInfo(Handle<Script> script,
327 Zone* zone); 315 Zone* zone);
328 CompilationInfo(Handle<SharedFunctionInfo> shared_info, 316 CompilationInfo(Handle<SharedFunctionInfo> shared_info,
329 Zone* zone); 317 Zone* zone);
330 CompilationInfo(HydrogenCodeStub* stub, 318 CompilationInfo(HydrogenCodeStub* stub,
331 Isolate* isolate, 319 Isolate* isolate,
332 Zone* zone); 320 Zone* zone);
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 v8::Extension* extension_; 397 v8::Extension* extension_;
410 ScriptDataImpl* pre_parse_data_; 398 ScriptDataImpl* pre_parse_data_;
411 399
412 // The context of the caller for eval code, and the global context for a 400 // The context of the caller for eval code, and the global context for a
413 // global script. Will be a null handle otherwise. 401 // global script. Will be a null handle otherwise.
414 Handle<Context> context_; 402 Handle<Context> context_;
415 403
416 // Compilation mode flag and whether deoptimization is allowed. 404 // Compilation mode flag and whether deoptimization is allowed.
417 Mode mode_; 405 Mode mode_;
418 BailoutId osr_ast_id_; 406 BailoutId osr_ast_id_;
419 // The pc_offset corresponding to osr_ast_id_ in unoptimized code.
420 // We can look this up in the back edge table, but cache it for quick access.
421 uint32_t osr_pc_offset_;
422 // The unoptimized code we patched for OSR may not be the shared code 407 // The unoptimized code we patched for OSR may not be the shared code
423 // afterwards, since we may need to compile it again to include deoptimization 408 // afterwards, since we may need to compile it again to include deoptimization
424 // data. Keep track which code we patched. 409 // data. Keep track which code we patched.
425 Handle<Code> osr_patched_code_; 410 Handle<Code> unoptimized_code_;
426 411
427 // Flag whether compilation needs to be aborted due to dependency change. 412 // Flag whether compilation needs to be aborted due to dependency change.
428 bool abort_due_to_dependency_; 413 bool abort_due_to_dependency_;
429 414
430 // The zone from which the compilation pipeline working on this 415 // The zone from which the compilation pipeline working on this
431 // CompilationInfo allocates. 416 // CompilationInfo allocates.
432 Zone* zone_; 417 Zone* zone_;
433 418
434 DeferredHandles* deferred_handles_; 419 DeferredHandles* deferred_handles_;
435 420
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 class HGraph; 496 class HGraph;
512 class HOptimizedGraphBuilder; 497 class HOptimizedGraphBuilder;
513 class LChunk; 498 class LChunk;
514 499
515 // A helper class that calls the three compilation phases in 500 // A helper class that calls the three compilation phases in
516 // Crankshaft and keeps track of its state. The three phases 501 // Crankshaft and keeps track of its state. The three phases
517 // CreateGraph, OptimizeGraph and GenerateAndInstallCode can either 502 // CreateGraph, OptimizeGraph and GenerateAndInstallCode can either
518 // fail, bail-out to the full code generator or succeed. Apart from 503 // fail, bail-out to the full code generator or succeed. Apart from
519 // their return value, the status of the phase last run can be checked 504 // their return value, the status of the phase last run can be checked
520 // using last_status(). 505 // using last_status().
521 class RecompileJob: public ZoneObject { 506 class OptimizedCompileJob: public ZoneObject {
522 public: 507 public:
523 explicit RecompileJob(CompilationInfo* info) 508 explicit OptimizedCompileJob(CompilationInfo* info)
524 : info_(info), 509 : info_(info),
525 graph_builder_(NULL), 510 graph_builder_(NULL),
526 graph_(NULL), 511 graph_(NULL),
527 chunk_(NULL), 512 chunk_(NULL),
528 last_status_(FAILED), 513 last_status_(FAILED),
529 awaiting_install_(false) { } 514 awaiting_install_(false) { }
530 515
531 enum Status { 516 enum Status {
532 FAILED, BAILED_OUT, SUCCEEDED 517 FAILED, BAILED_OUT, SUCCEEDED
533 }; 518 };
534 519
535 MUST_USE_RESULT Status CreateGraph(); 520 MUST_USE_RESULT Status CreateGraph();
536 MUST_USE_RESULT Status OptimizeGraph(); 521 MUST_USE_RESULT Status OptimizeGraph();
537 MUST_USE_RESULT Status GenerateAndInstallCode(); 522 MUST_USE_RESULT Status GenerateCode();
538 523
539 Status last_status() const { return last_status_; } 524 Status last_status() const { return last_status_; }
540 CompilationInfo* info() const { return info_; } 525 CompilationInfo* info() const { return info_; }
541 Isolate* isolate() const { return info()->isolate(); } 526 Isolate* isolate() const { return info()->isolate(); }
542 527
543 MUST_USE_RESULT Status AbortOptimization() { 528 MUST_USE_RESULT Status AbortOptimization(
544 info_->AbortOptimization(); 529 BailoutReason reason = kNoReason) {
530 if (reason != kNoReason) info_->set_bailout_reason(reason);
531 return SetLastStatus(BAILED_OUT);
532 }
533
534 MUST_USE_RESULT Status AbortAndDisableOptimization(
535 BailoutReason reason = kNoReason) {
536 if (reason != kNoReason) info_->set_bailout_reason(reason);
545 info_->shared_info()->DisableOptimization(info_->bailout_reason()); 537 info_->shared_info()->DisableOptimization(info_->bailout_reason());
546 return SetLastStatus(BAILED_OUT); 538 return SetLastStatus(BAILED_OUT);
547 } 539 }
548 540
549 void WaitForInstall() { 541 void WaitForInstall() {
550 ASSERT(info_->is_osr()); 542 ASSERT(info_->is_osr());
551 awaiting_install_ = true; 543 awaiting_install_ = true;
552 } 544 }
553 545
554 bool IsWaitingForInstall() { return awaiting_install_; } 546 bool IsWaitingForInstall() { return awaiting_install_; }
555 547
556 private: 548 private:
557 CompilationInfo* info_; 549 CompilationInfo* info_;
558 HOptimizedGraphBuilder* graph_builder_; 550 HOptimizedGraphBuilder* graph_builder_;
559 HGraph* graph_; 551 HGraph* graph_;
560 LChunk* chunk_; 552 LChunk* chunk_;
561 TimeDelta time_taken_to_create_graph_; 553 TimeDelta time_taken_to_create_graph_;
562 TimeDelta time_taken_to_optimize_; 554 TimeDelta time_taken_to_optimize_;
563 TimeDelta time_taken_to_codegen_; 555 TimeDelta time_taken_to_codegen_;
564 Status last_status_; 556 Status last_status_;
565 bool awaiting_install_; 557 bool awaiting_install_;
566 558
567 MUST_USE_RESULT Status SetLastStatus(Status status) { 559 MUST_USE_RESULT Status SetLastStatus(Status status) {
568 last_status_ = status; 560 last_status_ = status;
569 return last_status_; 561 return last_status_;
570 } 562 }
571 void RecordOptimizationStats(); 563 void RecordOptimizationStats();
572 564
573 struct Timer { 565 struct Timer {
574 Timer(RecompileJob* job, TimeDelta* location) 566 Timer(OptimizedCompileJob* job, TimeDelta* location)
575 : job_(job), location_(location) { 567 : job_(job), location_(location) {
576 ASSERT(location_ != NULL); 568 ASSERT(location_ != NULL);
577 timer_.Start(); 569 timer_.Start();
578 } 570 }
579 571
580 ~Timer() { 572 ~Timer() {
581 *location_ += timer_.Elapsed(); 573 *location_ += timer_.Elapsed();
582 } 574 }
583 575
584 RecompileJob* job_; 576 OptimizedCompileJob* job_;
585 ElapsedTimer timer_; 577 ElapsedTimer timer_;
586 TimeDelta* location_; 578 TimeDelta* location_;
587 }; 579 };
588 }; 580 };
589 581
590 582
591 // The V8 compiler 583 // The V8 compiler
592 // 584 //
593 // General strategy: Source code is translated into an anonymous function w/o 585 // General strategy: Source code is translated into an anonymous function w/o
594 // parameters which then can be executed. If the source code contains other 586 // parameters which then can be executed. If the source code contains other
595 // functions, they will be compiled and allocated as part of the compilation 587 // functions, they will be compiled and allocated as part of the compilation
596 // of the source code. 588 // of the source code.
597 589
598 // Please note this interface returns shared function infos. This means you 590 // Please note this interface returns shared function infos. This means you
599 // need to call Factory::NewFunctionFromSharedFunctionInfo before you have a 591 // need to call Factory::NewFunctionFromSharedFunctionInfo before you have a
600 // real function with a context. 592 // real function with a context.
601 593
602 class Compiler : public AllStatic { 594 class Compiler : public AllStatic {
603 public: 595 public:
604 // Call count before primitive functions trigger their own optimization. 596 static Handle<Code> GetUnoptimizedCode(Handle<JSFunction> function);
605 static const int kCallsUntilPrimitiveOpt = 200; 597 static Handle<Code> GetUnoptimizedCode(Handle<SharedFunctionInfo> shared);
598 static bool EnsureCompiled(Handle<JSFunction> function,
599 ClearExceptionFlag flag);
600 static Handle<Code> GetCodeForDebugging(Handle<JSFunction> function);
606 601
607 // All routines return a SharedFunctionInfo. 602 #ifdef ENABLE_DEBUGGER_SUPPORT
608 // If an error occurs an exception is raised and the return handle 603 static void CompileForLiveEdit(Handle<Script> script);
609 // contains NULL. 604 #endif
610 605
611 // Compile a String source within a context. 606 // Compile a String source within a context for eval.
612 static Handle<SharedFunctionInfo> Compile(Handle<String> source, 607 static Handle<JSFunction> GetFunctionFromEval(Handle<String> source,
613 Handle<Object> script_name,
614 int line_offset,
615 int column_offset,
616 bool is_shared_cross_origin,
617 Handle<Context> context,
618 v8::Extension* extension,
619 ScriptDataImpl* pre_data,
620 Handle<Object> script_data,
621 NativesFlag is_natives_code);
622
623 // Compile a String source within a context for Eval.
624 static Handle<SharedFunctionInfo> CompileEval(Handle<String> source,
625 Handle<Context> context, 608 Handle<Context> context,
626 bool is_global,
627 LanguageMode language_mode, 609 LanguageMode language_mode,
628 ParseRestriction restriction, 610 ParseRestriction restriction,
629 int scope_position); 611 int scope_position);
630 612
631 // Compile from function info (used for lazy compilation). Returns true on 613 // Compile a String source within a context.
632 // success and false if the compilation resulted in a stack overflow. 614 static Handle<SharedFunctionInfo> CompileScript(Handle<String> source,
633 static bool CompileLazy(CompilationInfo* info); 615 Handle<Object> script_name,
616 int line_offset,
617 int column_offset,
618 bool is_shared_cross_origin,
619 Handle<Context> context,
620 v8::Extension* extension,
621 ScriptDataImpl* pre_data,
622 Handle<Object> script_data,
623 NativesFlag is_natives_code);
634 624
635 static bool RecompileConcurrent(Handle<JSFunction> function, 625 // Create a shared function info object (the code may be lazily compiled).
636 Handle<Code> unoptimized,
637 uint32_t osr_pc_offset = 0);
638
639 // Compile a shared function info object (the function is possibly lazily
640 // compiled).
641 static Handle<SharedFunctionInfo> BuildFunctionInfo(FunctionLiteral* node, 626 static Handle<SharedFunctionInfo> BuildFunctionInfo(FunctionLiteral* node,
642 Handle<Script> script); 627 Handle<Script> script);
643 628
644 // Set the function info for a newly compiled function. 629 enum ConcurrencyMode { NOT_CONCURRENT, CONCURRENT };
645 static void SetFunctionInfo(Handle<SharedFunctionInfo> function_info,
646 FunctionLiteral* lit,
647 bool is_toplevel,
648 Handle<Script> script);
649 630
650 static Handle<Code> InstallOptimizedCode(RecompileJob* job); 631 // Generate and return optimized code or start a concurrent optimization job.
632 // In the latter case, return the InOptimizationQueue builtin. On failure,
633 // return the empty handle.
634 static Handle<Code> GetOptimizedCode(
635 Handle<JSFunction> function,
636 Handle<Code> current_code,
637 ConcurrencyMode mode,
638 BailoutId osr_ast_id = BailoutId::None());
651 639
652 #ifdef ENABLE_DEBUGGER_SUPPORT 640 // Generate and return code from previously queued optimization job.
653 static bool MakeCodeForLiveEdit(CompilationInfo* info); 641 // On failure, return the empty handle.
654 #endif 642 static Handle<Code> GetConcurrentlyOptimizedCode(OptimizedCompileJob* job);
655 643
656 static void RecordFunctionCompilation(Logger::LogEventsAndTags tag, 644 static void RecordFunctionCompilation(Logger::LogEventsAndTags tag,
657 CompilationInfo* info, 645 CompilationInfo* info,
658 Handle<SharedFunctionInfo> shared); 646 Handle<SharedFunctionInfo> shared);
659 }; 647 };
660 648
661 649
662 class CompilationPhase BASE_EMBEDDED { 650 class CompilationPhase BASE_EMBEDDED {
663 public: 651 public:
664 CompilationPhase(const char* name, CompilationInfo* info); 652 CompilationPhase(const char* name, CompilationInfo* info);
(...skipping 14 matching lines...) Expand all
679 unsigned info_zone_start_allocation_size_; 667 unsigned info_zone_start_allocation_size_;
680 ElapsedTimer timer_; 668 ElapsedTimer timer_;
681 669
682 DISALLOW_COPY_AND_ASSIGN(CompilationPhase); 670 DISALLOW_COPY_AND_ASSIGN(CompilationPhase);
683 }; 671 };
684 672
685 673
686 } } // namespace v8::internal 674 } } // namespace v8::internal
687 675
688 #endif // V8_COMPILER_H_ 676 #endif // V8_COMPILER_H_
OLDNEW
« no previous file with comments | « src/compilation-cache.cc ('k') | src/compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698