summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/dfg/DFGJITFinalizer.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/dfg/DFGJITFinalizer.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGJITFinalizer.cpp')
-rw-r--r--Source/JavaScriptCore/dfg/DFGJITFinalizer.cpp40
1 files changed, 30 insertions, 10 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGJITFinalizer.cpp b/Source/JavaScriptCore/dfg/DFGJITFinalizer.cpp
index b7ea594c6..6b65ecc77 100644
--- a/Source/JavaScriptCore/dfg/DFGJITFinalizer.cpp
+++ b/Source/JavaScriptCore/dfg/DFGJITFinalizer.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
+ * Copyright (C) 2013, 2015-2016 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -29,15 +29,18 @@
#if ENABLE(DFG_JIT)
#include "CodeBlock.h"
+#include "CodeBlockWithJITType.h"
#include "DFGCommon.h"
#include "DFGPlan.h"
+#include "JSCInlines.h"
+#include "ProfilerDatabase.h"
namespace JSC { namespace DFG {
-JITFinalizer::JITFinalizer(Plan& plan, PassRefPtr<JITCode> jitCode, PassOwnPtr<LinkBuffer> linkBuffer, MacroAssemblerCodePtr withArityCheck)
+JITFinalizer::JITFinalizer(Plan& plan, Ref<JITCode>&& jitCode, std::unique_ptr<LinkBuffer> linkBuffer, MacroAssemblerCodePtr withArityCheck)
: Finalizer(plan)
- , m_jitCode(jitCode)
- , m_linkBuffer(linkBuffer)
+ , m_jitCode(WTFMove(jitCode))
+ , m_linkBuffer(WTFMove(linkBuffer))
, m_withArityCheck(withArityCheck)
{
}
@@ -46,10 +49,18 @@ JITFinalizer::~JITFinalizer()
{
}
+size_t JITFinalizer::codeSize()
+{
+ return m_linkBuffer->size();
+}
+
bool JITFinalizer::finalize()
{
- m_jitCode->initializeCodeRef(m_linkBuffer->finalizeCodeWithoutDisassembly());
- m_plan.codeBlock->setJITCode(m_jitCode, MacroAssemblerCodePtr());
+ m_jitCode->initializeCodeRef(
+ FINALIZE_DFG_CODE(*m_linkBuffer, ("DFG JIT code for %s", toCString(CodeBlockWithJITType(m_plan.codeBlock, JITCode::DFGJIT)).data())),
+ MacroAssemblerCodePtr());
+
+ m_plan.codeBlock->setJITCode(m_jitCode.copyRef());
finalizeCommon();
@@ -59,8 +70,10 @@ bool JITFinalizer::finalize()
bool JITFinalizer::finalizeFunction()
{
RELEASE_ASSERT(!m_withArityCheck.isEmptyValue());
- m_jitCode->initializeCodeRef(m_linkBuffer->finalizeCodeWithoutDisassembly());
- m_plan.codeBlock->setJITCode(m_jitCode, m_withArityCheck);
+ m_jitCode->initializeCodeRef(
+ FINALIZE_DFG_CODE(*m_linkBuffer, ("DFG JIT code for %s", toCString(CodeBlockWithJITType(m_plan.codeBlock, JITCode::DFGJIT)).data())),
+ m_withArityCheck);
+ m_plan.codeBlock->setJITCode(m_jitCode.copyRef());
finalizeCommon();
@@ -69,12 +82,19 @@ bool JITFinalizer::finalizeFunction()
void JITFinalizer::finalizeCommon()
{
+ // Some JIT finalizers may have added more constants. Shrink-to-fit those things now.
+ m_plan.codeBlock->constants().shrinkToFit();
+ m_plan.codeBlock->constantsSourceCodeRepresentation().shrinkToFit();
+
#if ENABLE(FTL_JIT)
- m_jitCode->optimizeAfterWarmUp(m_plan.codeBlock.get());
+ m_jitCode->optimizeAfterWarmUp(m_plan.codeBlock);
#endif // ENABLE(FTL_JIT)
if (m_plan.compilation)
- m_plan.vm.m_perBytecodeProfiler->addCompilation(m_plan.compilation);
+ m_plan.vm->m_perBytecodeProfiler->addCompilation(m_plan.codeBlock, *m_plan.compilation);
+
+ if (!m_plan.willTryToTierUp)
+ m_plan.codeBlock->baselineVersion()->m_didFailFTLCompilation = true;
}
} } // namespace JSC::DFG