Title: [215891] trunk/Source/_javascript_Core
- Revision
- 215891
- Author
- [email protected]
- Date
- 2017-04-27 13:58:04 -0700 (Thu, 27 Apr 2017)
Log Message
Restore some caching functionality that got accidentally removed when doing Wasm PIC patches
https://bugs.webkit.org/show_bug.cgi?id=171382
Reviewed by Keith Miller.
When I created Wasm::CodeBlock, I accidentally removed caching
the creation of JSWebAssemblyCodeBlocks. This patch restores it.
It's worth keeping JSWebAssemblyModule's JSWebAssemblyCodeBlock
cache because creating a JSWebAssemblyCodeBlock does non trivial
work by creating the various IC call stubs.
* wasm/js/JSWebAssemblyCodeBlock.h:
(JSC::JSWebAssemblyCodeBlock::codeBlock):
* wasm/js/JSWebAssemblyInstance.cpp:
(JSC::JSWebAssemblyInstance::finalizeCreation):
(JSC::JSWebAssemblyInstance::create):
* wasm/js/JSWebAssemblyModule.h:
Modified Paths
Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (215890 => 215891)
--- trunk/Source/_javascript_Core/ChangeLog 2017-04-27 20:47:01 UTC (rev 215890)
+++ trunk/Source/_javascript_Core/ChangeLog 2017-04-27 20:58:04 UTC (rev 215891)
@@ -1,3 +1,23 @@
+2017-04-27 Saam Barati <[email protected]>
+
+ Restore some caching functionality that got accidentally removed when doing Wasm PIC patches
+ https://bugs.webkit.org/show_bug.cgi?id=171382
+
+ Reviewed by Keith Miller.
+
+ When I created Wasm::CodeBlock, I accidentally removed caching
+ the creation of JSWebAssemblyCodeBlocks. This patch restores it.
+ It's worth keeping JSWebAssemblyModule's JSWebAssemblyCodeBlock
+ cache because creating a JSWebAssemblyCodeBlock does non trivial
+ work by creating the various IC call stubs.
+
+ * wasm/js/JSWebAssemblyCodeBlock.h:
+ (JSC::JSWebAssemblyCodeBlock::codeBlock):
+ * wasm/js/JSWebAssemblyInstance.cpp:
+ (JSC::JSWebAssemblyInstance::finalizeCreation):
+ (JSC::JSWebAssemblyInstance::create):
+ * wasm/js/JSWebAssemblyModule.h:
+
2017-04-27 Mark Lam <[email protected]>
Audit and fix incorrect uses of JSArray::tryCreateForInitializationPrivate().
Modified: trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyCodeBlock.h (215890 => 215891)
--- trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyCodeBlock.h 2017-04-27 20:47:01 UTC (rev 215890)
+++ trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyCodeBlock.h 2017-04-27 20:58:04 UTC (rev 215891)
@@ -83,7 +83,8 @@
return offsetOfImportStubs() + sizeof(void*) * importIndex;
}
- Ref<Wasm::CodeBlock> m_codeBlock;
+ Wasm::CodeBlock& codeBlock() { return m_codeBlock.get(); }
+
private:
JSWebAssemblyCodeBlock(VM&, Ref<Wasm::CodeBlock>&&, const Wasm::ModuleInformation&);
DECLARE_EXPORT_INFO;
@@ -110,6 +111,7 @@
void finalizeUnconditionally() override;
};
+ Ref<Wasm::CodeBlock> m_codeBlock;
WriteBarrier<JSWebAssemblyModule> m_module;
Vector<MacroAssemblerCodeRef> m_wasmToJSExitStubs;
UnconditionalFinalizer m_unconditionalFinalizer;
Modified: trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyInstance.cpp (215890 => 215891)
--- trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyInstance.cpp 2017-04-27 20:47:01 UTC (rev 215890)
+++ trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyInstance.cpp 2017-04-27 20:58:04 UTC (rev 215891)
@@ -102,9 +102,20 @@
return;
}
- RELEASE_ASSERT(wasmCodeBlock->isSafeToRun(memory()->memory().mode()));
- m_codeBlock.set(vm, this,
- JSWebAssemblyCodeBlock::create(vm, wasmCodeBlock.copyRef(), m_module->module().moduleInformation()));
+ RELEASE_ASSERT(wasmCodeBlock->isSafeToRun(memoryMode()));
+ JSWebAssemblyCodeBlock* codeBlock = module()->codeBlock(memoryMode());
+ if (codeBlock) {
+ // A CodeBlock might have already been compiled. If so, it means
+ // that the CodeBlock we are trying to compile must be the same
+ // because we will never compile a CodeBlock again once it's
+ // runnable.
+ ASSERT(&codeBlock->codeBlock() == wasmCodeBlock.ptr());
+ m_codeBlock.set(vm, this, codeBlock);
+ } else {
+ codeBlock = JSWebAssemblyCodeBlock::create(vm, wasmCodeBlock.copyRef(), m_module->module().moduleInformation());
+ m_codeBlock.set(vm, this, codeBlock);
+ module()->setCodeBlock(vm, memoryMode(), codeBlock);
+ }
auto* moduleRecord = jsCast<WebAssemblyModuleRecord*>(m_moduleNamespaceObject->moduleRecord());
moduleRecord->link(exec, module(), this);
@@ -345,7 +356,6 @@
}
ASSERT(!instance->codeBlock());
- instance->m_codeBlock.setMayBeNull(vm, instance, jsModule->codeBlock(instance->memoryMode()));
return instance;
}
Modified: trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyModule.h (215890 => 215891)
--- trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyModule.h 2017-04-27 20:47:01 UTC (rev 215890)
+++ trunk/Source/_javascript_Core/wasm/js/JSWebAssemblyModule.h 2017-04-27 20:58:04 UTC (rev 215891)
@@ -68,12 +68,11 @@
const Vector<uint8_t>& source() const;
Wasm::Module& module() { return m_module.get(); }
+ void setCodeBlock(VM&, Wasm::MemoryMode, JSWebAssemblyCodeBlock*);
private:
friend class JSWebAssemblyCodeBlock;
- void setCodeBlock(VM&, Wasm::MemoryMode, JSWebAssemblyCodeBlock*);
-
JSWebAssemblyModule(VM&, Structure*, Ref<Wasm::Module>&&);
void finishCreation(VM&);
static void destroy(JSCell*);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes