Title: [183492] trunk/Source/_javascript_Core
Revision
183492
Author
fpi...@apple.com
Date
2015-04-28 11:04:10 -0700 (Tue, 28 Apr 2015)

Log Message

VarargsForwardingPhase should only consider MovHints that have the candidate as a child
https://bugs.webkit.org/show_bug.cgi?id=144340

Reviewed by Michael Saboff and Mark Lam.
        
Since we were considering all MovHints, we'd assume that the CreateDirectArguments or
CreateClosedArguments node was live so long as any MovHinted bytecode variable was alive.
Basically, we'd keep it alive until the end of the block. This maximized the chances of
there being an interfering operation, which would prevent elimination.
        
The fix is to only consider MovHints that have the arguments candidate as a child. We only
care to track the liveness of those bytecode locals that would need an arguments object
recovery on OSR exit.
        
This is a speed-up on V8Spider/raytrace and Octane/raytrace because it undoes the regression
introduced in http://trac.webkit.org/changeset/183406.

* dfg/DFGVarargsForwardingPhase.cpp:

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (183491 => 183492)


--- trunk/Source/_javascript_Core/ChangeLog	2015-04-28 18:01:57 UTC (rev 183491)
+++ trunk/Source/_javascript_Core/ChangeLog	2015-04-28 18:04:10 UTC (rev 183492)
@@ -1,3 +1,24 @@
+2015-04-28  Filip Pizlo  <fpi...@apple.com>
+
+        VarargsForwardingPhase should only consider MovHints that have the candidate as a child
+        https://bugs.webkit.org/show_bug.cgi?id=144340
+
+        Reviewed by Michael Saboff and Mark Lam.
+        
+        Since we were considering all MovHints, we'd assume that the CreateDirectArguments or
+        CreateClosedArguments node was live so long as any MovHinted bytecode variable was alive.
+        Basically, we'd keep it alive until the end of the block. This maximized the chances of
+        there being an interfering operation, which would prevent elimination.
+        
+        The fix is to only consider MovHints that have the arguments candidate as a child. We only
+        care to track the liveness of those bytecode locals that would need an arguments object
+        recovery on OSR exit.
+        
+        This is a speed-up on V8Spider/raytrace and Octane/raytrace because it undoes the regression
+        introduced in http://trac.webkit.org/changeset/183406.
+
+        * dfg/DFGVarargsForwardingPhase.cpp:
+
 2015-04-28  Csaba Osztrogonác  <o...@webkit.org>
 
         Remove WinCE cruft from cmake build system

Modified: trunk/Source/_javascript_Core/dfg/DFGVarargsForwardingPhase.cpp (183491 => 183492)


--- trunk/Source/_javascript_Core/dfg/DFGVarargsForwardingPhase.cpp	2015-04-28 18:01:57 UTC (rev 183491)
+++ trunk/Source/_javascript_Core/dfg/DFGVarargsForwardingPhase.cpp	2015-04-28 18:04:10 UTC (rev 183492)
@@ -34,6 +34,7 @@
 #include "DFGGraph.h"
 #include "DFGPhase.h"
 #include "JSCInlines.h"
+#include <wtf/ListDump.h>
 
 namespace JSC { namespace DFG {
 
@@ -96,6 +97,8 @@
             
             switch (node->op()) {
             case MovHint:
+                if (node->child1() != candidate)
+                    break;
                 lastUserIndex = nodeIndex;
                 if (!relevantLocals.contains(node->unlinkedLocal()))
                     relevantLocals.append(node->unlinkedLocal());
@@ -138,6 +141,8 @@
             forAllKilledOperands(
                 m_graph, node, block->tryAt(nodeIndex + 1),
                 [&] (VirtualRegister reg) {
+                    if (verbose)
+                        dataLog("    Killing ", reg, " while we are interested in ", listDump(relevantLocals), "\n");
                     for (unsigned i = 0; i < relevantLocals.size(); ++i) {
                         if (relevantLocals[i] == reg) {
                             relevantLocals[i--] = relevantLocals.last();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to