summaryrefslogtreecommitdiff
path: root/deps/v8/src/optimizing-compile-dispatcher.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/optimizing-compile-dispatcher.cc')
-rw-r--r--deps/v8/src/optimizing-compile-dispatcher.cc142
1 files changed, 9 insertions, 133 deletions
diff --git a/deps/v8/src/optimizing-compile-dispatcher.cc b/deps/v8/src/optimizing-compile-dispatcher.cc
index 4836b9bebb..ed202242ba 100644
--- a/deps/v8/src/optimizing-compile-dispatcher.cc
+++ b/deps/v8/src/optimizing-compile-dispatcher.cc
@@ -20,17 +20,8 @@ void DisposeOptimizedCompileJob(OptimizedCompileJob* job,
// The recompile job is allocated in the CompilationInfo's zone.
CompilationInfo* info = job->info();
if (restore_function_code) {
- if (info->is_osr()) {
- if (!job->IsWaitingForInstall()) {
- // Remove stack check that guards OSR entry on original code.
- Handle<Code> code = info->unoptimized_code();
- uint32_t offset = code->TranslateAstIdToPcOffset(info->osr_ast_id());
- BackEdgeTable::RemoveStackCheck(code, offset);
- }
- } else {
- Handle<JSFunction> function = info->closure();
- function->ReplaceCode(function->shared()->code());
- }
+ Handle<JSFunction> function = info->closure();
+ function->ReplaceCode(function->shared()->code());
}
delete info;
}
@@ -92,14 +83,6 @@ OptimizingCompileDispatcher::~OptimizingCompileDispatcher() {
#endif
DCHECK_EQ(0, input_queue_length_);
DeleteArray(input_queue_);
- if (FLAG_concurrent_osr) {
-#ifdef DEBUG
- for (int i = 0; i < osr_buffer_capacity_; i++) {
- CHECK_NULL(osr_buffer_[i]);
- }
-#endif
- DeleteArray(osr_buffer_);
- }
}
@@ -159,16 +142,6 @@ void OptimizingCompileDispatcher::FlushOutputQueue(bool restore_function_code) {
}
-void OptimizingCompileDispatcher::FlushOsrBuffer(bool restore_function_code) {
- for (int i = 0; i < osr_buffer_capacity_; i++) {
- if (osr_buffer_[i] != NULL) {
- DisposeOptimizedCompileJob(osr_buffer_[i], restore_function_code);
- osr_buffer_[i] = NULL;
- }
- }
-}
-
-
void OptimizingCompileDispatcher::Flush() {
base::Release_Store(&mode_, static_cast<base::AtomicWord>(FLUSH));
if (FLAG_block_concurrent_recompilation) Unblock();
@@ -178,7 +151,6 @@ void OptimizingCompileDispatcher::Flush() {
base::Release_Store(&mode_, static_cast<base::AtomicWord>(COMPILE));
}
FlushOutputQueue(true);
- if (FLAG_concurrent_osr) FlushOsrBuffer(true);
if (FLAG_trace_concurrent_recompilation) {
PrintF(" ** Flushed concurrent recompilation queues.\n");
}
@@ -202,13 +174,6 @@ void OptimizingCompileDispatcher::Stop() {
} else {
FlushOutputQueue(false);
}
-
- if (FLAG_concurrent_osr) FlushOsrBuffer(false);
-
- if ((FLAG_trace_osr || FLAG_trace_concurrent_recompilation) &&
- FLAG_concurrent_osr) {
- PrintF("[COSR hit rate %d / %d]\n", osr_hits_, osr_attempts_);
- }
}
@@ -225,31 +190,15 @@ void OptimizingCompileDispatcher::InstallOptimizedFunctions() {
}
CompilationInfo* info = job->info();
Handle<JSFunction> function(*info->closure());
- if (info->is_osr()) {
- if (FLAG_trace_osr) {
- PrintF("[COSR - ");
+ if (function->IsOptimized()) {
+ if (FLAG_trace_concurrent_recompilation) {
+ PrintF(" ** Aborting compilation for ");
function->ShortPrint();
- PrintF(" is ready for install and entry at AST id %d]\n",
- info->osr_ast_id().ToInt());
+ PrintF(" as it has already been optimized.\n");
}
- job->WaitForInstall();
- // Remove stack check that guards OSR entry on original code.
- Handle<Code> code = info->unoptimized_code();
- uint32_t offset = code->TranslateAstIdToPcOffset(info->osr_ast_id());
- BackEdgeTable::RemoveStackCheck(code, offset);
+ DisposeOptimizedCompileJob(job, false);
} else {
- if (function->IsOptimized()) {
- if (FLAG_trace_concurrent_recompilation) {
- PrintF(" ** Aborting compilation for ");
- function->ShortPrint();
- PrintF(" as it has already been optimized.\n");
- }
- DisposeOptimizedCompileJob(job, false);
- } else {
- MaybeHandle<Code> code = Compiler::GetConcurrentlyOptimizedCode(job);
- function->ReplaceCode(code.is_null() ? function->shared()->code()
- : *code.ToHandleChecked());
- }
+ Compiler::FinalizeOptimizedCompileJob(job);
}
}
}
@@ -258,18 +207,7 @@ void OptimizingCompileDispatcher::InstallOptimizedFunctions() {
void OptimizingCompileDispatcher::QueueForOptimization(
OptimizedCompileJob* job) {
DCHECK(IsQueueAvailable());
- CompilationInfo* info = job->info();
- if (info->is_osr()) {
- osr_attempts_++;
- AddToOsrBuffer(job);
- // Add job to the front of the input queue.
- base::LockGuard<base::Mutex> access_input_queue(&input_queue_mutex_);
- DCHECK_LT(input_queue_length_, input_queue_capacity_);
- // Move shift_ back by one.
- input_queue_shift_ = InputQueueIndex(input_queue_capacity_ - 1);
- input_queue_[InputQueueIndex(0)] = job;
- input_queue_length_++;
- } else {
+ {
// Add job to the back of the input queue.
base::LockGuard<base::Mutex> access_input_queue(&input_queue_mutex_);
DCHECK_LT(input_queue_length_, input_queue_capacity_);
@@ -294,67 +232,5 @@ void OptimizingCompileDispatcher::Unblock() {
}
-OptimizedCompileJob* OptimizingCompileDispatcher::FindReadyOSRCandidate(
- Handle<JSFunction> function, BailoutId osr_ast_id) {
- for (int i = 0; i < osr_buffer_capacity_; i++) {
- OptimizedCompileJob* current = osr_buffer_[i];
- if (current != NULL && current->IsWaitingForInstall() &&
- current->info()->HasSameOsrEntry(function, osr_ast_id)) {
- osr_hits_++;
- osr_buffer_[i] = NULL;
- return current;
- }
- }
- return NULL;
-}
-
-
-bool OptimizingCompileDispatcher::IsQueuedForOSR(Handle<JSFunction> function,
- BailoutId osr_ast_id) {
- for (int i = 0; i < osr_buffer_capacity_; i++) {
- OptimizedCompileJob* current = osr_buffer_[i];
- if (current != NULL &&
- current->info()->HasSameOsrEntry(function, osr_ast_id)) {
- return !current->IsWaitingForInstall();
- }
- }
- return false;
-}
-
-
-bool OptimizingCompileDispatcher::IsQueuedForOSR(JSFunction* function) {
- for (int i = 0; i < osr_buffer_capacity_; i++) {
- OptimizedCompileJob* current = osr_buffer_[i];
- if (current != NULL && *current->info()->closure() == function) {
- return !current->IsWaitingForInstall();
- }
- }
- return false;
-}
-
-
-void OptimizingCompileDispatcher::AddToOsrBuffer(OptimizedCompileJob* job) {
- // Find the next slot that is empty or has a stale job.
- OptimizedCompileJob* stale = NULL;
- while (true) {
- stale = osr_buffer_[osr_buffer_cursor_];
- if (stale == NULL || stale->IsWaitingForInstall()) break;
- osr_buffer_cursor_ = (osr_buffer_cursor_ + 1) % osr_buffer_capacity_;
- }
-
- // Add to found slot and dispose the evicted job.
- if (stale != NULL) {
- DCHECK(stale->IsWaitingForInstall());
- CompilationInfo* info = stale->info();
- if (FLAG_trace_osr) {
- PrintF("[COSR - Discarded ");
- info->closure()->PrintName();
- PrintF(", AST id %d]\n", info->osr_ast_id().ToInt());
- }
- DisposeOptimizedCompileJob(stale, false);
- }
- osr_buffer_[osr_buffer_cursor_] = job;
- osr_buffer_cursor_ = (osr_buffer_cursor_ + 1) % osr_buffer_capacity_;
-}
} // namespace internal
} // namespace v8