<!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>[198108] releases/WebKitGTK/webkit-2.12/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/198108">198108</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2016-03-14 03:27:34 -0700 (Mon, 14 Mar 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/197725">r197725</a> - [JSC] Small clean up of how we use SSA's valuesAtHead
https://bugs.webkit.org/show_bug.cgi?id=155152

Patch by Benjamin Poulain &lt;bpoulain@apple.com&gt; on 2016-03-07
Reviewed by Filip Pizlo.

liveAtHead and valuesAtHead contain the same nodes,
we do not need the extra look up.

This also opens the way to use the same kind of liveness
analysis as Air (where live values at head do not use a set).

* dfg/DFGInPlaceAbstractState.cpp:
(JSC::DFG::InPlaceAbstractState::beginBasicBlock):
(JSC::DFG::InPlaceAbstractState::merge):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit212SourceJavaScriptCoreChangeLog">releases/WebKitGTK/webkit-2.12/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit212SourceJavaScriptCoredfgDFGInPlaceAbstractStatecpp">releases/WebKitGTK/webkit-2.12/Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="releasesWebKitGTKwebkit212SourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/JavaScriptCore/ChangeLog (198107 => 198108)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/JavaScriptCore/ChangeLog        2016-03-14 10:20:20 UTC (rev 198107)
+++ releases/WebKitGTK/webkit-2.12/Source/JavaScriptCore/ChangeLog        2016-03-14 10:27:34 UTC (rev 198108)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2016-03-07  Benjamin Poulain  &lt;bpoulain@apple.com&gt;
+
+        [JSC] Small clean up of how we use SSA's valuesAtHead
+        https://bugs.webkit.org/show_bug.cgi?id=155152
+
+        Reviewed by Filip Pizlo.
+
+        liveAtHead and valuesAtHead contain the same nodes,
+        we do not need the extra look up.
+
+        This also opens the way to use the same kind of liveness
+        analysis as Air (where live values at head do not use a set).
+
+        * dfg/DFGInPlaceAbstractState.cpp:
+        (JSC::DFG::InPlaceAbstractState::beginBasicBlock):
+        (JSC::DFG::InPlaceAbstractState::merge):
+
</ins><span class="cx"> 2016-03-07  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         RegExp.prototype.exec() should call into Yarr at most once
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourceJavaScriptCoredfgDFGInPlaceAbstractStatecpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.cpp (198107 => 198108)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.cpp        2016-03-14 10:20:20 UTC (rev 198107)
+++ releases/WebKitGTK/webkit-2.12/Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.cpp        2016-03-14 10:27:34 UTC (rev 198108)
</span><span class="lines">@@ -62,10 +62,8 @@
</span><span class="cx">     m_variables = basicBlock-&gt;valuesAtHead;
</span><span class="cx">     
</span><span class="cx">     if (m_graph.m_form == SSA) {
</span><del>-        HashMap&lt;Node*, AbstractValue&gt;::iterator iter = basicBlock-&gt;ssa-&gt;valuesAtHead.begin();
-        HashMap&lt;Node*, AbstractValue&gt;::iterator end = basicBlock-&gt;ssa-&gt;valuesAtHead.end();
-        for (; iter != end; ++iter)
-            forNode(iter-&gt;key) = iter-&gt;value;
</del><ins>+        for (auto&amp; entry : basicBlock-&gt;ssa-&gt;valuesAtHead)
+            forNode(entry.key) = entry.value;
</ins><span class="cx">     }
</span><span class="cx">     basicBlock-&gt;cfaShouldRevisit = false;
</span><span class="cx">     basicBlock-&gt;cfaHasVisited = true;
</span><span class="lines">@@ -300,17 +298,16 @@
</span><span class="cx">     case SSA: {
</span><span class="cx">         for (size_t i = from-&gt;valuesAtTail.size(); i--;)
</span><span class="cx">             changed |= to-&gt;valuesAtHead[i].merge(from-&gt;valuesAtTail[i]);
</span><del>-        
-        HashSet&lt;Node*&gt;::iterator iter = to-&gt;ssa-&gt;liveAtHead.begin();
-        HashSet&lt;Node*&gt;::iterator end = to-&gt;ssa-&gt;liveAtHead.end();
-        for (; iter != end; ++iter) {
-            Node* node = *iter;
</del><ins>+
+        for (auto&amp; entry : to-&gt;ssa-&gt;valuesAtHead) {
+            Node* node = entry.key;
</ins><span class="cx">             if (verbose)
</span><del>-                dataLog(&quot;      Merging for &quot;, node, &quot;: from &quot;, from-&gt;ssa-&gt;valuesAtTail.find(node)-&gt;value, &quot; to &quot;, to-&gt;ssa-&gt;valuesAtHead.find(node)-&gt;value, &quot;\n&quot;);
-            changed |= to-&gt;ssa-&gt;valuesAtHead.find(node)-&gt;value.merge(
</del><ins>+                dataLog(&quot;      Merging for &quot;, node, &quot;: from &quot;, from-&gt;ssa-&gt;valuesAtTail.find(node)-&gt;value, &quot; to &quot;, entry.value, &quot;\n&quot;);
+            changed |= entry.value.merge(
</ins><span class="cx">                 from-&gt;ssa-&gt;valuesAtTail.find(node)-&gt;value);
</span><ins>+
</ins><span class="cx">             if (verbose)
</span><del>-                dataLog(&quot;         Result: &quot;, to-&gt;ssa-&gt;valuesAtHead.find(node)-&gt;value, &quot;\n&quot;);
</del><ins>+                dataLog(&quot;         Result: &quot;, entry.value, &quot;\n&quot;);
</ins><span class="cx">         }
</span><span class="cx">         break;
</span><span class="cx">     }
</span></span></pre>
</div>
</div>

</body>
</html>