| 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 #include <memory> | 8 #include <memory> | 
| 9 | 9 | 
| 10 #include "src/asmjs/asm-js.h" | 10 #include "src/asmjs/asm-js.h" | 
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 285     CodeEventListener::LogEventsAndTags log_tag = | 285     CodeEventListener::LogEventsAndTags log_tag = | 
| 286         Logger::ToNativeByScript(tag, *script); | 286         Logger::ToNativeByScript(tag, *script); | 
| 287     PROFILE(info->isolate(), | 287     PROFILE(info->isolate(), | 
| 288             CodeCreateEvent(log_tag, *abstract_code, *shared, script_name, | 288             CodeCreateEvent(log_tag, *abstract_code, *shared, script_name, | 
| 289                             line_num, column_num)); | 289                             line_num, column_num)); | 
| 290   } | 290   } | 
| 291 } | 291 } | 
| 292 | 292 | 
| 293 void EnsureFeedbackMetadata(CompilationInfo* info) { | 293 void EnsureFeedbackMetadata(CompilationInfo* info) { | 
| 294   DCHECK(info->has_shared_info()); | 294   DCHECK(info->has_shared_info()); | 
| 295 | 295   TypeFeedbackMetadata::EnsureAllocated( | 
| 296   // If no type feedback metadata exists, we create it now. At this point the | 296       info->isolate(), info->shared_info(), | 
| 297   // AstNumbering pass has already run. Note the snapshot can contain outdated | 297       info->literal()->feedback_vector_spec()); | 
| 298   // vectors for a different configuration, hence we also recreate a new vector |  | 
| 299   // when the function is not compiled (i.e. no code was serialized). |  | 
| 300 |  | 
| 301   // TODO(mvstanton): reintroduce is_empty() predicate to feedback_metadata(). |  | 
| 302   if (info->shared_info()->feedback_metadata()->length() == 0 || |  | 
| 303       !info->shared_info()->is_compiled()) { |  | 
| 304     Handle<TypeFeedbackMetadata> feedback_metadata = TypeFeedbackMetadata::New( |  | 
| 305         info->isolate(), info->literal()->feedback_vector_spec()); |  | 
| 306     info->shared_info()->set_feedback_metadata(*feedback_metadata); |  | 
| 307   } |  | 
| 308 |  | 
| 309   // It's very important that recompiles do not alter the structure of the type |  | 
| 310   // feedback vector. Verify that the structure fits the function literal. |  | 
| 311   CHECK(!info->shared_info()->feedback_metadata()->SpecDiffersFrom( |  | 
| 312       info->literal()->feedback_vector_spec())); |  | 
| 313 } | 298 } | 
| 314 | 299 | 
| 315 bool UseTurboFan(Handle<SharedFunctionInfo> shared) { | 300 bool UseTurboFan(Handle<SharedFunctionInfo> shared) { | 
| 316   bool optimization_disabled = shared->optimization_disabled(); | 301   bool optimization_disabled = shared->optimization_disabled(); | 
| 317   bool must_use_ignition_turbo = shared->must_use_ignition_turbo(); | 302   bool must_use_ignition_turbo = shared->must_use_ignition_turbo(); | 
| 318 | 303 | 
| 319   // Check the enabling conditions for Turbofan. | 304   // Check the enabling conditions for Turbofan. | 
| 320   // 1. "use asm" code. | 305   // 1. "use asm" code. | 
| 321   bool is_turbofanable_asm = | 306   bool is_turbofanable_asm = | 
| 322       FLAG_turbo_asm && shared->asm_function() && !optimization_disabled; | 307       FLAG_turbo_asm && shared->asm_function() && !optimization_disabled; | 
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 374   // Finally respect the filter. | 359   // Finally respect the filter. | 
| 375   return shared->PassesFilter(FLAG_ignition_filter); | 360   return shared->PassesFilter(FLAG_ignition_filter); | 
| 376 } | 361 } | 
| 377 | 362 | 
| 378 CompilationJob* GetUnoptimizedCompilationJob(CompilationInfo* info) { | 363 CompilationJob* GetUnoptimizedCompilationJob(CompilationInfo* info) { | 
| 379   // Function should have been parsed and analyzed before creating a compilation | 364   // Function should have been parsed and analyzed before creating a compilation | 
| 380   // job. | 365   // job. | 
| 381   DCHECK_NOT_NULL(info->literal()); | 366   DCHECK_NOT_NULL(info->literal()); | 
| 382   DCHECK_NOT_NULL(info->scope()); | 367   DCHECK_NOT_NULL(info->scope()); | 
| 383 | 368 | 
| 384   EnsureFeedbackMetadata(info); |  | 
| 385   if (ShouldUseIgnition(info)) { | 369   if (ShouldUseIgnition(info)) { | 
|  | 370     // The bytecode generator will take care of feedback metadata creation. | 
| 386     return interpreter::Interpreter::NewCompilationJob(info); | 371     return interpreter::Interpreter::NewCompilationJob(info); | 
| 387   } else { | 372   } else { | 
|  | 373     EnsureFeedbackMetadata(info); | 
| 388     return FullCodeGenerator::NewCompilationJob(info); | 374     return FullCodeGenerator::NewCompilationJob(info); | 
| 389   } | 375   } | 
| 390 } | 376 } | 
| 391 | 377 | 
| 392 void InstallSharedScopeInfo(CompilationInfo* info, | 378 void InstallSharedScopeInfo(CompilationInfo* info, | 
| 393                             Handle<SharedFunctionInfo> shared) { | 379                             Handle<SharedFunctionInfo> shared) { | 
| 394   Handle<ScopeInfo> scope_info = info->scope()->scope_info(); | 380   Handle<ScopeInfo> scope_info = info->scope()->scope_info(); | 
| 395   shared->set_scope_info(*scope_info); | 381   shared->set_scope_info(*scope_info); | 
| 396   Scope* outer_scope = info->scope()->GetOuterScopeWithContext(); | 382   Scope* outer_scope = info->scope()->GetOuterScopeWithContext(); | 
| 397   if (outer_scope) { | 383   if (outer_scope) { | 
| (...skipping 1372 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1770     DCHECK(shared->is_compiled()); | 1756     DCHECK(shared->is_compiled()); | 
| 1771     function->set_literals(cached.literals); | 1757     function->set_literals(cached.literals); | 
| 1772   } else if (shared->is_compiled()) { | 1758   } else if (shared->is_compiled()) { | 
| 1773     // TODO(mvstanton): pass pretenure flag to EnsureLiterals. | 1759     // TODO(mvstanton): pass pretenure flag to EnsureLiterals. | 
| 1774     JSFunction::EnsureLiterals(function); | 1760     JSFunction::EnsureLiterals(function); | 
| 1775   } | 1761   } | 
| 1776 } | 1762 } | 
| 1777 | 1763 | 
| 1778 }  // namespace internal | 1764 }  // namespace internal | 
| 1779 }  // namespace v8 | 1765 }  // namespace v8 | 
| OLD | NEW | 
|---|