summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp')
-rw-r--r--Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp55
1 files changed, 34 insertions, 21 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp b/Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp
index 17b45a328..ae815422e 100644
--- a/Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp
+++ b/Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp
@@ -30,13 +30,13 @@
#include "CodeBlock.h"
#include "DFGJITCode.h"
-#include "Executable.h"
+#include "FTLForOSREntryJITCode.h"
+#include "JSCInlines.h"
namespace JSC { namespace DFG {
-ToFTLForOSREntryDeferredCompilationCallback::ToFTLForOSREntryDeferredCompilationCallback(
- PassRefPtr<CodeBlock> dfgCodeBlock)
- : m_dfgCodeBlock(dfgCodeBlock)
+ToFTLForOSREntryDeferredCompilationCallback::ToFTLForOSREntryDeferredCompilationCallback(JITCode::TriggerReason* forcedOSREntryTrigger)
+ : m_forcedOSREntryTrigger(forcedOSREntryTrigger)
{
}
@@ -44,42 +44,55 @@ ToFTLForOSREntryDeferredCompilationCallback::~ToFTLForOSREntryDeferredCompilatio
{
}
-PassRefPtr<ToFTLForOSREntryDeferredCompilationCallback>
-ToFTLForOSREntryDeferredCompilationCallback::create(
- PassRefPtr<CodeBlock> dfgCodeBlock)
+Ref<ToFTLForOSREntryDeferredCompilationCallback>ToFTLForOSREntryDeferredCompilationCallback::create(JITCode::TriggerReason* forcedOSREntryTrigger)
{
- return adoptRef(new ToFTLForOSREntryDeferredCompilationCallback(dfgCodeBlock));
+ return adoptRef(*new ToFTLForOSREntryDeferredCompilationCallback(forcedOSREntryTrigger));
}
void ToFTLForOSREntryDeferredCompilationCallback::compilationDidBecomeReadyAsynchronously(
- CodeBlock* codeBlock)
+ CodeBlock* codeBlock, CodeBlock* profiledDFGCodeBlock)
{
if (Options::verboseOSR()) {
dataLog(
- "Optimizing compilation of ", *codeBlock, " (for ", *m_dfgCodeBlock,
+ "Optimizing compilation of ", *codeBlock, " (for ", *profiledDFGCodeBlock,
") did become ready.\n");
}
-
- m_dfgCodeBlock->jitCode()->dfg()->forceOptimizationSlowPathConcurrently(
- m_dfgCodeBlock.get());
+
+ *m_forcedOSREntryTrigger = JITCode::TriggerReason::CompilationDone;
}
void ToFTLForOSREntryDeferredCompilationCallback::compilationDidComplete(
- CodeBlock* codeBlock, CompilationResult result)
+ CodeBlock* codeBlock, CodeBlock* profiledDFGCodeBlock, CompilationResult result)
{
if (Options::verboseOSR()) {
dataLog(
- "Optimizing compilation of ", *codeBlock, " (for ", *m_dfgCodeBlock,
+ "Optimizing compilation of ", *codeBlock, " (for ", *profiledDFGCodeBlock,
") result: ", result, "\n");
}
- if (result == CompilationSuccessful)
- m_dfgCodeBlock->jitCode()->dfg()->osrEntryBlock = codeBlock;
+ JITCode* jitCode = profiledDFGCodeBlock->jitCode()->dfg();
+
+ switch (result) {
+ case CompilationSuccessful: {
+ jitCode->setOSREntryBlock(*codeBlock->vm(), profiledDFGCodeBlock, codeBlock);
+ unsigned osrEntryBytecode = codeBlock->jitCode()->ftlForOSREntry()->bytecodeIndex();
+ jitCode->tierUpEntryTriggers.set(osrEntryBytecode, JITCode::TriggerReason::CompilationDone);
+ break;
+ }
+ case CompilationFailed:
+ jitCode->osrEntryRetry = 0;
+ jitCode->abandonOSREntry = true;
+ profiledDFGCodeBlock->jitCode()->dfg()->setOptimizationThresholdBasedOnCompilationResult(
+ profiledDFGCodeBlock, result);
+ break;
+ case CompilationDeferred:
+ RELEASE_ASSERT_NOT_REACHED();
+ case CompilationInvalidated:
+ jitCode->osrEntryRetry = 0;
+ break;
+ }
- // FIXME: if we failed, we might want to just turn off OSR entry rather than
- // totally turning off tier-up.
- m_dfgCodeBlock->jitCode()->dfg()->setOptimizationThresholdBasedOnCompilationResult(
- m_dfgCodeBlock.get(), result);
+ DeferredCompilationCallback::compilationDidComplete(codeBlock, profiledDFGCodeBlock, result);
}
} } // JSC::DFG