Title: [226081] trunk/Source/_javascript_Core
Revision
226081
Author
sbar...@apple.com
Date
2017-12-18 14:20:22 -0800 (Mon, 18 Dec 2017)

Log Message

Follow up to bug#179762. Fix PreciseLocalClobberize to handle Spread/PhantomSpread(PhantomNewArrayBuffer)

* dfg/DFGPreciseLocalClobberize.h:
(JSC::DFG::PreciseLocalClobberizeAdaptor::readTop):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (226080 => 226081)


--- trunk/Source/_javascript_Core/ChangeLog	2017-12-18 22:05:23 UTC (rev 226080)
+++ trunk/Source/_javascript_Core/ChangeLog	2017-12-18 22:20:22 UTC (rev 226081)
@@ -1,3 +1,10 @@
+2017-12-18  Saam Barati  <sbar...@apple.com>
+
+        Follow up to bug#179762. Fix PreciseLocalClobberize to handle Spread/PhantomSpread(PhantomNewArrayBuffer)
+
+        * dfg/DFGPreciseLocalClobberize.h:
+        (JSC::DFG::PreciseLocalClobberizeAdaptor::readTop):
+
 2017-12-16  Filip Pizlo  <fpi...@apple.com>
 
         Vector index masking

Modified: trunk/Source/_javascript_Core/dfg/DFGPreciseLocalClobberize.h (226080 => 226081)


--- trunk/Source/_javascript_Core/dfg/DFGPreciseLocalClobberize.h	2017-12-18 22:05:23 UTC (rev 226080)
+++ trunk/Source/_javascript_Core/dfg/DFGPreciseLocalClobberize.h	2017-12-18 22:20:22 UTC (rev 226081)
@@ -120,9 +120,16 @@
                 m_read(VirtualRegister(inlineCallFrame->stackOffset + CallFrameSlot::argumentCount));
         };
 
-        auto readSpreadOfPhantomCreateRest = [&] (Node* spread) {
+        auto readSpread = [&] (Node* spread) {
             ASSERT(spread->op() == Spread || spread->op() == PhantomSpread);
-            ASSERT(spread->child1()->op() == PhantomCreateRest);
+            if (!spread->child1()->isPhantomAllocation())
+                return;
+
+            ASSERT(spread->child1()->op() == PhantomCreateRest || spread->child1()->op() == PhantomNewArrayBuffer);
+            if (spread->child1()->op() == PhantomNewArrayBuffer) {
+                // This reads from a constant buffer.
+                return;
+            }
             InlineCallFrame* inlineCallFrame = spread->child1()->origin.semantic.inlineCallFrame;
             unsigned numberOfArgumentsToSkip = spread->child1()->numberOfArgumentsToSkip();
             readFrame(inlineCallFrame, numberOfArgumentsToSkip);
@@ -135,7 +142,7 @@
                 if (bitVector->get(i)) {
                     Node* child = m_graph.varArgChild(arrayWithSpread, i).node();
                     if (child->op() == PhantomSpread)
-                        readSpreadOfPhantomCreateRest(child);
+                        readSpread(child);
                 }
             }
         };
@@ -181,7 +188,7 @@
                 if (m_node->argumentsChild()->op() == PhantomNewArrayWithSpread)
                     readNewArrayWithSpreadNode(m_node->argumentsChild().node());
                 else
-                    readSpreadOfPhantomCreateRest(m_node->argumentsChild().node());
+                    readSpread(m_node->argumentsChild().node());
             } else {
                 InlineCallFrame* inlineCallFrame;
                 if (m_node->hasArgumentsChild() && m_node->argumentsChild())
@@ -204,8 +211,7 @@
         }
         
         case Spread:
-            if (m_node->child1()->op() == PhantomCreateRest)
-                readSpreadOfPhantomCreateRest(m_node);
+            readSpread(m_node);
             break;
         
         case NewArrayWithSpread: {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to