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

Reply via email to