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

Unified Diff: src/compiler.cc

Issue 1930773003: [compiler] Untangle CompilationInfo allocated with new. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@local_cleanup-compiler-simplify-30
Patch Set: Fix initialization order. Created 4 years, 8 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/compiler.h ('k') | src/compiler/pipeline.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 076af855748f3a7a70af8b0bf43ae53ef9c046e2..73eeba09cf96e96cc417aaccf1cdb87e46a6f62d 100644
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -77,28 +77,6 @@ class CompilationHandleScope BASE_EMBEDDED {
CompilationInfo* info_;
};
-// Exactly like a CompilationInfo, except being allocated via {new} and it also
-// creates and enters a Zone on construction and deallocates it on destruction.
-class CompilationInfoWithZone : public CompilationInfo {
- public:
- explicit CompilationInfoWithZone(Handle<JSFunction> function)
- : CompilationInfo(new ParseInfo(&zone_, function), function),
- zone_(function->GetIsolate()->allocator()) {}
-
- // Virtual destructor because a CompilationInfoWithZone has to exit the
- // zone scope and get rid of dependent maps even when the destructor is
- // called when cast as a CompilationInfo.
- virtual ~CompilationInfoWithZone() {
- DisableFutureOptimization();
- dependencies()->Rollback();
- delete parse_info_;
- parse_info_ = nullptr;
- }
-
- private:
- Zone zone_;
-};
-
// Helper that times a scoped region and records the elapsed time.
struct ScopedTimer {
explicit ScopedTimer(base::TimeDelta* location) : location_(location) {
@@ -168,12 +146,8 @@ CompilationInfo::CompilationInfo(ParseInfo* parse_info,
CompilationInfo::~CompilationInfo() {
DisableFutureOptimization();
+ dependencies()->Rollback();
delete deferred_handles_;
-#ifdef DEBUG
- // Check that no dependent maps have been added or added dependent maps have
- // been rolled back or committed.
- DCHECK(dependencies()->IsEmpty());
-#endif // DEBUG
}
@@ -669,15 +643,14 @@ bool Renumber(ParseInfo* parse_info) {
return true;
}
-bool UseTurboFan(CompilationInfo* info) {
- bool optimization_disabled = info->shared_info()->optimization_disabled();
- bool dont_crankshaft = info->shared_info()->dont_crankshaft();
+bool UseTurboFan(Handle<SharedFunctionInfo> shared, BailoutId osr_ast_id) {
+ bool optimization_disabled = shared->optimization_disabled();
+ bool dont_crankshaft = shared->dont_crankshaft();
// Check the enabling conditions for Turbofan.
// 1. "use asm" code.
- bool is_turbofanable_asm = FLAG_turbo_asm &&
- info->shared_info()->asm_function() &&
- !optimization_disabled;
+ bool is_turbofanable_asm =
+ FLAG_turbo_asm && shared->asm_function() && !optimization_disabled;
// 2. Fallback for features unsupported by Crankshaft.
bool is_unsupported_by_crankshaft_but_turbofanable =
@@ -685,11 +658,10 @@ bool UseTurboFan(CompilationInfo* info) {
!optimization_disabled;
// 3. Explicitly enabled by the command-line filter.
- bool passes_turbo_filter =
- info->shared_info()->PassesFilter(FLAG_turbo_filter);
+ bool passes_turbo_filter = shared->PassesFilter(FLAG_turbo_filter);
// If this is OSR request, OSR must be enabled by Turbofan.
- bool passes_osr_test = FLAG_turbo_osr || !info->is_osr();
+ bool passes_osr_test = FLAG_turbo_osr || osr_ast_id.IsNone();
return (is_turbofanable_asm ||
is_unsupported_by_crankshaft_but_turbofanable ||
@@ -800,11 +772,14 @@ MaybeHandle<Code> GetOptimizedCode(Handle<JSFunction> function,
return MaybeHandle<Code>();
}
- base::SmartPointer<CompilationInfo> info(
- new CompilationInfoWithZone(function));
VMState<COMPILER> state(isolate);
DCHECK(!isolate->has_pending_exception());
PostponeInterruptsScope postpone(isolate);
+ bool use_turbofan = UseTurboFan(shared, osr_ast_id);
+ base::SmartPointer<CompilationJob> job(
+ use_turbofan ? compiler::Pipeline::NewCompilationJob(function)
+ : new HCompilationJob(function));
+ CompilationInfo* info = job->info();
info->SetOptimizingForOsr(osr_ast_id);
@@ -833,12 +808,7 @@ MaybeHandle<Code> GetOptimizedCode(Handle<JSFunction> function,
TimerEventScope<TimerEventOptimizeCode> optimize_code_timer(isolate);
TRACE_EVENT0("v8", "V8.OptimizeCode");
- bool use_turbofan = UseTurboFan(info.get());
- base::SmartPointer<CompilationJob> job(
- use_turbofan ? compiler::Pipeline::NewCompilationJob(info.get())
- : new HCompilationJob(info.get()));
-
- // TruboFan can optimize directly from existing bytecode.
+ // TurboFan can optimize directly from existing bytecode.
if (FLAG_turbo_from_bytecode && use_turbofan &&
info->shared_info()->HasBytecodeArray()) {
info->MarkAsOptimizeFromBytecode();
@@ -846,7 +816,6 @@ MaybeHandle<Code> GetOptimizedCode(Handle<JSFunction> function,
if (mode == Compiler::CONCURRENT) {
if (GetOptimizedCodeLater(job.get())) {
- info.Detach(); // The background recompile job owns this now.
job.Detach(); // The background recompile job owns this now.
return isolate->builtins()->InOptimizationQueue();
}
@@ -1755,10 +1724,10 @@ MaybeHandle<Code> Compiler::GetOptimizedCodeForOSR(Handle<JSFunction> function,
return GetOptimizedCode(function, NOT_CONCURRENT, osr_ast_id, osr_frame);
}
-void Compiler::FinalizeCompilationJob(CompilationJob* job) {
- // Take ownership of compilation info. Deleting compilation info
- // also tears down the zone.
- base::SmartPointer<CompilationInfo> info(job->info());
+void Compiler::FinalizeCompilationJob(CompilationJob* raw_job) {
+ // Take ownership of compilation job. Deleting job also tears down the zone.
+ base::SmartPointer<CompilationJob> job(raw_job);
+ CompilationInfo* info = job->info();
Isolate* isolate = info->isolate();
VMState<COMPILER> state(isolate);
@@ -1782,10 +1751,10 @@ void Compiler::FinalizeCompilationJob(CompilationJob* job) {
job->RetryOptimization(kBailedOutDueToDependencyChange);
} else if (job->GenerateCode() == CompilationJob::SUCCEEDED) {
job->RecordOptimizationStats();
- RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, info.get());
+ RecordFunctionCompilation(Logger::LAZY_COMPILE_TAG, info);
if (shared->SearchOptimizedCodeMap(info->context()->native_context(),
info->osr_ast_id()).code == nullptr) {
- InsertCodeIntoOptimizedCodeMap(info.get());
+ InsertCodeIntoOptimizedCodeMap(info);
}
if (FLAG_trace_opt) {
PrintF("[completed optimizing ");
@@ -1793,7 +1762,6 @@ void Compiler::FinalizeCompilationJob(CompilationJob* job) {
PrintF("]\n");
}
info->closure()->ReplaceCode(*info->code());
- delete job;
return;
}
}
@@ -1805,7 +1773,6 @@ void Compiler::FinalizeCompilationJob(CompilationJob* job) {
PrintF(" because: %s]\n", GetBailoutReason(info->bailout_reason()));
}
info->closure()->ReplaceCode(shared->code());
- delete job;
}
void Compiler::PostInstantiation(Handle<JSFunction> function,
« no previous file with comments | « src/compiler.h ('k') | src/compiler/pipeline.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698