summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-05-24 08:28:08 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-05-24 08:28:08 +0000
commita4e969f4965059196ca948db781e52f7cfebf19e (patch)
tree6ca352808c8fdc52006a0f33f6ae3c593b23867d /Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp
parent41386e9cb918eed93b3f13648cbef387e371e451 (diff)
downloadWebKitGtk-tarball-a4e969f4965059196ca948db781e52f7cfebf19e.tar.gz
webkitgtk-2.12.3webkitgtk-2.12.3
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp')
-rw-r--r--Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp46
1 files changed, 27 insertions, 19 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp b/Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp
index 17b45a328..c9e5c79fd 100644
--- a/Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp
+++ b/Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp
@@ -31,12 +31,11 @@
#include "CodeBlock.h"
#include "DFGJITCode.h"
#include "Executable.h"
+#include "JSCInlines.h"
namespace JSC { namespace DFG {
-ToFTLForOSREntryDeferredCompilationCallback::ToFTLForOSREntryDeferredCompilationCallback(
- PassRefPtr<CodeBlock> dfgCodeBlock)
- : m_dfgCodeBlock(dfgCodeBlock)
+ToFTLForOSREntryDeferredCompilationCallback::ToFTLForOSREntryDeferredCompilationCallback()
{
}
@@ -44,42 +43,51 @@ ToFTLForOSREntryDeferredCompilationCallback::~ToFTLForOSREntryDeferredCompilatio
{
}
-PassRefPtr<ToFTLForOSREntryDeferredCompilationCallback>
-ToFTLForOSREntryDeferredCompilationCallback::create(
- PassRefPtr<CodeBlock> dfgCodeBlock)
+Ref<ToFTLForOSREntryDeferredCompilationCallback>ToFTLForOSREntryDeferredCompilationCallback::create()
{
- return adoptRef(new ToFTLForOSREntryDeferredCompilationCallback(dfgCodeBlock));
+ return adoptRef(*new ToFTLForOSREntryDeferredCompilationCallback());
}
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());
+ profiledDFGCodeBlock->jitCode()->dfg()->forceOptimizationSlowPathConcurrently(
+ profiledDFGCodeBlock);
}
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);
+ break;
+ case CompilationFailed:
+ jitCode->osrEntryRetry = 0;
+ jitCode->abandonOSREntry = true;
+ 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