Title: [169951] trunk/Source
Revision
169951
Author
mhahnenb...@apple.com
Date
2014-06-13 15:18:52 -0700 (Fri, 13 Jun 2014)

Log Message

OSR exit should barrier the Executables for all InlineCallFrames, not just those on the stack at the time of exit
https://bugs.webkit.org/show_bug.cgi?id=133880

Reviewed by Filip Pizlo.

Source/_javascript_Core:
We could have exited due to a value received from an inlined block that's no longer on
the stack, so we should just barrier all InlineCallFrames.

* dfg/DFGOSRExitCompilerCommon.cpp:
(JSC::DFG::adjustAndJumpToTarget):

Source/WTF:
* wtf/Bag.h:
(WTF::Bag::iterator::operator!=): Add != to the Bag iterator so we can use it in range-based iteration.

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (169950 => 169951)


--- trunk/Source/_javascript_Core/ChangeLog	2014-06-13 21:49:09 UTC (rev 169950)
+++ trunk/Source/_javascript_Core/ChangeLog	2014-06-13 22:18:52 UTC (rev 169951)
@@ -1,3 +1,16 @@
+2014-06-13  Mark Hahnenberg  <mhahnenb...@apple.com>
+
+        OSR exit should barrier the Executables for all InlineCallFrames, not just those on the stack at the time of exit
+        https://bugs.webkit.org/show_bug.cgi?id=133880
+
+        Reviewed by Filip Pizlo.
+
+        We could have exited due to a value received from an inlined block that's no longer on 
+        the stack, so we should just barrier all InlineCallFrames.
+
+        * dfg/DFGOSRExitCompilerCommon.cpp:
+        (JSC::DFG::adjustAndJumpToTarget):
+
 2014-06-13  Alex Christensen  <achristen...@webkit.org>
 
         Make css jit compile for armv7.

Modified: trunk/Source/_javascript_Core/dfg/DFGOSRExitCompilerCommon.cpp (169950 => 169951)


--- trunk/Source/_javascript_Core/dfg/DFGOSRExitCompilerCommon.cpp	2014-06-13 21:49:09 UTC (rev 169950)
+++ trunk/Source/_javascript_Core/dfg/DFGOSRExitCompilerCommon.cpp	2014-06-13 22:18:52 UTC (rev 169951)
@@ -199,13 +199,16 @@
 void adjustAndJumpToTarget(CCallHelpers& jit, const OSRExitBase& exit)
 {
 #if ENABLE(GGC) 
-    // 11) Write barrier the owner executable because we're jumping into a different block.
-    for (CodeOrigin codeOrigin = exit.m_codeOrigin; ; codeOrigin = codeOrigin.inlineCallFrame->caller) {
-        CodeBlock* baselineCodeBlock = jit.baselineCodeBlockFor(codeOrigin);
-        jit.move(AssemblyHelpers::TrustedImmPtr(baselineCodeBlock->ownerExecutable()), GPRInfo::nonArgGPR0); 
-        osrWriteBarrier(jit, GPRInfo::nonArgGPR0, GPRInfo::nonArgGPR1);
-        if (!codeOrigin.inlineCallFrame)
-            break;
+    // 11) Write barrier the owner executables because we're jumping into a different block.
+    jit.move(AssemblyHelpers::TrustedImmPtr(jit.codeBlock()->ownerExecutable()), GPRInfo::nonArgGPR0);
+    osrWriteBarrier(jit, GPRInfo::nonArgGPR0, GPRInfo::nonArgGPR1);
+    InlineCallFrameSet* inlineCallFrames = jit.codeBlock()->jitCode()->dfgCommon()->inlineCallFrames.get();
+    if (inlineCallFrames) {
+        for (InlineCallFrame* inlineCallFrame : *inlineCallFrames) {
+            ScriptExecutable* ownerExecutable = inlineCallFrame->executable.get();
+            jit.move(AssemblyHelpers::TrustedImmPtr(ownerExecutable), GPRInfo::nonArgGPR0); 
+            osrWriteBarrier(jit, GPRInfo::nonArgGPR0, GPRInfo::nonArgGPR1);
+        }
     }
 #endif
 

Modified: trunk/Source/WTF/ChangeLog (169950 => 169951)


--- trunk/Source/WTF/ChangeLog	2014-06-13 21:49:09 UTC (rev 169950)
+++ trunk/Source/WTF/ChangeLog	2014-06-13 22:18:52 UTC (rev 169951)
@@ -1,3 +1,13 @@
+2014-06-13  Mark Hahnenberg  <mhahnenb...@apple.com>
+
+        OSR exit should barrier the Executables for all InlineCallFrames, not just those on the stack at the time of exit
+        https://bugs.webkit.org/show_bug.cgi?id=133880
+
+        Reviewed by Filip Pizlo.
+
+        * wtf/Bag.h:
+        (WTF::Bag::iterator::operator!=): Add != to the Bag iterator so we can use it in range-based iteration.
+
 2014-06-12  Gavin Barraclough  <barraclo...@apple.com>
 
         Add support for thread/WorkQueue QoS

Modified: trunk/Source/WTF/wtf/Bag.h (169950 => 169951)


--- trunk/Source/WTF/wtf/Bag.h	2014-06-13 21:49:09 UTC (rev 169950)
+++ trunk/Source/WTF/wtf/Bag.h	2014-06-13 22:18:52 UTC (rev 169951)
@@ -83,6 +83,12 @@
         {
             return m_node == other.m_node;
         }
+
+        bool operator!=(const iterator& other) const
+        {
+            return !(*this == other);
+        }
+
     private:
         template<typename U> friend class WTF::Bag;
         Node* m_node;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to