<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[165869] trunk/Source/JavaScriptCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/165869">165869</a></dd>
<dt>Author</dt> <dd>fpizlo@apple.com</dd>
<dt>Date</dt> <dd>2014-03-18 21:44:22 -0700 (Tue, 18 Mar 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Get rid of Flush in SSA
https://bugs.webkit.org/show_bug.cgi?id=130440

Reviewed by Sam Weinig.
        
This is basically a red patch. We used to use backwards flow for determining what was
flushed, until it became clear that this doesn't make sense. Now the Flush nodes don't
accomplish anything. Keeping them around in SSA can only make things hard.

* CMakeLists.txt:
* GNUmakefile.list.am:
* JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
* JavaScriptCore.xcodeproj/project.pbxproj:
* dfg/DFGBasicBlock.cpp:
(JSC::DFG::BasicBlock::SSAData::SSAData):
* dfg/DFGBasicBlock.h:
* dfg/DFGFlushLivenessAnalysisPhase.cpp: Removed.
* dfg/DFGFlushLivenessAnalysisPhase.h: Removed.
* dfg/DFGGraph.cpp:
(JSC::DFG::Graph::dump):
* dfg/DFGPlan.cpp:
(JSC::DFG::Plan::compileInThreadImpl):
* dfg/DFGSSAConversionPhase.cpp:
(JSC::DFG::SSAConversionPhase::run):
* ftl/FTLLowerDFGToLLVM.cpp:
(JSC::FTL::LowerDFGToLLVM::compileNode):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreCMakeListstxt">trunk/Source/JavaScriptCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreGNUmakefilelistam">trunk/Source/JavaScriptCore/GNUmakefile.list.am</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxproj">trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj">trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGBasicBlockcpp">trunk/Source/JavaScriptCore/dfg/DFGBasicBlock.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGBasicBlockh">trunk/Source/JavaScriptCore/dfg/DFGBasicBlock.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGGraphcpp">trunk/Source/JavaScriptCore/dfg/DFGGraph.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGPlancpp">trunk/Source/JavaScriptCore/dfg/DFGPlan.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSSAConversionPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLLowerDFGToLLVMcpp">trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoredfgDFGFlushLivenessAnalysisPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGFlushLivenessAnalysisPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGFlushLivenessAnalysisPhaseh">trunk/Source/JavaScriptCore/dfg/DFGFlushLivenessAnalysisPhase.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/CMakeLists.txt (165868 => 165869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/CMakeLists.txt        2014-03-19 03:07:27 UTC (rev 165868)
+++ trunk/Source/JavaScriptCore/CMakeLists.txt        2014-03-19 04:44:22 UTC (rev 165869)
</span><span class="lines">@@ -142,7 +142,6 @@
</span><span class="cx">     dfg/DFGFinalizer.cpp
</span><span class="cx">     dfg/DFGFixupPhase.cpp
</span><span class="cx">     dfg/DFGFlushFormat.cpp
</span><del>-    dfg/DFGFlushLivenessAnalysisPhase.cpp
</del><span class="cx">     dfg/DFGFlushedAt.cpp
</span><span class="cx">     dfg/DFGGraph.cpp
</span><span class="cx">     dfg/DFGGraphSafepoint.cpp
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (165868 => 165869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-03-19 03:07:27 UTC (rev 165868)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-03-19 04:44:22 UTC (rev 165869)
</span><span class="lines">@@ -1,5 +1,34 @@
</span><span class="cx"> 2014-03-18  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Get rid of Flush in SSA
+        https://bugs.webkit.org/show_bug.cgi?id=130440
+
+        Reviewed by Sam Weinig.
+        
+        This is basically a red patch. We used to use backwards flow for determining what was
+        flushed, until it became clear that this doesn't make sense. Now the Flush nodes don't
+        accomplish anything. Keeping them around in SSA can only make things hard.
+
+        * CMakeLists.txt:
+        * GNUmakefile.list.am:
+        * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * dfg/DFGBasicBlock.cpp:
+        (JSC::DFG::BasicBlock::SSAData::SSAData):
+        * dfg/DFGBasicBlock.h:
+        * dfg/DFGFlushLivenessAnalysisPhase.cpp: Removed.
+        * dfg/DFGFlushLivenessAnalysisPhase.h: Removed.
+        * dfg/DFGGraph.cpp:
+        (JSC::DFG::Graph::dump):
+        * dfg/DFGPlan.cpp:
+        (JSC::DFG::Plan::compileInThreadImpl):
+        * dfg/DFGSSAConversionPhase.cpp:
+        (JSC::DFG::SSAConversionPhase::run):
+        * ftl/FTLLowerDFGToLLVM.cpp:
+        (JSC::FTL::LowerDFGToLLVM::compileNode):
+
+2014-03-18  Filip Pizlo  &lt;fpizlo@apple.com&gt;
+
</ins><span class="cx">         Unreviewed, fix iOS production build.
</span><span class="cx"> 
</span><span class="cx">         * JavaScriptCore.xcodeproj/project.pbxproj:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreGNUmakefilelistam"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/GNUmakefile.list.am (165868 => 165869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/GNUmakefile.list.am        2014-03-19 03:07:27 UTC (rev 165868)
+++ trunk/Source/JavaScriptCore/GNUmakefile.list.am        2014-03-19 04:44:22 UTC (rev 165869)
</span><span class="lines">@@ -314,8 +314,6 @@
</span><span class="cx">         Source/JavaScriptCore/dfg/DFGFixupPhase.h \
</span><span class="cx">         Source/JavaScriptCore/dfg/DFGFlushFormat.cpp \
</span><span class="cx">         Source/JavaScriptCore/dfg/DFGFlushFormat.h \
</span><del>-        Source/JavaScriptCore/dfg/DFGFlushLivenessAnalysisPhase.cpp \
-        Source/JavaScriptCore/dfg/DFGFlushLivenessAnalysisPhase.h \
</del><span class="cx">         Source/JavaScriptCore/dfg/DFGFlushedAt.cpp \
</span><span class="cx">         Source/JavaScriptCore/dfg/DFGFlushedAt.h \
</span><span class="cx">         Source/JavaScriptCore/dfg/DFGGenerationInfo.h \
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj (165868 => 165869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj        2014-03-19 03:07:27 UTC (rev 165868)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj        2014-03-19 04:44:22 UTC (rev 165869)
</span><span class="lines">@@ -395,7 +395,6 @@
</span><span class="cx">     &lt;ClCompile Include=&quot;..\dfg\DFGFixupPhase.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\dfg\DFGFlushedAt.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\dfg\DFGFlushFormat.cpp&quot; /&gt;
</span><del>-    &lt;ClCompile Include=&quot;..\dfg\DFGFlushLivenessAnalysisPhase.cpp&quot; /&gt;
</del><span class="cx">     &lt;ClCompile Include=&quot;..\dfg\DFGGraph.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\dfg\DFGGraphSafepoint.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\dfg\DFGInPlaceAbstractState.cpp&quot; /&gt;
</span><span class="lines">@@ -948,7 +947,6 @@
</span><span class="cx">     &lt;ClInclude Include=&quot;..\dfg\DFGFixupPhase.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\dfg\DFGFlushedAt.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\dfg\DFGFlushFormat.h&quot; /&gt;
</span><del>-    &lt;ClInclude Include=&quot;..\dfg\DFGFlushLivenessAnalysisPhase.h&quot; /&gt;
</del><span class="cx">     &lt;ClInclude Include=&quot;..\dfg\DFGFPRInfo.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\dfg\DFGGenerationInfo.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\dfg\DFGGPRInfo.h&quot; /&gt;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (165868 => 165869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-03-19 03:07:27 UTC (rev 165868)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-03-19 04:44:22 UTC (rev 165869)
</span><span class="lines">@@ -1249,8 +1249,6 @@
</span><span class="cx">                 A7D89CF617A0B8CC00773AD8 /* DFGCriticalEdgeBreakingPhase.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D89CE717A0B8CC00773AD8 /* DFGCriticalEdgeBreakingPhase.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 A7D89CF717A0B8CC00773AD8 /* DFGFlushFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7D89CE817A0B8CC00773AD8 /* DFGFlushFormat.cpp */; };
</span><span class="cx">                 A7D89CF817A0B8CC00773AD8 /* DFGFlushFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D89CE917A0B8CC00773AD8 /* DFGFlushFormat.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                A7D89CF917A0B8CC00773AD8 /* DFGFlushLivenessAnalysisPhase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7D89CEA17A0B8CC00773AD8 /* DFGFlushLivenessAnalysisPhase.cpp */; };
-                A7D89CFA17A0B8CC00773AD8 /* DFGFlushLivenessAnalysisPhase.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D89CEB17A0B8CC00773AD8 /* DFGFlushLivenessAnalysisPhase.h */; settings = {ATTRIBUTES = (Private, ); }; };
</del><span class="cx">                 A7D89CFB17A0B8CC00773AD8 /* DFGLivenessAnalysisPhase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7D89CEC17A0B8CC00773AD8 /* DFGLivenessAnalysisPhase.cpp */; };
</span><span class="cx">                 A7D89CFC17A0B8CC00773AD8 /* DFGLivenessAnalysisPhase.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D89CED17A0B8CC00773AD8 /* DFGLivenessAnalysisPhase.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 A7D89CFD17A0B8CC00773AD8 /* DFGOSRAvailabilityAnalysisPhase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7D89CEE17A0B8CC00773AD8 /* DFGOSRAvailabilityAnalysisPhase.cpp */; };
</span><span class="lines">@@ -2798,8 +2796,6 @@
</span><span class="cx">                 A7D89CE717A0B8CC00773AD8 /* DFGCriticalEdgeBreakingPhase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGCriticalEdgeBreakingPhase.h; path = dfg/DFGCriticalEdgeBreakingPhase.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A7D89CE817A0B8CC00773AD8 /* DFGFlushFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGFlushFormat.cpp; path = dfg/DFGFlushFormat.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A7D89CE917A0B8CC00773AD8 /* DFGFlushFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGFlushFormat.h; path = dfg/DFGFlushFormat.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                A7D89CEA17A0B8CC00773AD8 /* DFGFlushLivenessAnalysisPhase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGFlushLivenessAnalysisPhase.cpp; path = dfg/DFGFlushLivenessAnalysisPhase.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
-                A7D89CEB17A0B8CC00773AD8 /* DFGFlushLivenessAnalysisPhase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGFlushLivenessAnalysisPhase.h; path = dfg/DFGFlushLivenessAnalysisPhase.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 A7D89CEC17A0B8CC00773AD8 /* DFGLivenessAnalysisPhase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGLivenessAnalysisPhase.cpp; path = dfg/DFGLivenessAnalysisPhase.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A7D89CED17A0B8CC00773AD8 /* DFGLivenessAnalysisPhase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGLivenessAnalysisPhase.h; path = dfg/DFGLivenessAnalysisPhase.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A7D89CEE17A0B8CC00773AD8 /* DFGOSRAvailabilityAnalysisPhase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGOSRAvailabilityAnalysisPhase.cpp; path = dfg/DFGOSRAvailabilityAnalysisPhase.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -4367,8 +4363,6 @@
</span><span class="cx">                                 0F9D339517FFC4E60073C2BC /* DFGFlushedAt.h */,
</span><span class="cx">                                 A7D89CE817A0B8CC00773AD8 /* DFGFlushFormat.cpp */,
</span><span class="cx">                                 A7D89CE917A0B8CC00773AD8 /* DFGFlushFormat.h */,
</span><del>-                                A7D89CEA17A0B8CC00773AD8 /* DFGFlushLivenessAnalysisPhase.cpp */,
-                                A7D89CEB17A0B8CC00773AD8 /* DFGFlushLivenessAnalysisPhase.h */,
</del><span class="cx">                                 86EC9DB61328DF82002B2AD7 /* DFGGenerationInfo.h */,
</span><span class="cx">                                 86EC9DB71328DF82002B2AD7 /* DFGGraph.cpp */,
</span><span class="cx">                                 86EC9DB81328DF82002B2AD7 /* DFGGraph.h */,
</span><span class="lines">@@ -5086,7 +5080,6 @@
</span><span class="cx">                                 0F2BDC16151C5D4F00CD8910 /* DFGFixupPhase.h in Headers */,
</span><span class="cx">                                 0F9D339717FFC4E60073C2BC /* DFGFlushedAt.h in Headers */,
</span><span class="cx">                                 A7D89CF817A0B8CC00773AD8 /* DFGFlushFormat.h in Headers */,
</span><del>-                                A7D89CFA17A0B8CC00773AD8 /* DFGFlushLivenessAnalysisPhase.h in Headers */,
</del><span class="cx">                                 86EC9DC61328DF82002B2AD7 /* DFGGenerationInfo.h in Headers */,
</span><span class="cx">                                 86EC9DC81328DF82002B2AD7 /* DFGGraph.h in Headers */,
</span><span class="cx">                                 0F2FCCFA18A60070001A27F8 /* DFGGraphSafepoint.h in Headers */,
</span><span class="lines">@@ -6287,7 +6280,6 @@
</span><span class="cx">                                 0F2BDC15151C5D4D00CD8910 /* DFGFixupPhase.cpp in Sources */,
</span><span class="cx">                                 0F9D339617FFC4E60073C2BC /* DFGFlushedAt.cpp in Sources */,
</span><span class="cx">                                 A7D89CF717A0B8CC00773AD8 /* DFGFlushFormat.cpp in Sources */,
</span><del>-                                A7D89CF917A0B8CC00773AD8 /* DFGFlushLivenessAnalysisPhase.cpp in Sources */,
</del><span class="cx">                                 86EC9DC71328DF82002B2AD7 /* DFGGraph.cpp in Sources */,
</span><span class="cx">                                 0F2FCCF918A60070001A27F8 /* DFGGraphSafepoint.cpp in Sources */,
</span><span class="cx">                                 A704D90517A0BAA8006BA554 /* DFGInPlaceAbstractState.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGBasicBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGBasicBlock.cpp (165868 => 165869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGBasicBlock.cpp        2014-03-19 03:07:27 UTC (rev 165868)
+++ trunk/Source/JavaScriptCore/dfg/DFGBasicBlock.cpp        2014-03-19 04:44:22 UTC (rev 165869)
</span><span class="lines">@@ -111,9 +111,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> BasicBlock::SSAData::SSAData(BasicBlock* block)
</span><del>-    : flushAtHead(OperandsLike, block-&gt;variablesAtHead)
-    , flushAtTail(OperandsLike, block-&gt;variablesAtHead)
-    , availabilityAtHead(OperandsLike, block-&gt;variablesAtHead)
</del><ins>+    : availabilityAtHead(OperandsLike, block-&gt;variablesAtHead)
</ins><span class="cx">     , availabilityAtTail(OperandsLike, block-&gt;variablesAtHead)
</span><span class="cx"> {
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGBasicBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGBasicBlock.h (165868 => 165869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGBasicBlock.h        2014-03-19 03:07:27 UTC (rev 165868)
+++ trunk/Source/JavaScriptCore/dfg/DFGBasicBlock.h        2014-03-19 04:44:22 UTC (rev 165869)
</span><span class="lines">@@ -143,8 +143,6 @@
</span><span class="cx">     unsigned innerMostLoopIndices[numberOfInnerMostLoopIndices];
</span><span class="cx"> 
</span><span class="cx">     struct SSAData {
</span><del>-        Operands&lt;FlushedAt&gt; flushAtHead;
-        Operands&lt;FlushedAt&gt; flushAtTail;
</del><span class="cx">         Operands&lt;Availability&gt; availabilityAtHead;
</span><span class="cx">         Operands&lt;Availability&gt; availabilityAtTail;
</span><span class="cx">         HashSet&lt;Node*&gt; liveAtHead;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGFlushLivenessAnalysisPhasecpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/dfg/DFGFlushLivenessAnalysisPhase.cpp (165868 => 165869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGFlushLivenessAnalysisPhase.cpp        2014-03-19 03:07:27 UTC (rev 165868)
+++ trunk/Source/JavaScriptCore/dfg/DFGFlushLivenessAnalysisPhase.cpp        2014-03-19 04:44:22 UTC (rev 165869)
</span><span class="lines">@@ -1,208 +0,0 @@
</span><del>-/*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#include &quot;config.h&quot;
-#include &quot;DFGFlushLivenessAnalysisPhase.h&quot;
-
-#if ENABLE(DFG_JIT)
-
-#include &quot;DFGBasicBlockInlines.h&quot;
-#include &quot;DFGGraph.h&quot;
-#include &quot;DFGInsertionSet.h&quot;
-#include &quot;DFGPhase.h&quot;
-#include &quot;OperandsInlines.h&quot;
-#include &quot;JSCInlines.h&quot;
-
-namespace JSC { namespace DFG {
-
-class FlushLivenessAnalysisPhase : public Phase {
-public:
-    FlushLivenessAnalysisPhase(Graph&amp; graph)
-        : Phase(graph, &quot;flush-liveness analysis&quot;)
-    {
-    }
-    
-    bool run()
-    {
-        ASSERT(m_graph.m_form == SSA);
-        
-        // Liveness is a backwards analysis; the roots are the blocks that
-        // end in a terminal (Return/Unreachable). For now, we
-        // use a fixpoint formulation since liveness is a rapid analysis with
-        // convergence guaranteed after O(connectivity).
-        
-        // Start by assuming that everything is dead.
-        for (BlockIndex blockIndex = m_graph.numBlocks(); blockIndex--;) {
-            BasicBlock* block = m_graph.block(blockIndex);
-            if (!block)
-                continue;
-            block-&gt;ssa-&gt;flushAtHead.fill(FlushedAt());
-            block-&gt;ssa-&gt;flushAtTail.fill(FlushedAt());
-        }
-        
-        do {
-            m_changed = false;
-            for (BlockIndex blockIndex = m_graph.numBlocks(); blockIndex--;)
-                process(blockIndex);
-        } while (m_changed);
-        
-        Operands&lt;FlushedAt&gt;&amp; root = m_graph.block(0)-&gt;ssa-&gt;flushAtHead;
-        for (unsigned i = root.size(); i--;) {
-            if (root.isArgument(i)) {
-                if (!root[i]
-                    || root[i] == FlushedAt(FlushedJSValue, VirtualRegister(root.operandForIndex(i))))
-                    continue;
-            } else {
-                if (!root[i])
-                    continue;
-            }
-            dataLog(
-                &quot;Bad flush liveness analysis result: bad flush liveness at root: &quot;,
-                root, &quot;\n&quot;);
-            dataLog(&quot;IR at time of error:\n&quot;);
-            m_graph.dump();
-            CRASH();
-        }
-        
-        return true;
-    }
-
-private:
-    void process(BlockIndex blockIndex)
-    {
-        BasicBlock* block = m_graph.block(blockIndex);
-        if (!block)
-            return;
-        
-        m_live = block-&gt;ssa-&gt;flushAtTail;
-        
-        for (unsigned nodeIndex = block-&gt;size(); nodeIndex--;) {
-            Node* node = block-&gt;at(nodeIndex);
-            
-            switch (node-&gt;op()) {
-            case SetLocal: {
-                VariableAccessData* variable = node-&gt;variableAccessData();
-                FlushedAt&amp; current = m_live.operand(variable-&gt;local());
-                if (!!current &amp;&amp; current != variable-&gt;flushedAt())
-                    reportError(node);
-                current = FlushedAt();
-                break;
-            }
-                
-            case GetArgument: {
-                VariableAccessData* variable = node-&gt;variableAccessData();
-                ASSERT(variable-&gt;local() == variable-&gt;machineLocal());
-                ASSERT(variable-&gt;local().isArgument());
-                FlushedAt&amp; current = m_live.operand(variable-&gt;local());
-                if (!!current &amp;&amp; current != variable-&gt;flushedAt())
-                    reportError(node);
-                current = FlushedAt(FlushedJSValue, node-&gt;local());
-                break;
-            }
-                
-            case Flush:
-            case GetLocal: {
-                VariableAccessData* variable = node-&gt;variableAccessData();
-                FlushedAt&amp; current = m_live.operand(variable-&gt;local());
-                if (!!current &amp;&amp; current != variable-&gt;flushedAt())
-                    reportError(node);
-                current = variable-&gt;flushedAt();
-                break;
-            }
-                
-            default:
-                break;
-            }
-        }
-        
-        if (m_live == block-&gt;ssa-&gt;flushAtHead)
-            return;
-        
-        m_changed = true;
-        block-&gt;ssa-&gt;flushAtHead = m_live;
-        for (unsigned i = block-&gt;predecessors.size(); i--;) {
-            BasicBlock* predecessor = block-&gt;predecessors[i];
-            for (unsigned j = m_live.size(); j--;) {
-                FlushedAt&amp; predecessorFlush = predecessor-&gt;ssa-&gt;flushAtTail[j];
-                FlushedAt myFlush = m_live[j];
-                
-                // Three possibilities:
-                // 1) Predecessor format is Dead, in which case it acquires our format.
-                // 2) Predecessor format is not Dead but our format is dead, in which
-                //    case we acquire the predecessor format.
-                // 3) Predecessor format is identical to our format, in which case we
-                //    do nothing.
-                // 4) Predecessor format is different from our format and it's not Dead,
-                //    in which case we have an erroneous set of Flushes and SetLocals.
-
-                if (!predecessorFlush) {
-                    predecessorFlush = myFlush;
-                    continue;
-                }
-
-                if (!myFlush) {
-                    m_live[j] = predecessorFlush;
-                    continue;
-                }
-
-                if (predecessorFlush == myFlush)
-                    continue;
-                
-                dataLog(
-                    &quot;Bad Flush merge at edge &quot;, *predecessor, &quot; -&gt; &quot;, *block,
-                    &quot;, local variable r&quot;, m_live.operandForIndex(j), &quot;: &quot;, *predecessor,
-                    &quot; has &quot;, predecessorFlush, &quot; and &quot;, *block, &quot; has &quot;, myFlush, &quot;.\n&quot;);
-                dataLog(&quot;IR at time of error:\n&quot;);
-                m_graph.dump();
-                CRASH();
-            }
-        }
-    }
-    
-    NO_RETURN_DUE_TO_CRASH void reportError(Node* node)
-    {
-        dataLog(
-            &quot;Bad flush merge at node &quot;, node, &quot;, r&quot;, node-&gt;local(), &quot;: node claims &quot;,
-            node-&gt;variableAccessData()-&gt;flushedAt(), &quot; but backwards flow claims &quot;,
-            m_live.operand(node-&gt;local()), &quot;.\n&quot;);
-        dataLog(&quot;IR at time of error:\n&quot;);
-        m_graph.dump();
-        CRASH();
-    }
-    
-    bool m_changed;
-    Operands&lt;FlushedAt&gt; m_live;
-};
-
-bool performFlushLivenessAnalysis(Graph&amp; graph)
-{
-    SamplingRegion samplingRegion(&quot;DFG Flush-Liveness Analysis Phase&quot;);
-    return runPhase&lt;FlushLivenessAnalysisPhase&gt;(graph);
-}
-
-} } // namespace JSC::DFG
-
-#endif // ENABLE(DFG_JIT)
-
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGFlushLivenessAnalysisPhaseh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/JavaScriptCore/dfg/DFGFlushLivenessAnalysisPhase.h (165868 => 165869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGFlushLivenessAnalysisPhase.h        2014-03-19 03:07:27 UTC (rev 165868)
+++ trunk/Source/JavaScriptCore/dfg/DFGFlushLivenessAnalysisPhase.h        2014-03-19 04:44:22 UTC (rev 165869)
</span><span class="lines">@@ -1,46 +0,0 @@
</span><del>-/*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#ifndef DFGFlushLivenessAnalysisPhase_h
-#define DFGFlushLivenessAnalysisPhase_h
-
-#if ENABLE(DFG_JIT)
-
-#include &quot;DFGCommon.h&quot;
-
-namespace JSC { namespace DFG {
-
-class Graph;
-
-// Computes BasicBlock::ssa-&gt;flushFormatAtHead
-
-bool performFlushLivenessAnalysis(Graph&amp;);
-
-} } // namespace JSC::DFG
-
-#endif // ENABLE(DFG_JIT)
-
-#endif // DFGFlushLivenessAnalysisPhase_h
-
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGGraphcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGGraph.cpp (165868 => 165869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGGraph.cpp        2014-03-19 03:07:27 UTC (rev 165868)
+++ trunk/Source/JavaScriptCore/dfg/DFGGraph.cpp        2014-03-19 04:44:22 UTC (rev 165869)
</span><span class="lines">@@ -453,7 +453,6 @@
</span><span class="cx">             
</span><span class="cx">         case SSA: {
</span><span class="cx">             RELEASE_ASSERT(block-&gt;ssa);
</span><del>-            out.print(&quot;  Flush format: &quot;, block-&gt;ssa-&gt;flushAtHead, &quot;\n&quot;);
</del><span class="cx">             out.print(&quot;  Availability: &quot;, block-&gt;ssa-&gt;availabilityAtHead, &quot;\n&quot;);
</span><span class="cx">             out.print(&quot;  Live: &quot;, nodeListDump(block-&gt;ssa-&gt;liveAtHead), &quot;\n&quot;);
</span><span class="cx">             out.print(&quot;  Values: &quot;, nodeMapDump(block-&gt;ssa-&gt;valuesAtHead, context), &quot;\n&quot;);
</span><span class="lines">@@ -479,7 +478,6 @@
</span><span class="cx">             
</span><span class="cx">         case SSA: {
</span><span class="cx">             RELEASE_ASSERT(block-&gt;ssa);
</span><del>-            out.print(&quot;  Flush format: &quot;, block-&gt;ssa-&gt;flushAtTail, &quot;\n&quot;);
</del><span class="cx">             out.print(&quot;  Availability: &quot;, block-&gt;ssa-&gt;availabilityAtTail, &quot;\n&quot;);
</span><span class="cx">             out.print(&quot;  Live: &quot;, nodeListDump(block-&gt;ssa-&gt;liveAtTail), &quot;\n&quot;);
</span><span class="cx">             out.print(&quot;  Values: &quot;, nodeMapDump(block-&gt;ssa-&gt;valuesAtTail, context), &quot;\n&quot;);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGPlancpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGPlan.cpp (165868 => 165869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGPlan.cpp        2014-03-19 03:07:27 UTC (rev 165868)
+++ trunk/Source/JavaScriptCore/dfg/DFGPlan.cpp        2014-03-19 04:44:22 UTC (rev 165869)
</span><span class="lines">@@ -39,7 +39,6 @@
</span><span class="cx"> #include &quot;DFGCriticalEdgeBreakingPhase.h&quot;
</span><span class="cx"> #include &quot;DFGDCEPhase.h&quot;
</span><span class="cx"> #include &quot;DFGFailedFinalizer.h&quot;
</span><del>-#include &quot;DFGFlushLivenessAnalysisPhase.h&quot;
</del><span class="cx"> #include &quot;DFGFixupPhase.h&quot;
</span><span class="cx"> #include &quot;DFGGraphSafepoint.h&quot;
</span><span class="cx"> #include &quot;DFGIntegerCheckCombiningPhase.h&quot;
</span><span class="lines">@@ -317,7 +316,6 @@
</span><span class="cx">         performDCE(dfg); // We rely on this to convert dead SetLocals into the appropriate hint, and to kill dead code that won't be recognized as dead by LLVM.
</span><span class="cx">         performStackLayout(dfg);
</span><span class="cx">         performLivenessAnalysis(dfg);
</span><del>-        performFlushLivenessAnalysis(dfg);
</del><span class="cx">         performOSRAvailabilityAnalysis(dfg);
</span><span class="cx">         performWatchpointCollection(dfg);
</span><span class="cx">         
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSSAConversionPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp (165868 => 165869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp        2014-03-19 03:07:27 UTC (rev 165868)
+++ trunk/Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp        2014-03-19 04:44:22 UTC (rev 165869)
</span><span class="lines">@@ -304,12 +304,7 @@
</span><span class="cx">         //   to the node specified by variablesAtHead.
</span><span class="cx">         // - SetLocal gets NodeMustGenerate if it's flushed, or turns into a
</span><span class="cx">         //   Check otherwise.
</span><del>-        // - Flush loses its children but remains, because we want to know when a
-        //   flushed SetLocal's value is no longer needed. This also makes it simpler
-        //   to reason about the format of a local, since we can just do a backwards
-        //   analysis (see FlushLivenessAnalysisPhase). As part of the backwards
-        //   analysis, we say that the type of a local can be either int32, double,
-        //   value, or dead.
</del><ins>+        // - Flush loses its children and turns into a Phantom.
</ins><span class="cx">         // - PhantomLocal becomes Phantom, and its child is whatever is specified
</span><span class="cx">         //   by variablesAtHead.
</span><span class="cx">         // - SetArgument turns into GetArgument unless it's a captured variable.
</span><span class="lines">@@ -363,6 +358,7 @@
</span><span class="cx">                     
</span><span class="cx">                 case Flush: {
</span><span class="cx">                     node-&gt;children.reset();
</span><ins>+                    node-&gt;convertToPhantom();
</ins><span class="cx">                     // This is only for Upsilons. An Upsilon will only refer to a Flush if
</span><span class="cx">                     // there were no SetLocals or GetLocals in the block.
</span><span class="cx">                     node-&gt;misc.replacement = block-&gt;variablesAtHead.operand(node-&gt;local());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLLowerDFGToLLVMcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp (165868 => 165869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp        2014-03-19 03:07:27 UTC (rev 165868)
+++ trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp        2014-03-19 04:44:22 UTC (rev 165869)
</span><span class="lines">@@ -608,7 +608,6 @@
</span><span class="cx">         case StoreBarrierWithNullCheck:
</span><span class="cx">             compileStoreBarrierWithNullCheck();
</span><span class="cx">             break;
</span><del>-        case Flush:
</del><span class="cx">         case PhantomLocal:
</span><span class="cx">         case SetArgument:
</span><span class="cx">         case LoopHint:
</span></span></pre>
</div>
</div>

</body>
</html>