OLD | NEW |
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 "src/compiler.h" | 5 #include "src/compiler.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "src/ast/ast-numbering.h" | 9 #include "src/ast/ast-numbering.h" |
10 #include "src/ast/prettyprinter.h" | 10 #include "src/ast/prettyprinter.h" |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
426 info->shared_info()->set_feedback_metadata(*feedback_metadata); | 426 info->shared_info()->set_feedback_metadata(*feedback_metadata); |
427 } | 427 } |
428 | 428 |
429 // It's very important that recompiles do not alter the structure of the type | 429 // It's very important that recompiles do not alter the structure of the type |
430 // feedback vector. Verify that the structure fits the function literal. | 430 // feedback vector. Verify that the structure fits the function literal. |
431 CHECK(!info->shared_info()->feedback_metadata()->SpecDiffersFrom( | 431 CHECK(!info->shared_info()->feedback_metadata()->SpecDiffersFrom( |
432 info->literal()->feedback_vector_spec())); | 432 info->literal()->feedback_vector_spec())); |
433 } | 433 } |
434 | 434 |
435 bool UseIgnition(CompilationInfo* info) { | 435 bool UseIgnition(CompilationInfo* info) { |
436 if (info->is_debug()) return false; | 436 DCHECK(info->has_shared_info()); |
| 437 |
| 438 // When requesting debug code as a replacement for existing code, we provide |
| 439 // the same kind as the existing code (to prevent implicit tier-change). |
| 440 if (info->is_debug() && info->shared_info()->is_compiled()) { |
| 441 return info->shared_info()->HasBytecodeArray(); |
| 442 } |
| 443 |
| 444 // For generator or async functions we might avoid Ignition wholesale. |
437 if (info->shared_info()->is_resumable() && !FLAG_ignition_generators) { | 445 if (info->shared_info()->is_resumable() && !FLAG_ignition_generators) { |
438 return false; | 446 return false; |
439 } | 447 } |
440 | 448 |
441 // Since we can't OSR from Ignition, skip Ignition for asm.js functions. | 449 // Since we can't OSR from Ignition, skip Ignition for asm.js functions. |
442 if (info->shared_info()->asm_function()) { | 450 if (info->shared_info()->asm_function()) { |
443 return false; | 451 return false; |
444 } | 452 } |
445 | 453 |
446 // Checks whether top level functions should be passed by the filter. | 454 // Checks whether top level functions should be passed by the filter. |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 | 510 |
503 void InstallSharedScopeInfo(CompilationInfo* info, | 511 void InstallSharedScopeInfo(CompilationInfo* info, |
504 Handle<SharedFunctionInfo> shared) { | 512 Handle<SharedFunctionInfo> shared) { |
505 Handle<ScopeInfo> scope_info = | 513 Handle<ScopeInfo> scope_info = |
506 ScopeInfo::Create(info->isolate(), info->zone(), info->scope()); | 514 ScopeInfo::Create(info->isolate(), info->zone(), info->scope()); |
507 shared->set_scope_info(*scope_info); | 515 shared->set_scope_info(*scope_info); |
508 } | 516 } |
509 | 517 |
510 void InstallSharedCompilationResult(CompilationInfo* info, | 518 void InstallSharedCompilationResult(CompilationInfo* info, |
511 Handle<SharedFunctionInfo> shared) { | 519 Handle<SharedFunctionInfo> shared) { |
| 520 // TODO(mstarzinger): Compiling for debug code might be used to reveal inner |
| 521 // functions via {FindSharedFunctionInfoInScript}, in which case we end up |
| 522 // regenerating existing bytecode. Fix this! |
| 523 if (info->is_debug() && info->has_bytecode_array()) { |
| 524 shared->ClearBytecodeArray(); |
| 525 } |
512 // Assert that we are not overwriting (possibly patched) debug code. | 526 // Assert that we are not overwriting (possibly patched) debug code. |
513 DCHECK(!shared->HasDebugInfo()); | 527 DCHECK(!shared->HasDebugInfo()); |
514 DCHECK(!info->code().is_null()); | 528 DCHECK(!info->code().is_null()); |
515 shared->ReplaceCode(*info->code()); | 529 shared->ReplaceCode(*info->code()); |
516 if (info->has_bytecode_array()) { | 530 if (info->has_bytecode_array()) { |
517 DCHECK(!shared->HasBytecodeArray()); // Only compiled once. | 531 DCHECK(!shared->HasBytecodeArray()); // Only compiled once. |
518 shared->set_bytecode_array(*info->bytecode_array()); | 532 shared->set_bytecode_array(*info->bytecode_array()); |
519 } | 533 } |
520 } | 534 } |
521 | 535 |
(...skipping 1269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1791 DCHECK(shared->is_compiled()); | 1805 DCHECK(shared->is_compiled()); |
1792 function->set_literals(cached.literals); | 1806 function->set_literals(cached.literals); |
1793 } else if (shared->is_compiled()) { | 1807 } else if (shared->is_compiled()) { |
1794 // TODO(mvstanton): pass pretenure flag to EnsureLiterals. | 1808 // TODO(mvstanton): pass pretenure flag to EnsureLiterals. |
1795 JSFunction::EnsureLiterals(function); | 1809 JSFunction::EnsureLiterals(function); |
1796 } | 1810 } |
1797 } | 1811 } |
1798 | 1812 |
1799 } // namespace internal | 1813 } // namespace internal |
1800 } // namespace v8 | 1814 } // namespace v8 |
OLD | NEW |