Title: [159141] trunk/Source/_javascript_Core
Revision
159141
Author
[email protected]
Date
2013-11-12 13:02:12 -0800 (Tue, 12 Nov 2013)

Log Message

Liveness analysis should take less memory in CodeBlock when it is unused
https://bugs.webkit.org/show_bug.cgi?id=124225

Reviewed by Mark Hahnenberg.
        
Basically, I turned CodeBlock::m_livenessAnalysis into a pointer that is null by
default.

* bytecode/BytecodeLivenessAnalysis.cpp:
(JSC::BytecodeLivenessAnalysis::BytecodeLivenessAnalysis):
(JSC::BytecodeLivenessAnalysis::runLivenessFixpoint):
(JSC::BytecodeLivenessAnalysis::operandIsLiveAtBytecodeOffset):
(JSC::BytecodeLivenessAnalysis::dumpResults):
(JSC::BytecodeLivenessAnalysis::compute):
* bytecode/BytecodeLivenessAnalysis.h:
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::CodeBlock):
* bytecode/CodeBlock.h:
(JSC::CodeBlock::livenessAnalysis):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (159140 => 159141)


--- trunk/Source/_javascript_Core/ChangeLog	2013-11-12 20:57:28 UTC (rev 159140)
+++ trunk/Source/_javascript_Core/ChangeLog	2013-11-12 21:02:12 UTC (rev 159141)
@@ -1,3 +1,25 @@
+2013-11-12  Filip Pizlo  <[email protected]>
+
+        Liveness analysis should take less memory in CodeBlock when it is unused
+        https://bugs.webkit.org/show_bug.cgi?id=124225
+
+        Reviewed by Mark Hahnenberg.
+        
+        Basically, I turned CodeBlock::m_livenessAnalysis into a pointer that is null by
+        default.
+
+        * bytecode/BytecodeLivenessAnalysis.cpp:
+        (JSC::BytecodeLivenessAnalysis::BytecodeLivenessAnalysis):
+        (JSC::BytecodeLivenessAnalysis::runLivenessFixpoint):
+        (JSC::BytecodeLivenessAnalysis::operandIsLiveAtBytecodeOffset):
+        (JSC::BytecodeLivenessAnalysis::dumpResults):
+        (JSC::BytecodeLivenessAnalysis::compute):
+        * bytecode/BytecodeLivenessAnalysis.h:
+        * bytecode/CodeBlock.cpp:
+        (JSC::CodeBlock::CodeBlock):
+        * bytecode/CodeBlock.h:
+        (JSC::CodeBlock::livenessAnalysis):
+
 2013-11-11  Oliver Hunt  <[email protected]>
 
         Support unprefixed deconstructing assignment

Modified: trunk/Source/_javascript_Core/bytecode/BytecodeLivenessAnalysis.cpp (159140 => 159141)


--- trunk/Source/_javascript_Core/bytecode/BytecodeLivenessAnalysis.cpp	2013-11-12 20:57:28 UTC (rev 159140)
+++ trunk/Source/_javascript_Core/bytecode/BytecodeLivenessAnalysis.cpp	2013-11-12 21:02:12 UTC (rev 159141)
@@ -33,18 +33,11 @@
 
 BytecodeLivenessAnalysis::BytecodeLivenessAnalysis(CodeBlock* codeBlock)
     : m_codeBlock(codeBlock)
-    , m_computed(false)
 {
     ASSERT(m_codeBlock);
+    compute();
 }
 
-BytecodeLivenessAnalysis::BytecodeLivenessAnalysis(const BytecodeLivenessAnalysis& other)
-    : m_codeBlock(other.m_codeBlock)
-    , m_basicBlocks(other.m_basicBlocks)
-    , m_computed(other.m_computed)
-{
-}
-
 static int numberOfCapturedVariables(CodeBlock* codeBlock)
 {
     if (!codeBlock->symbolTable())
@@ -588,7 +581,6 @@
 
 void BytecodeLivenessAnalysis::runLivenessFixpoint()
 {
-    ASSERT(!m_computed);
     UnlinkedCodeBlock* unlinkedCodeBlock = m_codeBlock->unlinkedCodeBlock();
     unsigned numberOfVariables = unlinkedCodeBlock->m_numVars + 
         unlinkedCodeBlock->m_numCalleeRegisters - numberOfCapturedVariables(m_codeBlock);
@@ -631,7 +623,6 @@
 bool BytecodeLivenessAnalysis::operandIsLiveAtBytecodeOffset(int operand, unsigned bytecodeOffset)
 {
     int numCapturedVars = numberOfCapturedVariables(m_codeBlock);
-    ASSERT(m_computed);
     if (VirtualRegister(operand).isArgument())
         return true;
     if (operand <= captureStart(m_codeBlock) && operand > captureEnd(m_codeBlock))
@@ -678,7 +669,6 @@
 
 void BytecodeLivenessAnalysis::dumpResults()
 {
-    ASSERT(m_computed);
     Interpreter* interpreter = m_codeBlock->vm()->interpreter;
     Instruction* instructionsBegin = m_codeBlock->instructions().begin();
     for (unsigned i = 0; i < m_basicBlocks.size(); i++) {
@@ -733,13 +723,9 @@
 
 void BytecodeLivenessAnalysis::compute()
 {
-    if (m_computed)
-        return;
-
     computeBytecodeBasicBlocks(m_codeBlock, m_basicBlocks);
     ASSERT(m_basicBlocks.size());
     runLivenessFixpoint();
-    m_computed = true;
 
     if (Options::dumpBytecodeLivenessResults())
         dumpResults();

Modified: trunk/Source/_javascript_Core/bytecode/BytecodeLivenessAnalysis.h (159140 => 159141)


--- trunk/Source/_javascript_Core/bytecode/BytecodeLivenessAnalysis.h	2013-11-12 20:57:28 UTC (rev 159140)
+++ trunk/Source/_javascript_Core/bytecode/BytecodeLivenessAnalysis.h	2013-11-12 21:02:12 UTC (rev 159141)
@@ -38,21 +38,12 @@
 class BytecodeLivenessAnalysis {
 public:
     BytecodeLivenessAnalysis(CodeBlock*);
-    BytecodeLivenessAnalysis(const BytecodeLivenessAnalysis&);
 
     bool operandIsLiveAtBytecodeOffset(int operand, unsigned bytecodeOffset);
     FastBitVector getLivenessInfoAtBytecodeOffset(unsigned bytecodeOffset);
 
-    bool hasBeenComputed() { return m_computed; }
-    void compute();
-    void computeIfNecessary()
-    {
-        if (m_computed)
-            return;
-        compute();
-    }
-
 private:
+    void compute();
     void runLivenessFixpoint();
     void dumpResults();
 
@@ -60,8 +51,6 @@
 
     CodeBlock* m_codeBlock;
     Vector<RefPtr<BytecodeBasicBlock> > m_basicBlocks;
-
-    bool m_computed;
 };
 
 } // namespace JSC

Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp (159140 => 159141)


--- trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp	2013-11-12 20:57:28 UTC (rev 159140)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp	2013-11-12 21:02:12 UTC (rev 159141)
@@ -1572,7 +1572,6 @@
     , m_optimizationDelayCounter(0)
     , m_reoptimizationRetryCounter(0)
     , m_hash(other.m_hash)
-    , m_livenessAnalysis(other.m_livenessAnalysis)
 #if ENABLE(JIT)
     , m_capabilityLevelState(DFG::CapabilityLevelNotSet)
 #endif
@@ -1618,7 +1617,6 @@
     , m_osrExitCounter(0)
     , m_optimizationDelayCounter(0)
     , m_reoptimizationRetryCounter(0)
-    , m_livenessAnalysis(this)
 #if ENABLE(JIT)
     , m_capabilityLevelState(DFG::CapabilityLevelNotSet)
 #endif

Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.h (159140 => 159141)


--- trunk/Source/_javascript_Core/bytecode/CodeBlock.h	2013-11-12 20:57:28 UTC (rev 159140)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.h	2013-11-12 21:02:12 UTC (rev 159141)
@@ -679,7 +679,12 @@
 
     JSGlobalObject* globalObjectFor(CodeOrigin);
 
-    BytecodeLivenessAnalysis& livenessAnalysis() { return m_livenessAnalysis; }
+    BytecodeLivenessAnalysis& livenessAnalysis()
+    {
+        if (!m_livenessAnalysis)
+            m_livenessAnalysis = std::make_unique<BytecodeLivenessAnalysis>(this);
+        return *m_livenessAnalysis;
+    }
 
     // Jump Tables
 
@@ -1077,7 +1082,7 @@
     
     mutable CodeBlockHash m_hash;
 
-    BytecodeLivenessAnalysis m_livenessAnalysis;
+    std::unique_ptr<BytecodeLivenessAnalysis> m_livenessAnalysis;
 
     struct RareData {
         WTF_MAKE_FAST_ALLOCATED;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to