Title: [275866] trunk/Source/_javascript_Core
Revision
275866
Author
[email protected]
Date
2021-04-13 00:35:38 -0700 (Tue, 13 Apr 2021)

Log Message

[JSC] Remove CodeBlock::m_constantsSourceCodeRepresentation
https://bugs.webkit.org/show_bug.cgi?id=224473

Reviewed by Mark Lam.

CodeBlock::m_constantsSourceCodeRepresentation is identical to UnlinkedCodeBlock::m_constantsSourceCodeRepresentation.

1. For all constants existing at bytecode compile time, elements of the above vectors are identical.
2. For lazily added constants from DFG, it is always SourceCodeRepresentation::Other.

And the array is effectively accessed only when compiling DFG code. So we should remove copy of that in CodeBlock, and
get SourceCodeRepresentation from UnlinkedCodeBlock.

* bytecode/BytecodeDumper.cpp:
(JSC::CodeBlockBytecodeDumper<Block>::dumpConstants):
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::CodeBlock):
(JSC::CodeBlock::setConstantRegisters):
(JSC::CodeBlock::shrinkToFit):
* bytecode/CodeBlock.h:
(JSC::CodeBlock::constants):
(JSC::CodeBlock::addConstant):
(JSC::CodeBlock::addConstantLazily):
(JSC::CodeBlock::constantSourceCodeRepresentation const):
(JSC::CodeBlock::constantsSourceCodeRepresentation): Deleted.
* bytecode/UnlinkedCodeBlock.h:
(JSC::UnlinkedCodeBlock::constantSourceCodeRepresentation const):
* bytecode/UnlinkedCodeBlockGenerator.h:
(JSC::UnlinkedCodeBlockGenerator::constantSourceCodeRepresentation const):
(JSC::UnlinkedCodeBlockGenerator::constantsSourceCodeRepresentation): Deleted.
* dfg/DFGGraph.cpp:
(JSC::DFG::Graph::registerFrozenValues):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (275865 => 275866)


--- trunk/Source/_javascript_Core/ChangeLog	2021-04-13 06:11:34 UTC (rev 275865)
+++ trunk/Source/_javascript_Core/ChangeLog	2021-04-13 07:35:38 UTC (rev 275866)
@@ -1,3 +1,38 @@
+2021-04-12  Yusuke Suzuki  <[email protected]>
+
+        [JSC] Remove CodeBlock::m_constantsSourceCodeRepresentation
+        https://bugs.webkit.org/show_bug.cgi?id=224473
+
+        Reviewed by Mark Lam.
+
+        CodeBlock::m_constantsSourceCodeRepresentation is identical to UnlinkedCodeBlock::m_constantsSourceCodeRepresentation.
+
+        1. For all constants existing at bytecode compile time, elements of the above vectors are identical.
+        2. For lazily added constants from DFG, it is always SourceCodeRepresentation::Other.
+
+        And the array is effectively accessed only when compiling DFG code. So we should remove copy of that in CodeBlock, and
+        get SourceCodeRepresentation from UnlinkedCodeBlock.
+
+        * bytecode/BytecodeDumper.cpp:
+        (JSC::CodeBlockBytecodeDumper<Block>::dumpConstants):
+        * bytecode/CodeBlock.cpp:
+        (JSC::CodeBlock::CodeBlock):
+        (JSC::CodeBlock::setConstantRegisters):
+        (JSC::CodeBlock::shrinkToFit):
+        * bytecode/CodeBlock.h:
+        (JSC::CodeBlock::constants):
+        (JSC::CodeBlock::addConstant):
+        (JSC::CodeBlock::addConstantLazily):
+        (JSC::CodeBlock::constantSourceCodeRepresentation const):
+        (JSC::CodeBlock::constantsSourceCodeRepresentation): Deleted.
+        * bytecode/UnlinkedCodeBlock.h:
+        (JSC::UnlinkedCodeBlock::constantSourceCodeRepresentation const):
+        * bytecode/UnlinkedCodeBlockGenerator.h:
+        (JSC::UnlinkedCodeBlockGenerator::constantSourceCodeRepresentation const):
+        (JSC::UnlinkedCodeBlockGenerator::constantsSourceCodeRepresentation): Deleted.
+        * dfg/DFGGraph.cpp:
+        (JSC::DFG::Graph::registerFrozenValues):
+
 2021-04-12  Mark Lam  <[email protected]>
 
         Interpreter::executeProgram() should install its VMEntryScope at the top.

Modified: trunk/Source/_javascript_Core/bytecode/BytecodeDumper.cpp (275865 => 275866)


--- trunk/Source/_javascript_Core/bytecode/BytecodeDumper.cpp	2021-04-13 06:11:34 UTC (rev 275865)
+++ trunk/Source/_javascript_Core/bytecode/BytecodeDumper.cpp	2021-04-13 07:35:38 UTC (rev 275866)
@@ -137,7 +137,7 @@
         size_t i = 0;
         for (const auto& constant : this->block()->constantRegisters()) {
             const char* sourceCodeRepresentationDescription = nullptr;
-            switch (this->block()->constantsSourceCodeRepresentation()[i]) {
+            switch (this->block()->constantSourceCodeRepresentation(i)) {
             case SourceCodeRepresentation::Double:
                 sourceCodeRepresentationDescription = ": in source as double";
                 break;

Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp (275865 => 275866)


--- trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp	2021-04-13 06:11:34 UTC (rev 275865)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp	2021-04-13 07:35:38 UTC (rev 275866)
@@ -296,7 +296,6 @@
     , m_vm(other.m_vm)
     , m_instructionsRawPointer(other.m_instructionsRawPointer)
     , m_constantRegisters(other.m_constantRegisters)
-    , m_constantsSourceCodeRepresentation(other.m_constantsSourceCodeRepresentation)
     , m_functionDecls(other.m_functionDecls)
     , m_functionExprs(other.m_functionExprs)
     , m_osrExitCounter(0)
@@ -883,12 +882,10 @@
     {
         ConcurrentJSLocker locker(m_lock);
         m_constantRegisters.resizeToFit(count);
-        m_constantsSourceCodeRepresentation.resizeToFit(count);
     }
     for (size_t i = 0; i < count; i++) {
         JSValue constant = constants[i].get();
         SourceCodeRepresentation representation = constantsSourceCodeRepresentation[i];
-        m_constantsSourceCodeRepresentation[i] = representation;
         switch (representation) {
         case SourceCodeRepresentation::LinkTimeConstant:
             constant = globalObject->linkTimeConstant(static_cast<LinkTimeConstant>(constant.asInt32AsAnyInt()));
@@ -2124,7 +2121,6 @@
 #else
     m_constantRegisters.shrinkToFit();
 #endif
-    m_constantsSourceCodeRepresentation.shrinkToFit();
 
     if (shrinkMode == ShrinkMode::EarlyShrink) {
         if (m_rareData)

Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.h (275865 => 275866)


--- trunk/Source/_javascript_Core/bytecode/CodeBlock.h	2021-04-13 06:11:34 UTC (rev 275865)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.h	2021-04-13 07:35:38 UTC (rev 275866)
@@ -572,13 +572,11 @@
 #endif
 
     Vector<WriteBarrier<Unknown>>& constants() { return m_constantRegisters; }
-    Vector<SourceCodeRepresentation>& constantsSourceCodeRepresentation() { return m_constantsSourceCodeRepresentation; }
     unsigned addConstant(const ConcurrentJSLocker&, JSValue v)
     {
         unsigned result = m_constantRegisters.size();
         m_constantRegisters.append(WriteBarrier<Unknown>());
         m_constantRegisters.last().set(*m_vm, this, v);
-        m_constantsSourceCodeRepresentation.append(SourceCodeRepresentation::Other);
         return result;
     }
 
@@ -586,7 +584,6 @@
     {
         unsigned result = m_constantRegisters.size();
         m_constantRegisters.append(WriteBarrier<Unknown>());
-        m_constantsSourceCodeRepresentation.append(SourceCodeRepresentation::Other);
         return result;
     }
 
@@ -593,7 +590,8 @@
     const Vector<WriteBarrier<Unknown>>& constantRegisters() { return m_constantRegisters; }
     WriteBarrier<Unknown>& constantRegister(VirtualRegister reg) { return m_constantRegisters[reg.toConstantIndex()]; }
     ALWAYS_INLINE JSValue getConstant(VirtualRegister reg) const { return m_constantRegisters[reg.toConstantIndex()].get(); }
-    ALWAYS_INLINE SourceCodeRepresentation constantSourceCodeRepresentation(VirtualRegister reg) const { return m_constantsSourceCodeRepresentation[reg.toConstantIndex()]; }
+    ALWAYS_INLINE SourceCodeRepresentation constantSourceCodeRepresentation(VirtualRegister reg) const { return m_unlinkedCode->constantSourceCodeRepresentation(reg); }
+    ALWAYS_INLINE SourceCodeRepresentation constantSourceCodeRepresentation(unsigned index) const { return m_unlinkedCode->constantSourceCodeRepresentation(index); }
 
     FunctionExecutable* functionDecl(int index) { return m_functionDecls[index].get(); }
     int numberOfFunctionDecls() { return m_functionDecls.size(); }
@@ -1046,7 +1044,6 @@
     // TODO: This could just be a pointer to m_unlinkedCodeBlock's data, but the DFG mutates
     // it, so we're stuck with it for now.
     Vector<WriteBarrier<Unknown>> m_constantRegisters;
-    Vector<SourceCodeRepresentation> m_constantsSourceCodeRepresentation;
     FixedVector<WriteBarrier<FunctionExecutable>> m_functionDecls;
     FixedVector<WriteBarrier<FunctionExecutable>> m_functionExprs;
 

Modified: trunk/Source/_javascript_Core/bytecode/UnlinkedCodeBlock.h (275865 => 275866)


--- trunk/Source/_javascript_Core/bytecode/UnlinkedCodeBlock.h	2021-04-13 06:11:34 UTC (rev 275865)
+++ trunk/Source/_javascript_Core/bytecode/UnlinkedCodeBlock.h	2021-04-13 07:35:38 UTC (rev 275866)
@@ -161,6 +161,17 @@
     ALWAYS_INLINE JSValue getConstant(VirtualRegister reg) const { return m_constantRegisters[reg.toConstantIndex()].get(); }
     const FixedVector<SourceCodeRepresentation>& constantsSourceCodeRepresentation() { return m_constantsSourceCodeRepresentation; }
 
+    SourceCodeRepresentation constantSourceCodeRepresentation(VirtualRegister reg) const
+    {
+        return constantSourceCodeRepresentation(reg.toConstantIndex());
+    }
+    SourceCodeRepresentation constantSourceCodeRepresentation(unsigned index) const
+    {
+        if (index < m_constantsSourceCodeRepresentation.size())
+            return m_constantsSourceCodeRepresentation[index];
+        return SourceCodeRepresentation::Other;
+    }
+
     unsigned numberOfConstantIdentifierSets() const { return m_rareData ? m_rareData->m_constantIdentifierSets.size() : 0; }
     const FixedVector<IdentifierSet>& constantIdentifierSets() { ASSERT(m_rareData); return m_rareData->m_constantIdentifierSets; }
 

Modified: trunk/Source/_javascript_Core/bytecode/UnlinkedCodeBlockGenerator.h (275865 => 275866)


--- trunk/Source/_javascript_Core/bytecode/UnlinkedCodeBlockGenerator.h	2021-04-13 06:11:34 UTC (rev 275865)
+++ trunk/Source/_javascript_Core/bytecode/UnlinkedCodeBlockGenerator.h	2021-04-13 07:35:38 UTC (rev 275866)
@@ -124,8 +124,18 @@
     const WriteBarrier<Unknown>& constantRegister(VirtualRegister reg) const { return m_constantRegisters[reg.toConstantIndex()]; }
     const Vector<WriteBarrier<Unknown>>& constantRegisters() { return m_constantRegisters; }
     ALWAYS_INLINE JSValue getConstant(VirtualRegister reg) const { return m_constantRegisters[reg.toConstantIndex()].get(); }
-    const Vector<SourceCodeRepresentation>& constantsSourceCodeRepresentation() { return m_constantsSourceCodeRepresentation; }
 
+    SourceCodeRepresentation constantSourceCodeRepresentation(VirtualRegister reg) const
+    {
+        return constantSourceCodeRepresentation(reg.toConstantIndex());
+    }
+    SourceCodeRepresentation constantSourceCodeRepresentation(unsigned index) const
+    {
+        if (index < m_constantsSourceCodeRepresentation.size())
+            return m_constantsSourceCodeRepresentation[index];
+        return SourceCodeRepresentation::Other;
+    }
+
     unsigned addConstant(JSValue v, SourceCodeRepresentation sourceCodeRepresentation = SourceCodeRepresentation::Other)
     {
         ASSERT(m_vm.heap.isDeferred());

Modified: trunk/Source/_javascript_Core/dfg/DFGGraph.cpp (275865 => 275866)


--- trunk/Source/_javascript_Core/dfg/DFGGraph.cpp	2021-04-13 06:11:34 UTC (rev 275865)
+++ trunk/Source/_javascript_Core/dfg/DFGGraph.cpp	2021-04-13 07:35:38 UTC (rev 275866)
@@ -1424,7 +1424,6 @@
 {
     ConcurrentJSLocker locker(m_codeBlock->m_lock);
     m_codeBlock->constants().shrink(0);
-    m_codeBlock->constantsSourceCodeRepresentation().resize(0);
     for (FrozenValue* value : m_frozenValues) {
         if (!value->pointsToHeap())
             continue;
@@ -1445,7 +1444,6 @@
         } }
     }
     m_codeBlock->constants().shrinkToFit();
-    m_codeBlock->constantsSourceCodeRepresentation().shrinkToFit();
 }
 
 template<typename Visitor>
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to