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

Side by Side Diff: src/compiler.cc

Issue 2627783008: [ignition] Create the type feedback vector after bytecode generation (Closed)
Patch Set: Extract common functionality to static method on TypeFeedbackMetadata Created 3 years, 11 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
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 "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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | src/interpreter/bytecode-generator.cc » ('j') | src/interpreter/bytecode-generator.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698