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

Unified Diff: src/compiler.cc

Issue 1906823002: Move of the type feedback vector to the closure. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: REBASE. Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/code-stubs-hydrogen.cc ('k') | src/compiler/access-builder.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler.cc
diff --git a/src/compiler.cc b/src/compiler.cc
index 0b505ffdd91254d094e48462a93c48c5b64595ca..f2504a8f52901739da3d4d2708ae7ff694a4b7aa 100644
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -406,25 +406,25 @@ void RecordFunctionCompilation(Logger::LogEventsAndTags tag,
}
}
-void EnsureFeedbackVector(CompilationInfo* info) {
+void EnsureFeedbackMetadata(CompilationInfo* info) {
DCHECK(info->has_shared_info());
- // If no type feedback vector exists, we create one now. At this point the
+ // If no type feedback metadata exists, we create it now. At this point the
// AstNumbering pass has already run. Note the snapshot can contain outdated
// vectors for a different configuration, hence we also recreate a new vector
// when the function is not compiled (i.e. no code was serialized).
- if (info->shared_info()->feedback_vector()->is_empty() ||
+
+ // TODO(mvstanton): reintroduce is_empty() predicate to feedback_metadata().
+ if (info->shared_info()->feedback_metadata()->length() == 0 ||
!info->shared_info()->is_compiled()) {
Handle<TypeFeedbackMetadata> feedback_metadata = TypeFeedbackMetadata::New(
info->isolate(), info->literal()->feedback_vector_spec());
- Handle<TypeFeedbackVector> feedback_vector =
- TypeFeedbackVector::New(info->isolate(), feedback_metadata);
- info->shared_info()->set_feedback_vector(*feedback_vector);
+ info->shared_info()->set_feedback_metadata(*feedback_metadata);
}
// It's very important that recompiles do not alter the structure of the type
// feedback vector. Verify that the structure fits the function literal.
- CHECK(!info->shared_info()->feedback_vector()->metadata()->SpecDiffersFrom(
+ CHECK(!info->shared_info()->feedback_metadata()->SpecDiffersFrom(
info->literal()->feedback_vector_spec()));
}
@@ -458,7 +458,7 @@ int CodeAndMetadataSize(CompilationInfo* info) {
bool GenerateUnoptimizedCode(CompilationInfo* info) {
bool success;
- EnsureFeedbackVector(info);
+ EnsureFeedbackMetadata(info);
if (FLAG_validate_asm && info->scope()->asm_module()) {
AsmTyper typer(info->isolate(), info->zone(), *(info->script()),
info->literal());
@@ -633,8 +633,11 @@ bool GetOptimizedCodeNow(CompilationJob* job) {
// Parsing is not required when optimizing from existing bytecode.
if (!info->is_optimizing_from_bytecode()) {
if (!Compiler::ParseAndAnalyze(info->parse_info())) return false;
+ EnsureFeedbackMetadata(info);
}
+ JSFunction::EnsureLiterals(info->closure());
+
TimerEventScope<TimerEventRecompileSynchronous> timer(isolate);
TRACE_EVENT0("v8", "V8.RecompileSynchronous");
@@ -677,8 +680,11 @@ bool GetOptimizedCodeLater(CompilationJob* job) {
// Parsing is not required when optimizing from existing bytecode.
if (!info->is_optimizing_from_bytecode()) {
if (!Compiler::ParseAndAnalyze(info->parse_info())) return false;
+ EnsureFeedbackMetadata(info);
}
+ JSFunction::EnsureLiterals(info->closure());
+
// Reopen handles in the new CompilationHandleScope.
info->ReopenHandlesInNewHandleScope();
info->parse_info()->ReopenHandlesInNewHandleScope();
@@ -1139,6 +1145,7 @@ bool Compiler::Compile(Handle<JSFunction> function, ClearExceptionFlag flag) {
// Install code on closure.
function->ReplaceCode(*code);
+ JSFunction::EnsureLiterals(function);
// Check postconditions on success.
DCHECK(!isolate->has_pending_exception());
@@ -1195,6 +1202,7 @@ bool Compiler::CompileOptimized(Handle<JSFunction> function,
// Install code on closure.
function->ReplaceCode(*code);
+ JSFunction::EnsureLiterals(function);
// Check postconditions on success.
DCHECK(!isolate->has_pending_exception());
@@ -1325,7 +1333,7 @@ bool Compiler::EnsureDeoptimizationSupport(CompilationInfo* info) {
shared->code()->has_reloc_info_for_serialization()) {
unoptimized.PrepareForSerializing();
}
- EnsureFeedbackVector(&unoptimized);
+ EnsureFeedbackMetadata(&unoptimized);
if (!FullCodeGenerator::MakeCode(&unoptimized)) return false;
// TODO(4280): For now we play it safe and remove the bytecode array when we
@@ -1686,7 +1694,7 @@ Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfoForNative(
name, fun->shared()->num_literals(), FunctionKind::kNormalFunction, code,
Handle<ScopeInfo>(fun->shared()->scope_info()));
shared->set_construct_stub(*construct_stub);
- shared->set_feedback_vector(fun->shared()->feedback_vector());
+ shared->set_feedback_metadata(fun->shared()->feedback_metadata());
// Copy the function data to the shared function info.
shared->set_function_data(fun->shared()->function_data());
@@ -1773,21 +1781,11 @@ void Compiler::PostInstantiation(Handle<JSFunction> function,
}
if (cached.literals != nullptr) {
+ DCHECK(shared->is_compiled());
function->set_literals(cached.literals);
- } else {
- Isolate* isolate = function->GetIsolate();
- int number_of_literals = shared->num_literals();
- Handle<LiteralsArray> literals =
- LiteralsArray::New(isolate, handle(shared->feedback_vector()),
- number_of_literals, pretenure);
- function->set_literals(*literals);
-
- // Cache context-specific literals.
- MaybeHandle<Code> code;
- if (cached.code != nullptr) code = handle(cached.code);
- Handle<Context> native_context(function->context()->native_context());
- SharedFunctionInfo::AddToOptimizedCodeMap(shared, native_context, code,
- literals, BailoutId::None());
+ } else if (shared->is_compiled()) {
+ // TODO(mvstanton): pass pretenure flag to EnsureLiterals.
+ JSFunction::EnsureLiterals(function);
}
}
« no previous file with comments | « src/code-stubs-hydrogen.cc ('k') | src/compiler/access-builder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698