Title: [171767] branches/ftlopt/Source/_javascript_Core
Revision
171767
Author
mmir...@apple.com
Date
2014-07-29 14:49:53 -0700 (Tue, 29 Jul 2014)

Log Message

[ftlopt] Added SkipTopScope coverage to FTL

Modified Paths


Diff

Modified: branches/ftlopt/Source/_javascript_Core/ChangeLog (171766 => 171767)


--- branches/ftlopt/Source/_javascript_Core/ChangeLog	2014-07-29 21:41:36 UTC (rev 171766)
+++ branches/ftlopt/Source/_javascript_Core/ChangeLog	2014-07-29 21:49:53 UTC (rev 171767)
@@ -1,3 +1,16 @@
+2014-07-29  Matthew Mirman  <mmir...@apple.com>
+
+        [ftlopt] Added SkipTopScope coverage to FTL
+        https://bugs.webkit.org/show_bug.cgi?id=134990
+
+        Reviewed by Filip Pizlo.
+
+        * ftl/FTLCapabilities.cpp:
+        (JSC::FTL::canCompile):  Added case for SkipTopScope
+        * ftl/FTLLowerDFGToLLVM.cpp:
+        (JSC::FTL::LowerDFGToLLVM::compileNode): Added case for SkipTopScope
+        (JSC::FTL::LowerDFGToLLVM::compileSkipTopScope): Added.
+
 2014-07-28  Mark Hahnenberg  <mhahnenb...@apple.com>
 
         Support for-in in the FTL

Modified: branches/ftlopt/Source/_javascript_Core/ftl/FTLCapabilities.cpp (171766 => 171767)


--- branches/ftlopt/Source/_javascript_Core/ftl/FTLCapabilities.cpp	2014-07-29 21:41:36 UTC (rev 171766)
+++ branches/ftlopt/Source/_javascript_Core/ftl/FTLCapabilities.cpp	2014-07-29 21:49:53 UTC (rev 171767)
@@ -99,6 +99,7 @@
     case LoopHint:
     case GetMyScope:
     case SkipScope:
+    case SkipTopScope:
     case GetClosureRegisters:
     case GetClosureVar:
     case PutClosureVar:

Modified: branches/ftlopt/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp (171766 => 171767)


--- branches/ftlopt/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp	2014-07-29 21:41:36 UTC (rev 171766)
+++ branches/ftlopt/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp	2014-07-29 21:49:53 UTC (rev 171767)
@@ -593,6 +593,9 @@
         case SkipScope:
             compileSkipScope();
             break;
+        case SkipTopScope:
+            compileSkipTopScope();
+            break;
         case GetClosureRegisters:
             compileGetClosureRegisters();
             break;
@@ -3434,6 +3437,30 @@
         setJSValue(m_out.loadPtr(lowCell(m_node->child1()), m_heaps.JSScope_next));
     }
     
+
+    void compileSkipTopScope()
+    {
+        LValue scope = lowCell(m_node->child1());
+
+        LBasicBlock isNull = FTL_NEW_BLOCK(m_out, ("Activation register is null"));
+        LBasicBlock notNull = FTL_NEW_BLOCK(m_out, ("Activation register is not null"));
+
+        VirtualRegister machineActivationRegister = m_graph.machineActivationRegister();
+
+        ValueFromBlock top = m_out.anchor(scope);
+        m_out.branch(
+            m_out.isZero64(m_out.load64(addressFor(machineActivationRegister))), unsure(isNull), unsure(notNull));
+
+        LBasicBlock lastNext = m_out.appendTo(isNull, notNull);
+        ValueFromBlock next = m_out.anchor(m_out.loadPtr(scope, m_heaps.JSScope_next));
+
+        m_out.jump(notNull);
+        m_out.appendTo(notNull, lastNext);
+
+        setJSValue(m_out.phi(m_out.intPtr, top, next));
+    }
+    
+
     void compileGetClosureRegisters()
     {
         if (WriteBarrierBase<Unknown>* registers = m_graph.tryGetRegisters(m_node->child1().node())) {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to