Title: [236168] releases/WebKitGTK/webkit-2.22/Source/_javascript_Core
Revision
236168
Author
[email protected]
Date
2018-09-19 05:33:18 -0700 (Wed, 19 Sep 2018)

Log Message

Merge r235685 - RELEASE_ASSERT at ../../Source/_javascript_Core/heap/MarkedSpace.h:83
https://bugs.webkit.org/show_bug.cgi?id=188917

Reviewed by Mark Lam.

Our allocators should be able to handle allocating a zero-sized object.
Zero-sized objects will be allocated into the smallest size class.

* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileNewTypedArrayWithSize):
* ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray):
(JSC::FTL::DFG::LowerDFGToB3::allocatorForSize):
* heap/MarkedSpace.h:
(JSC::MarkedSpace::sizeClassToIndex):
(JSC::MarkedSpace::indexToSizeClass):
* jit/AssemblyHelpers.cpp:
(JSC::AssemblyHelpers::emitAllocateVariableSized):
* runtime/JSArrayBufferView.cpp:
(JSC::JSArrayBufferView::ConstructionContext::ConstructionContext):

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/ChangeLog (236167 => 236168)


--- releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/ChangeLog	2018-09-19 12:33:11 UTC (rev 236167)
+++ releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/ChangeLog	2018-09-19 12:33:18 UTC (rev 236168)
@@ -1,3 +1,26 @@
+2018-09-04  Keith Miller  <[email protected]>
+
+        RELEASE_ASSERT at ../../Source/_javascript_Core/heap/MarkedSpace.h:83
+        https://bugs.webkit.org/show_bug.cgi?id=188917
+
+        Reviewed by Mark Lam.
+
+        Our allocators should be able to handle allocating a zero-sized object.
+        Zero-sized objects will be allocated into the smallest size class.
+
+        * dfg/DFGSpeculativeJIT.cpp:
+        (JSC::DFG::SpeculativeJIT::compileNewTypedArrayWithSize):
+        * ftl/FTLLowerDFGToB3.cpp:
+        (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray):
+        (JSC::FTL::DFG::LowerDFGToB3::allocatorForSize):
+        * heap/MarkedSpace.h:
+        (JSC::MarkedSpace::sizeClassToIndex):
+        (JSC::MarkedSpace::indexToSizeClass):
+        * jit/AssemblyHelpers.cpp:
+        (JSC::AssemblyHelpers::emitAllocateVariableSized):
+        * runtime/JSArrayBufferView.cpp:
+        (JSC::JSArrayBufferView::ConstructionContext::ConstructionContext):
+
 2018-09-05  Mark Lam  <[email protected]>
 
         Fix DeferredSourceDump to capture the caller bytecodeIndex instead of CodeOrigin.

Modified: releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp (236167 => 236168)


--- releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp	2018-09-19 12:33:11 UTC (rev 236167)
+++ releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp	2018-09-19 12:33:18 UTC (rev 236168)
@@ -9533,7 +9533,6 @@
 
     slowCases.append(m_jit.branch32(
         MacroAssembler::Above, sizeGPR, TrustedImm32(JSArrayBufferView::fastSizeLimit)));
-    slowCases.append(m_jit.branchTest32(MacroAssembler::Zero, sizeGPR));
     
     m_jit.move(sizeGPR, scratchGPR);
     m_jit.lshift32(TrustedImm32(logElementSize(typedArrayType)), scratchGPR);

Modified: releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/ftl/FTLLowerDFGToB3.cpp (236167 => 236168)


--- releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/ftl/FTLLowerDFGToB3.cpp	2018-09-19 12:33:11 UTC (rev 236167)
+++ releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/ftl/FTLLowerDFGToB3.cpp	2018-09-19 12:33:18 UTC (rev 236168)
@@ -5991,7 +5991,6 @@
             LValue size = lowInt32(m_node->child1());
 
             LBasicBlock smallEnoughCase = m_out.newBlock();
-            LBasicBlock nonZeroCase = m_out.newBlock();
             LBasicBlock slowCase = m_out.newBlock();
             LBasicBlock continuation = m_out.newBlock();
             
@@ -6001,12 +6000,8 @@
                 m_out.above(size, m_out.constInt32(JSArrayBufferView::fastSizeLimit)),
                 rarely(slowCase), usually(smallEnoughCase));
 
-            LBasicBlock lastNext = m_out.appendTo(smallEnoughCase, nonZeroCase);
+            LBasicBlock lastNext = m_out.appendTo(smallEnoughCase, slowCase);
 
-            m_out.branch(m_out.notZero32(size), usually(nonZeroCase), rarely(slowCase));
-
-            m_out.appendTo(nonZeroCase, slowCase);
-
             LValue byteSize =
                 m_out.shl(m_out.zeroExtPtr(size), m_out.constInt32(logElementSize(typedArrayType)));
             if (elementSize(typedArrayType) < 8) {
@@ -13150,7 +13145,7 @@
         if (subspace->hasIntPtr() && size->hasIntPtr()) {
             CompleteSubspace* actualSubspace = bitwise_cast<CompleteSubspace*>(subspace->asIntPtr());
             size_t actualSize = size->asIntPtr();
-            
+
             Allocator actualAllocator = actualSubspace->allocatorForNonVirtual(actualSize, AllocatorForMode::AllocatorIfExists);
             if (!actualAllocator) {
                 LBasicBlock continuation = m_out.newBlock();
@@ -13159,7 +13154,7 @@
                 m_out.appendTo(continuation, lastNext);
                 return m_out.intPtrZero;
             }
-            
+
             return m_out.constIntPtr(actualAllocator.localAllocator());
         }
         
@@ -13182,7 +13177,7 @@
         return m_out.loadPtr(
             m_out.baseIndex(
                 m_heaps.CompleteSubspace_allocatorForSizeStep,
-                subspace, m_out.sub(sizeClassIndex, m_out.intPtrOne)));
+                subspace, sizeClassIndex));
     }
     
     LValue allocatorForSize(CompleteSubspace& subspace, LValue size, LBasicBlock slowPath)

Modified: releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/heap/MarkedSpace.cpp (236167 => 236168)


--- releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/heap/MarkedSpace.cpp	2018-09-19 12:33:11 UTC (rev 236167)
+++ releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/heap/MarkedSpace.cpp	2018-09-19 12:33:18 UTC (rev 236168)
@@ -171,6 +171,7 @@
             table[i] = entry;
         nextIndex = index + 1;
     }
+    ASSERT(MarkedSpace::sizeClassToIndex(MarkedSpace::largeCutoff - 1) < MarkedSpace::numSizeClasses);
     for (size_t i = nextIndex; i < MarkedSpace::numSizeClasses; ++i)
         table[i] = defaultCons(MarkedSpace::indexToSizeClass(i));
 }

Modified: releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/heap/MarkedSpace.h (236167 => 236168)


--- releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/heap/MarkedSpace.h	2018-09-19 12:33:11 UTC (rev 236167)
+++ releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/heap/MarkedSpace.h	2018-09-19 12:33:18 UTC (rev 236168)
@@ -64,7 +64,8 @@
     // into one block.
     static constexpr size_t largeCutoff = (blockPayload / 2) & ~(sizeStep - 1);
 
-    static constexpr size_t numSizeClasses = largeCutoff / sizeStep;
+    // We have an extra size class for size zero.
+    static constexpr size_t numSizeClasses = largeCutoff / sizeStep + 1;
     
     static constexpr HeapVersion nullVersion = 0; // The version of freshly allocated blocks.
     static constexpr HeapVersion initialVersion = 2; // The version that the heap starts out with. Set to make sure that nextVersion(nullVersion) != initialVersion.
@@ -79,13 +80,14 @@
     
     static size_t sizeClassToIndex(size_t size)
     {
-        RELEASE_ASSERT(size);
-        return (size + sizeStep - 1) / sizeStep - 1;
+        return (size + sizeStep - 1) / sizeStep;
     }
     
     static size_t indexToSizeClass(size_t index)
     {
-        return (index + 1) * sizeStep;
+        size_t result = index * sizeStep;
+        ASSERT(sizeClassToIndex(result) == index);
+        return result;
     }
     
     MarkedSpace(Heap*);

Modified: releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/jit/AssemblyHelpers.cpp (236167 => 236168)


--- releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/jit/AssemblyHelpers.cpp	2018-09-19 12:33:11 UTC (rev 236167)
+++ releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/jit/AssemblyHelpers.cpp	2018-09-19 12:33:18 UTC (rev 236168)
@@ -641,7 +641,7 @@
     add32(TrustedImm32(MarkedSpace::sizeStep - 1), allocationSize, scratchGPR1);
     urshift32(TrustedImm32(stepShift), scratchGPR1);
     slowPath.append(branch32(Above, scratchGPR1, TrustedImm32(MarkedSpace::largeCutoff >> stepShift)));
-    move(TrustedImmPtr(subspace.allocatorForSizeStep() - 1), scratchGPR2);
+    move(TrustedImmPtr(subspace.allocatorForSizeStep()), scratchGPR2);
     loadPtr(BaseIndex(scratchGPR2, scratchGPR1, timesPtr()), scratchGPR1);
     
     emitAllocate(resultGPR, JITAllocator::variable(), scratchGPR1, scratchGPR2, slowPath);

Modified: releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/runtime/JSArrayBufferView.cpp (236167 => 236168)


--- releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/runtime/JSArrayBufferView.cpp	2018-09-19 12:33:11 UTC (rev 236167)
+++ releases/WebKitGTK/webkit-2.22/Source/_javascript_Core/runtime/JSArrayBufferView.cpp	2018-09-19 12:33:18 UTC (rev 236168)
@@ -69,12 +69,9 @@
         // Attempt GC allocation.
         void* temp;
         size_t size = sizeOf(length, elementSize);
-        if (size) {
-            temp = vm.primitiveGigacageAuxiliarySpace.allocateNonVirtual(vm, size, nullptr, AllocationFailureMode::ReturnNull);
-            if (!temp)
-                return;
-        } else
-            temp = nullptr;
+        temp = vm.primitiveGigacageAuxiliarySpace.allocateNonVirtual(vm, size, nullptr, AllocationFailureMode::ReturnNull);
+        if (!temp)
+            return;
 
         m_structure = structure;
         m_vector = temp;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to