<!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>[208588] trunk</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/208588">208588</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2016-11-11 08:50:57 -0800 (Fri, 11 Nov 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Unreviewed, rolling out <a href="http://trac.webkit.org/projects/webkit/changeset/208117">r208117</a> and <a href="http://trac.webkit.org/projects/webkit/changeset/208160">r208160</a>.

Regressed Speedometer by &gt;1.5%

Reverted changesets:

&quot;We should have a way of profiling when a get_by_id is pure
and to emit a PureGetById in the DFG/FTL&quot;
https://bugs.webkit.org/show_bug.cgi?id=163305
http://trac.webkit.org/changeset/208117

&quot;Debug JSC test microbenchmarks/pure-get-by-id-cse-2.js timing
out&quot;
https://bugs.webkit.org/show_bug.cgi?id=164227
http://trac.webkit.org/changeset/208160</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkJSTestsChangeLog">trunk/JSTests/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeStructureStubInfocpp">trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeStructureStubInfoh">trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGAbstractInterpreterInlinesh">trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGArrayModecpp">trunk/Source/JavaScriptCore/dfg/DFGArrayMode.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGByteCodeParsercpp">trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGClobberizeh">trunk/Source/JavaScriptCore/dfg/DFGClobberize.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGConstantFoldingPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGDoesGCcpp">trunk/Source/JavaScriptCore/dfg/DFGDoesGC.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGFixupPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGNodeh">trunk/Source/JavaScriptCore/dfg/DFGNode.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGNodeTypeh">trunk/Source/JavaScriptCore/dfg/DFGNodeType.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGPredictionPropagationPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSafeToExecuteh">trunk/Source/JavaScriptCore/dfg/DFGSafeToExecute.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJITcpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJITh">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJIT32_64cpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJIT64cpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLCapabilitiescpp">trunk/Source/JavaScriptCore/ftl/FTLCapabilities.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLLowerDFGToB3cpp">trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOperationscpp">trunk/Source/JavaScriptCore/jit/JITOperations.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOperationsh">trunk/Source/JavaScriptCore/jit/JITOperations.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITPropertyAccesscpp">trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITPropertyAccess32_64cpp">trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitRepatchcpp">trunk/Source/JavaScriptCore/jit/Repatch.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitRepatchh">trunk/Source/JavaScriptCore/jit/Repatch.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreprofilerProfilerJettisonReasoncpp">trunk/Source/JavaScriptCore/profiler/ProfilerJettisonReason.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreprofilerProfilerJettisonReasonh">trunk/Source/JavaScriptCore/profiler/ProfilerJettisonReason.h</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkJSTestsmicrobenchmarkspuregetbyidcse2js">trunk/JSTests/microbenchmarks/pure-get-by-id-cse-2.js</a></li>
<li><a href="#trunkJSTestsmicrobenchmarkspuregetbyidcsejs">trunk/JSTests/microbenchmarks/pure-get-by-id-cse.js</a></li>
<li><a href="#trunkJSTestsstresspuregetbyidcsecorrectnessjs">trunk/JSTests/stress/pure-get-by-id-cse-correctness.js</a></li>
<li><a href="#trunkJSTestsstresspuregetbyidonnonobjectjs">trunk/JSTests/stress/pure-get-by-id-on-non-object.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkJSTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/JSTests/ChangeLog (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/ChangeLog        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/JSTests/ChangeLog        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2016-11-11  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Unreviewed, rolling out r208117 and r208160.
+
+        Regressed Speedometer by &gt;1.5%
+
+        Reverted changesets:
+
+        &quot;We should have a way of profiling when a get_by_id is pure
+        and to emit a PureGetById in the DFG/FTL&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=163305
+        http://trac.webkit.org/changeset/208117
+
+        &quot;Debug JSC test microbenchmarks/pure-get-by-id-cse-2.js timing
+        out&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=164227
+        http://trac.webkit.org/changeset/208160
+
</ins><span class="cx"> 2016-11-11  Saam Barati  &lt;sbarati@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         We should have a more concise way of determining when we're varargs calling a function using rest parameters
</span></span></pre></div>
<a id="trunkJSTestsmicrobenchmarkspuregetbyidcse2js"></a>
<div class="delfile"><h4>Deleted: trunk/JSTests/microbenchmarks/pure-get-by-id-cse-2.js (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/microbenchmarks/pure-get-by-id-cse-2.js        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/JSTests/microbenchmarks/pure-get-by-id-cse-2.js        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -1,30 +0,0 @@
</span><del>-function foo(o, c) {
-    if (o.f) {
-        let sum = 0;
-        for (let i = 0; i &lt; c; i++)
-            sum += o.f;
-        return sum;
-    }
-}
-noInline(foo);
-
-let start = Date.now();
-let objects = [];
-const objectCount = 20;
-for (let i = 0; i &lt; objectCount; i++) {
-    let obj = {};
-    for (let j = 0; j &lt; i * 2; j++) {
-        obj[&quot;j&quot; + j] = j;
-    }
-    obj.f = 20;
-    objects.push(obj);
-}
-
-for (let i = 0; i &lt; 10000; i++) {
-    let obj = objects[i % objects.length];
-    foo(obj, 25);
-}
-
-const verbose = false;
-if (verbose)
-    print(Date.now() - start);
</del></span></pre></div>
<a id="trunkJSTestsmicrobenchmarkspuregetbyidcsejs"></a>
<div class="delfile"><h4>Deleted: trunk/JSTests/microbenchmarks/pure-get-by-id-cse.js (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/microbenchmarks/pure-get-by-id-cse.js        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/JSTests/microbenchmarks/pure-get-by-id-cse.js        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -1,26 +0,0 @@
</span><del>-function foo(o) {
-    if (o.f)
-        return o.f + o.f + o.f + o.f; 
-}
-noInline(foo);
-
-let start = Date.now();
-let objects = [];
-const objectCount = 20;
-for (let i = 0; i &lt; objectCount; i++) {
-    let obj = {};
-    for (let j = 0; j &lt; i * 2; j++) {
-        obj[&quot;j&quot; + j] = j;
-    }
-    obj.f = 20;
-    objects.push(obj);
-}
-
-for (let i = 0; i &lt; 10000000; i++) {
-    let obj = objects[i % objects.length];
-    foo(obj);
-}
-
-const verbose = false;
-if (verbose)
-    print(Date.now() - start);
</del></span></pre></div>
<a id="trunkJSTestsstresspuregetbyidcsecorrectnessjs"></a>
<div class="delfile"><h4>Deleted: trunk/JSTests/stress/pure-get-by-id-cse-correctness.js (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/stress/pure-get-by-id-cse-correctness.js        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/JSTests/stress/pure-get-by-id-cse-correctness.js        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -1,39 +0,0 @@
</span><del>-function assert(b) {
-    if (!b)
-        throw new Error(&quot;Bad assertion&quot;)
-}
-noInline(assert);
-
-function foo(o1, o2) {
-    let a = o1.f1;
-    let b = o2.f2;
-    return a + o1.f1 + b;
-}
-noInline(foo);
-
-let objs = [];
-const count = 80;
-for (let i = 0; i &lt; count; i++) {
-    let o = {};
-    for (let j = 0; j &lt; i; ++j) {
-        o[j + &quot;J&quot;] = j;
-    }
-    o.f1 = 20;
-    o.f2 = 40;
-    objs.push(o);
-}
-
-for (let i = 0; i &lt; 1000; i++) {
-    let o1 = objs[i % objs.length];
-    let o2 = objs[(i + 1) % objs.length];
-    assert(foo(o1, o2) === 80);
-}
-
-let o = objs[count - 1];
-let numCalls = 0;
-Object.defineProperty(o, &quot;f1&quot;, {
-    get() { ++numCalls; return 25; }
-});
-
-assert(foo(o, objs[count - 2]) === 90);
-assert(numCalls === 2);
</del></span></pre></div>
<a id="trunkJSTestsstresspuregetbyidonnonobjectjs"></a>
<div class="delfile"><h4>Deleted: trunk/JSTests/stress/pure-get-by-id-on-non-object.js (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/JSTests/stress/pure-get-by-id-on-non-object.js        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/JSTests/stress/pure-get-by-id-on-non-object.js        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -1,32 +0,0 @@
</span><del>-function assert(b) {
-    if (!b)
-        throw new Error(&quot;Bad assertion.&quot;)
-}
-
-function foo(o) {
-    assert(o.length === o.length);
-    return o.length;
-}
-noInline(foo);
-
-let items = [];
-const numItems = 30;
-for (let i = 0; i &lt; numItems; i++) {
-    let o = {};
-    for (let j = 0; j &lt; i; j++) {
-        o[j + &quot;j&quot;] = j;
-    }
-    o.length = 2;
-    items.push(o);
-} 
-
-items.push(&quot;st&quot;);
-
-for (let i = 0; i &lt; 10000; i++)
-    assert(foo(items[i % items.length]) === 2);
-
-Number.prototype.length = 2;
-items.push(42);
-
-for (let i = 0; i &lt; 100000; i++)
-    assert(foo(items[i % items.length]) === 2);
</del></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2016-11-11  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Unreviewed, rolling out r208117 and r208160.
+
+        Regressed Speedometer by &gt;1.5%
+
+        Reverted changesets:
+
+        &quot;We should have a way of profiling when a get_by_id is pure
+        and to emit a PureGetById in the DFG/FTL&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=163305
+        http://trac.webkit.org/changeset/208117
+
+        &quot;Debug JSC test microbenchmarks/pure-get-by-id-cse-2.js timing
+        out&quot;
+        https://bugs.webkit.org/show_bug.cgi?id=164227
+        http://trac.webkit.org/changeset/208160
+
</ins><span class="cx"> 2016-11-11  Saam Barati  &lt;sbarati@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         We should have a more concise way of determining when we're varargs calling a function using rest parameters
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeStructureStubInfocpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -48,7 +48,6 @@
</span><span class="cx">     , resetByGC(false)
</span><span class="cx">     , tookSlowPath(false)
</span><span class="cx">     , everConsidered(false)
</span><del>-    , didSideEffects(false)
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -217,10 +216,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     switch (accessType) {
</span><del>-    case AccessType::TryGet:
-        resetGetByID(codeBlock, *this, GetByIDKind::Try);
-        break;
-    case AccessType::PureGet:
</del><ins>+    case AccessType::GetPure:
</ins><span class="cx">         resetGetByID(codeBlock, *this, GetByIDKind::Pure);
</span><span class="cx">         break;
</span><span class="cx">     case AccessType::Get:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeStructureStubInfoh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -46,8 +46,7 @@
</span><span class="cx"> 
</span><span class="cx"> enum class AccessType : int8_t {
</span><span class="cx">     Get,
</span><del>-    TryGet,
-    PureGet,
</del><ins>+    GetPure,
</ins><span class="cx">     Put,
</span><span class="cx">     In
</span><span class="cx"> };
</span><span class="lines">@@ -206,7 +205,6 @@
</span><span class="cx">     bool resetByGC : 1;
</span><span class="cx">     bool tookSlowPath : 1;
</span><span class="cx">     bool everConsidered : 1;
</span><del>-    bool didSideEffects : 1;
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> inline CodeOrigin getStructureStubInfoCodeOrigin(StructureStubInfo&amp; structureStubInfo)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGAbstractInterpreterInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -2151,7 +2151,6 @@
</span><span class="cx">         forNode(node).makeHeapTop();
</span><span class="cx">         break;
</span><span class="cx"> 
</span><del>-    case PureGetById:
</del><span class="cx">     case GetById:
</span><span class="cx">     case GetByIdFlush: {
</span><span class="cx">         if (!node-&gt;prediction()) {
</span><span class="lines">@@ -2183,10 +2182,7 @@
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        if (node-&gt;op() == PureGetById)
-            clobberStructures(clobberLimit);
-        else
-            clobberWorld(node-&gt;origin.semantic, clobberLimit);
</del><ins>+        clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">         forNode(node).makeHeapTop();
</span><span class="cx">         break;
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGArrayModecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGArrayMode.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGArrayMode.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/dfg/DFGArrayMode.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -152,11 +152,10 @@
</span><span class="cx"> 
</span><span class="cx"> static bool canBecomeGetArrayLength(Graph&amp; graph, Node* node)
</span><span class="cx"> {
</span><del>-    if (node-&gt;op() == GetById || node-&gt;op() == PureGetById) {
-        auto uid = graph.identifiers()[node-&gt;identifierNumber()];
-        return uid == graph.m_vm.propertyNames-&gt;length.impl();
-    }
-    return false;
</del><ins>+    if (node-&gt;op() != GetById)
+        return false;
+    auto uid = graph.identifiers()[node-&gt;identifierNumber()];
+    return uid == graph.m_vm.propertyNames-&gt;length.impl();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ArrayMode ArrayMode::refine(
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGByteCodeParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -3345,19 +3345,10 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     NodeType getById;
</span><del>-    switch (type) {
-    case AccessType::Get:
</del><ins>+    if (type == AccessType::Get)
</ins><span class="cx">         getById = getByIdStatus.makesCalls() ? GetByIdFlush : GetById;
</span><del>-        break;
-    case AccessType::TryGet:
</del><ins>+    else
</ins><span class="cx">         getById = TryGetById;
</span><del>-        break;
-    case AccessType::PureGet:
-        getById = PureGetById;
-        break;
-    default:
-        RELEASE_ASSERT_NOT_REACHED();
-    }
</del><span class="cx"> 
</span><span class="cx">     // Special path for custom accessors since custom's offset does not have any meanings.
</span><span class="cx">     // So, this is completely different from Simple one. But we have a chance to optimize it when we use DOMJIT.
</span><span class="lines">@@ -4266,8 +4257,7 @@
</span><span class="cx"> 
</span><span class="cx">             Node* base = get(VirtualRegister(currentInstruction[2].u.operand));
</span><span class="cx">             Node* property = get(VirtualRegister(currentInstruction[3].u.operand));
</span><del>-            bool compileAsGetById = false;
-            bool compileAsPureGetById = false;
</del><ins>+            bool compiledAsGetById = false;
</ins><span class="cx">             GetByIdStatus getByIdStatus;
</span><span class="cx">             unsigned identifierNumber = 0;
</span><span class="cx">             {
</span><span class="lines">@@ -4276,8 +4266,7 @@
</span><span class="cx">                 // FIXME: When the bytecode is not compiled in the baseline JIT, byValInfo becomes null.
</span><span class="cx">                 // At that time, there is no information.
</span><span class="cx">                 if (byValInfo &amp;&amp; byValInfo-&gt;stubInfo &amp;&amp; !byValInfo-&gt;tookSlowPath &amp;&amp; !m_inlineStackTop-&gt;m_exitProfile.hasExitSite(m_currentIndex, BadIdent) &amp;&amp; !m_inlineStackTop-&gt;m_exitProfile.hasExitSite(m_currentIndex, BadCell)) {
</span><del>-                    compileAsGetById = true;
-                    compileAsPureGetById = !byValInfo-&gt;stubInfo-&gt;didSideEffects;
</del><ins>+                    compiledAsGetById = true;
</ins><span class="cx">                     identifierNumber = m_graph.identifiers().ensure(byValInfo-&gt;cachedId.impl());
</span><span class="cx">                     UniquedStringImpl* uid = m_graph.identifiers()[identifierNumber];
</span><span class="cx"> 
</span><span class="lines">@@ -4295,10 +4284,9 @@
</span><span class="cx">                 }
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            if (compileAsGetById) {
-                AccessType type = compileAsPureGetById ? AccessType::PureGet : AccessType::Get;
-                handleGetById(currentInstruction[1].u.operand, prediction, base, identifierNumber, getByIdStatus, type, OPCODE_LENGTH(op_get_by_val));
-            } else {
</del><ins>+            if (compiledAsGetById)
+                handleGetById(currentInstruction[1].u.operand, prediction, base, identifierNumber, getByIdStatus, AccessType::Get, OPCODE_LENGTH(op_get_by_val));
+            else {
</ins><span class="cx">                 ArrayMode arrayMode = getArrayMode(currentInstruction[4].u.arrayProfile, Array::Read);
</span><span class="cx">                 Node* getByVal = addToGraph(GetByVal, OpInfo(arrayMode.asWord()), OpInfo(prediction), base, property);
</span><span class="cx">                 m_exitOK = false; // GetByVal must be treated as if it clobbers exit state, since FixupPhase may make it generic.
</span><span class="lines">@@ -4434,18 +4422,7 @@
</span><span class="cx">                 m_inlineStackTop-&gt;m_profiledBlock, m_dfgCodeBlock,
</span><span class="cx">                 m_inlineStackTop-&gt;m_stubInfos, m_dfgStubInfos,
</span><span class="cx">                 currentCodeOrigin(), uid);
</span><del>-            AccessType type;
-            if (opcodeID == op_try_get_by_id) 
-                type = AccessType::TryGet;
-            else {
-                ConcurrentJITLocker locker(m_inlineStackTop-&gt;m_profiledBlock-&gt;m_lock);
-                unsigned bytecodeIndex = currentCodeOrigin().bytecodeIndex;
-                StructureStubInfo* info = m_inlineStackTop-&gt;m_stubInfos.get(CodeOrigin(bytecodeIndex));
-                if (info &amp;&amp; info-&gt;everConsidered &amp;&amp; !info-&gt;didSideEffects)
-                    type = AccessType::PureGet;
-                else
-                    type = AccessType::Get;
-            }
</del><ins>+            AccessType type = op_try_get_by_id == opcodeID ? AccessType::GetPure : AccessType::Get;
</ins><span class="cx"> 
</span><span class="cx">             unsigned opcodeLength = opcodeID == op_try_get_by_id ? OPCODE_LENGTH(op_try_get_by_id) : OPCODE_LENGTH(op_get_by_id);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGClobberizeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGClobberize.h (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGClobberize.h        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/dfg/DFGClobberize.h        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -502,35 +502,6 @@
</span><span class="cx">         def(HeapLocation(IsFunctionLoc, MiscFields, node-&gt;child1()), LazyNode(node));
</span><span class="cx">         return;
</span><span class="cx">         
</span><del>-    case PureGetById: {
-        // We model what is allowed inside a getOwnPropertySlot(VMInquiry) here.
-        // Some getOwnPropertySlot implementations will lazily inject properties, which
-        // may change the object's structure.
-
-        read(JSCell_structureID);
-        read(JSCell_typeInfoFlags);
-        read(JSCell_typeInfoType);
-        read(JSCell_indexingType);
-        read(JSObject_butterfly);
-        read(MiscFields);
-
-        AbstractHeap propertyNameHeap(NamedProperties, node-&gt;identifierNumber());
-        read(propertyNameHeap);
-
-        write(JSCell_structureID);
-        write(JSCell_typeInfoFlags);
-
-        write(Watchpoint_fire);
-        write(MiscFields);
-
-        // This can happen if lazily adding fields to an object happens in getOwnPropertySlot
-        // and we need to allocate out of line storage.
-        write(JSObject_butterfly);
-
-        def(HeapLocation(NamedPropertyLoc, propertyNameHeap, node-&gt;child1()), LazyNode(node));
-        return;
-    }
-
</del><span class="cx">     case GetById:
</span><span class="cx">     case GetByIdFlush:
</span><span class="cx">     case GetByIdWithThis:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGConstantFoldingPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -449,7 +449,6 @@
</span><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="cx">         
</span><del>-            case PureGetById:
</del><span class="cx">             case GetById:
</span><span class="cx">             case GetByIdFlush: {
</span><span class="cx">                 Edge childEdge = node-&gt;child1();
</span><span class="lines">@@ -461,9 +460,6 @@
</span><span class="cx">                 m_interpreter.execute(indexInBlock); // Push CFA over this node after we get the state before.
</span><span class="cx">                 alreadyHandled = true; // Don't allow the default constant folder to do things to this.
</span><span class="cx"> 
</span><del>-                if (!Options::useAccessInlining())
-                    break;
-
</del><span class="cx">                 if (baseValue.m_structure.isTop() || baseValue.m_structure.isClobbered()
</span><span class="cx">                     || (node-&gt;child1().useKind() == UntypedUse || (baseValue.m_type &amp; ~SpecCell)))
</span><span class="cx">                     break;
</span><span class="lines">@@ -519,9 +515,6 @@
</span><span class="cx">                 m_interpreter.execute(indexInBlock); // Push CFA over this node after we get the state before.
</span><span class="cx">                 alreadyHandled = true; // Don't allow the default constant folder to do things to this.
</span><span class="cx"> 
</span><del>-                if (!Options::useAccessInlining())
-                    break;
-
</del><span class="cx">                 if (baseValue.m_structure.isTop() || baseValue.m_structure.isClobbered())
</span><span class="cx">                     break;
</span><span class="cx">                 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGDoesGCcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGDoesGC.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGDoesGC.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/dfg/DFGDoesGC.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -266,7 +266,6 @@
</span><span class="cx">     case ResolveScope:
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    case PureGetById: // We are modeling getOwnPropertySlot here, which may GC because it is allowed to allocate things.
</del><span class="cx">     case CreateActivation:
</span><span class="cx">     case CreateDirectArguments:
</span><span class="cx">     case CreateScopedArguments:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGFixupPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -1206,7 +1206,6 @@
</span><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        case PureGetById:
</del><span class="cx">         case GetById:
</span><span class="cx">         case GetByIdFlush: {
</span><span class="cx">             // FIXME: This should be done in the ByteCodeParser based on reading the
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGNode.h (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGNode.h        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/dfg/DFGNode.h        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -534,7 +534,7 @@
</span><span class="cx">     
</span><span class="cx">     void convertToGetByOffset(StorageAccessData&amp; data, Edge storage, Edge base)
</span><span class="cx">     {
</span><del>-        ASSERT(m_op == GetById || m_op == GetByIdFlush || m_op == PureGetById || m_op == MultiGetByOffset);
</del><ins>+        ASSERT(m_op == GetById || m_op == GetByIdFlush || m_op == MultiGetByOffset);
</ins><span class="cx">         m_opInfo = &amp;data;
</span><span class="cx">         children.setChild1(storage);
</span><span class="cx">         children.setChild2(base);
</span><span class="lines">@@ -544,7 +544,7 @@
</span><span class="cx">     
</span><span class="cx">     void convertToMultiGetByOffset(MultiGetByOffsetData* data)
</span><span class="cx">     {
</span><del>-        ASSERT(m_op == GetById || m_op == GetByIdFlush || m_op == PureGetById);
</del><ins>+        ASSERT(m_op == GetById || m_op == GetByIdFlush);
</ins><span class="cx">         m_opInfo = data;
</span><span class="cx">         child1().setUseKind(CellUse);
</span><span class="cx">         m_op = MultiGetByOffset;
</span><span class="lines">@@ -922,7 +922,6 @@
</span><span class="cx">         switch (op()) {
</span><span class="cx">         case TryGetById:
</span><span class="cx">         case GetById:
</span><del>-        case PureGetById:
</del><span class="cx">         case GetByIdFlush:
</span><span class="cx">         case GetByIdWithThis:
</span><span class="cx">         case PutById:
</span><span class="lines">@@ -1439,7 +1438,6 @@
</span><span class="cx">         case ArithCeil:
</span><span class="cx">         case ArithTrunc:
</span><span class="cx">         case GetDirectPname:
</span><del>-        case PureGetById:
</del><span class="cx">         case GetById:
</span><span class="cx">         case GetByIdFlush:
</span><span class="cx">         case GetByIdWithThis:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGNodeTypeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGNodeType.h (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGNodeType.h        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/dfg/DFGNodeType.h        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -185,7 +185,6 @@
</span><span class="cx">     macro(PutByVal, NodeMustGenerate | NodeHasVarArgs) \
</span><span class="cx">     macro(PutByValAlias, NodeMustGenerate | NodeHasVarArgs) \
</span><span class="cx">     macro(TryGetById, NodeResultJS) \
</span><del>-    macro(PureGetById, NodeResultJS | NodeMustGenerate) \
</del><span class="cx">     macro(GetById, NodeResultJS | NodeMustGenerate) \
</span><span class="cx">     macro(GetByIdFlush, NodeResultJS | NodeMustGenerate) \
</span><span class="cx">     macro(GetByIdWithThis, NodeResultJS | NodeMustGenerate) \
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGPredictionPropagationPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -682,7 +682,6 @@
</span><span class="cx">         case RegExpTest:
</span><span class="cx">         case StringReplace:
</span><span class="cx">         case StringReplaceRegExp:
</span><del>-        case PureGetById:
</del><span class="cx">         case GetById:
</span><span class="cx">         case GetByIdFlush:
</span><span class="cx">         case GetByIdWithThis:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSafeToExecuteh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSafeToExecute.h (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSafeToExecute.h        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/dfg/DFGSafeToExecute.h        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -199,7 +199,6 @@
</span><span class="cx">     case TryGetById:
</span><span class="cx">     case DeleteById:
</span><span class="cx">     case DeleteByVal:
</span><del>-    case PureGetById:
</del><span class="cx">     case GetById:
</span><span class="cx">     case GetByIdWithThis:
</span><span class="cx">     case GetByValWithThis:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJITcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -1000,7 +1000,7 @@
</span><span class="cx"> 
</span><span class="cx">         base.use();
</span><span class="cx"> 
</span><del>-        cachedGetById(node-&gt;origin.semantic, baseRegs, resultRegs, node-&gt;identifierNumber(), JITCompiler::Jump(), NeedToSpill, AccessType::TryGet);
</del><ins>+        cachedGetById(node-&gt;origin.semantic, baseRegs, resultRegs, node-&gt;identifierNumber(), JITCompiler::Jump(), NeedToSpill, AccessType::GetPure);
</ins><span class="cx"> 
</span><span class="cx">         jsValueResult(resultRegs, node, DataFormatJS, UseChildrenCalledExplicitly);
</span><span class="cx">         break;
</span><span class="lines">@@ -1017,7 +1017,7 @@
</span><span class="cx"> 
</span><span class="cx">         JITCompiler::Jump notCell = m_jit.branchIfNotCell(baseRegs);
</span><span class="cx"> 
</span><del>-        cachedGetById(node-&gt;origin.semantic, baseRegs, resultRegs, node-&gt;identifierNumber(), notCell, NeedToSpill, AccessType::TryGet);
</del><ins>+        cachedGetById(node-&gt;origin.semantic, baseRegs, resultRegs, node-&gt;identifierNumber(), notCell, NeedToSpill, AccessType::GetPure);
</ins><span class="cx"> 
</span><span class="cx">         jsValueResult(resultRegs, node, DataFormatJS, UseChildrenCalledExplicitly);
</span><span class="cx">         break;
</span><span class="lines">@@ -1029,42 +1029,6 @@
</span><span class="cx">     } 
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SpeculativeJIT::compilePureGetById(Node* node)
-{
-    ASSERT(node-&gt;op() == PureGetById);
-
-    switch (node-&gt;child1().useKind()) {
-    case CellUse: {
-        SpeculateCellOperand base(this, node-&gt;child1());
-        JSValueRegsTemporary result(this, Reuse, base);
-
-        JSValueRegs baseRegs = JSValueRegs::payloadOnly(base.gpr());
-        JSValueRegs resultRegs = result.regs();
-
-        cachedGetById(node-&gt;origin.semantic, baseRegs, resultRegs, node-&gt;identifierNumber(), JITCompiler::Jump(), NeedToSpill, AccessType::PureGet);
-
-        jsValueResult(resultRegs, node);
-        break;
-    }
-    case UntypedUse: {
-        JSValueOperand base(this, node-&gt;child1());
-        JSValueRegsTemporary result(this, Reuse, base);
-
-        JSValueRegs baseRegs = base.jsValueRegs();
-        JSValueRegs resultRegs = result.regs();
-    
-        JITCompiler::Jump notCell = m_jit.branchIfNotCell(baseRegs);
-    
-        cachedGetById(node-&gt;origin.semantic, baseRegs, resultRegs, node-&gt;identifierNumber(), notCell, NeedToSpill, AccessType::PureGet);
-    
-        jsValueResult(resultRegs, node);
-        break;
-    }
-    default:
-        RELEASE_ASSERT_NOT_REACHED();
-    }
-}
-
</del><span class="cx"> void SpeculativeJIT::compileIn(Node* node)
</span><span class="cx"> {
</span><span class="cx">     SpeculateCellOperand base(this, node-&gt;child2());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJITh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -721,7 +721,6 @@
</span><span class="cx">     void compileDeleteById(Node*);
</span><span class="cx">     void compileDeleteByVal(Node*);
</span><span class="cx">     void compileTryGetById(Node*);
</span><del>-    void compilePureGetById(Node*);
</del><span class="cx">     void compileIn(Node*);
</span><span class="cx">     
</span><span class="cx">     void nonSpeculativeNonPeepholeCompareNullOrUndefined(Edge operand);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJIT32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -210,8 +210,6 @@
</span><span class="cx">     J_JITOperation_ESsiJI getByIdFunction;
</span><span class="cx">     if (type == AccessType::Get)
</span><span class="cx">         getByIdFunction = operationGetByIdOptimize;
</span><del>-    else if (type == AccessType::PureGet)
-        getByIdFunction = operationPureGetByIdOptimize;
</del><span class="cx">     else
</span><span class="cx">         getByIdFunction = operationTryGetByIdOptimize;
</span><span class="cx"> 
</span><span class="lines">@@ -4281,11 +4279,6 @@
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    case PureGetById: {
-        compilePureGetById(node);
-        break;
-    }
-
</del><span class="cx">     case GetByIdWithThis: {
</span><span class="cx">         JSValueOperand base(this, node-&gt;child1());
</span><span class="cx">         JSValueRegs baseRegs = base.jsValueRegs();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJIT64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -179,11 +179,8 @@
</span><span class="cx">         slowCases.append(slowPathTarget);
</span><span class="cx">     slowCases.append(gen.slowPathJump());
</span><span class="cx">     
</span><del>-    auto slowPathFunction = type == AccessType::Get ? operationGetByIdOptimize :
-        type == AccessType::PureGet ? operationPureGetByIdOptimize : operationTryGetByIdOptimize;
-
</del><span class="cx">     auto slowPath = slowPathCall(
</span><del>-        slowCases, this, slowPathFunction,
</del><ins>+        slowCases, this, type == AccessType::Get ? operationGetByIdOptimize : operationTryGetByIdOptimize,
</ins><span class="cx">         spillMode, ExceptionCheckRequirement::CheckNeeded,
</span><span class="cx">         resultGPR, gen.stubInfo(), baseGPR, identifierUID(identifierNumber));
</span><span class="cx">     
</span><span class="lines">@@ -4248,11 +4245,6 @@
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    case PureGetById: {
-        compilePureGetById(node);
-        break;
-    }
-
</del><span class="cx">     case GetByIdFlush: {
</span><span class="cx">         if (!node-&gt;prediction()) {
</span><span class="cx">             terminateSpeculativeExecution(InadequateCoverage, JSValueRegs(), 0);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLCapabilitiescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLCapabilities.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLCapabilities.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/ftl/FTLCapabilities.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -179,7 +179,6 @@
</span><span class="cx">     case NewArrayWithSize:
</span><span class="cx">     case TryGetById:
</span><span class="cx">     case GetById:
</span><del>-    case PureGetById:
</del><span class="cx">     case GetByIdFlush:
</span><span class="cx">     case GetByIdWithThis:
</span><span class="cx">     case ToThis:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLLowerDFGToB3cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -623,11 +623,8 @@
</span><span class="cx">             compilePutStructure();
</span><span class="cx">             break;
</span><span class="cx">         case TryGetById:
</span><del>-            compileGetById(AccessType::TryGet);
</del><ins>+            compileGetById(AccessType::GetPure);
</ins><span class="cx">             break;
</span><del>-        case PureGetById:
-            compileGetById(AccessType::PureGet);
-            break;
</del><span class="cx">         case GetById:
</span><span class="cx">         case GetByIdFlush:
</span><span class="cx">             compileGetById(AccessType::Get);
</span><span class="lines">@@ -2804,7 +2801,7 @@
</span><span class="cx">     
</span><span class="cx">     void compileGetById(AccessType type)
</span><span class="cx">     {
</span><del>-        ASSERT(type == AccessType::Get || type == AccessType::TryGet || type == AccessType::PureGet);
</del><ins>+        ASSERT(type == AccessType::Get || type == AccessType::GetPure);
</ins><span class="cx">         switch (m_node-&gt;child1().useKind()) {
</span><span class="cx">         case CellUse: {
</span><span class="cx">             setJSValue(getById(lowCell(m_node-&gt;child1()), type));
</span><span class="lines">@@ -2831,8 +2828,6 @@
</span><span class="cx">             J_JITOperation_EJI getByIdFunction;
</span><span class="cx">             if (type == AccessType::Get)
</span><span class="cx">                 getByIdFunction = operationGetByIdGeneric;
</span><del>-            else if (type == AccessType::PureGet)
-                getByIdFunction = operationPureGetByIdGeneric;
</del><span class="cx">             else
</span><span class="cx">                 getByIdFunction = operationTryGetByIdGeneric;
</span><span class="cx"> 
</span><span class="lines">@@ -9094,8 +9089,6 @@
</span><span class="cx">                         J_JITOperation_ESsiJI optimizationFunction;
</span><span class="cx">                         if (type == AccessType::Get)
</span><span class="cx">                             optimizationFunction = operationGetByIdOptimize;
</span><del>-                        else if (type == AccessType::PureGet)
-                            optimizationFunction = operationPureGetByIdOptimize;
</del><span class="cx">                         else
</span><span class="cx">                             optimizationFunction = operationTryGetByIdOptimize;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -75,35 +75,6 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><del>-ALWAYS_INLINE static EncodedJSValue pureGetByIdCommon(VM&amp; vm, ExecState* exec, EncodedJSValue base, UniquedStringImpl* uid, const std::function&lt;void (const PropertySlot&amp;, const Identifier&amp;)&gt;&amp; function = [] (const PropertySlot&amp;, const Identifier&amp;) { })
-{
-    Identifier ident = Identifier::fromUid(&amp;vm, uid);
-    JSValue baseValue = JSValue::decode(base);
-
-    ASSERT(JITCode::isOptimizingJIT(exec-&gt;codeBlock()-&gt;jitType()));
-
-    PropertySlot slot(baseValue, PropertySlot::InternalMethodType::VMInquiry);
-    return JSValue::encode(baseValue.getPropertySlot(exec, ident, slot, [&amp;] (bool, PropertySlot&amp;) -&gt; JSValue {
-        bool willDoSideEffects = !(slot.isValue() || slot.isUnset()) || slot.isTaintedByOpaqueObject();
-        if (UNLIKELY(willDoSideEffects)) {
-            {
-                CodeOrigin codeOrigin = exec-&gt;codeOrigin();
-                CodeBlock* currentBaseline = baselineCodeBlockForOriginAndBaselineCodeBlock(codeOrigin, exec-&gt;codeBlock()-&gt;alternative());
-                CodeOrigin originBytecodeIndex = CodeOrigin(codeOrigin.bytecodeIndex); // Since we're searching in the baseline, we just care about bytecode index.
-                ConcurrentJITLocker locker(currentBaseline-&gt;m_lock);
-                if (StructureStubInfo* stub = currentBaseline-&gt;findStubInfo(originBytecodeIndex))
-                    stub-&gt;didSideEffects = true;
-            }
-
-            exec-&gt;codeBlock()-&gt;jettison(Profiler::JettisonDueToPureGetByIdEffects);
-            return baseValue.get(exec, uid);
-        }
-
-        function(slot, ident);
-        return slot.isValue() ? slot.getValue(exec, ident) : jsUndefined();
-    }));
-}
-
</del><span class="cx"> extern &quot;C&quot; {
</span><span class="cx"> 
</span><span class="cx"> #if COMPILER(MSVC)
</span><span class="lines">@@ -199,38 +170,6 @@
</span><span class="cx">     return missingArgCount;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-EncodedJSValue JIT_OPERATION operationPureGetByIdGeneric(ExecState* exec, EncodedJSValue base, UniquedStringImpl* uid)
-{
-    VM* vm = &amp;exec-&gt;vm();
-    NativeCallFrameTracer tracer(vm, exec);
-
-    return pureGetByIdCommon(*vm, exec, base, uid);
-}
-
-EncodedJSValue JIT_OPERATION operationPureGetById(ExecState* exec, StructureStubInfo* stubInfo, EncodedJSValue base, UniquedStringImpl* uid)
-{
-    VM* vm = &amp;exec-&gt;vm();
-    NativeCallFrameTracer tracer(vm, exec);
-
-    stubInfo-&gt;tookSlowPath = true;
-
-    return pureGetByIdCommon(*vm, exec, base, uid);
-}
-
-EncodedJSValue JIT_OPERATION operationPureGetByIdOptimize(ExecState* exec, StructureStubInfo* stubInfo, EncodedJSValue base, UniquedStringImpl* uid)
-{
-    VM* vm = &amp;exec-&gt;vm();
-    NativeCallFrameTracer tracer(vm, exec);
-
-    return pureGetByIdCommon(*vm, exec, base, uid, 
-        [&amp;] (const PropertySlot&amp; slot, const Identifier&amp; ident) {
-            ASSERT((slot.isValue() || slot.isUnset()) &amp;&amp; !slot.isTaintedByOpaqueObject());
-            JSValue baseValue = JSValue::decode(base);
-            if (stubInfo-&gt;considerCaching(baseValue.structureOrNull()))
-                repatchGetByID(exec, baseValue, ident, slot, *stubInfo, GetByIDKind::Pure);
-        });
-}
-
</del><span class="cx"> EncodedJSValue JIT_OPERATION operationTryGetById(ExecState* exec, StructureStubInfo* stubInfo, EncodedJSValue base, UniquedStringImpl* uid)
</span><span class="cx"> {
</span><span class="cx">     VM* vm = &amp;exec-&gt;vm();
</span><span class="lines">@@ -245,6 +184,7 @@
</span><span class="cx">     return JSValue::encode(slot.getPureResult());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> EncodedJSValue JIT_OPERATION operationTryGetByIdGeneric(ExecState* exec, EncodedJSValue base, UniquedStringImpl* uid)
</span><span class="cx"> {
</span><span class="cx">     VM* vm = &amp;exec-&gt;vm();
</span><span class="lines">@@ -272,7 +212,7 @@
</span><span class="cx">     RETURN_IF_EXCEPTION(scope, encodedJSValue());
</span><span class="cx"> 
</span><span class="cx">     if (stubInfo-&gt;considerCaching(baseValue.structureOrNull()) &amp;&amp; !slot.isTaintedByOpaqueObject() &amp;&amp; (slot.isCacheableValue() || slot.isCacheableGetter() || slot.isUnset()))
</span><del>-        repatchGetByID(exec, baseValue, ident, slot, *stubInfo, GetByIDKind::Try);
</del><ins>+        repatchGetByID(exec, baseValue, ident, slot, *stubInfo, GetByIDKind::Pure);
</ins><span class="cx"> 
</span><span class="cx">     return JSValue::encode(slot.getPureResult());
</span><span class="cx"> }
</span><span class="lines">@@ -291,10 +231,7 @@
</span><span class="cx">     Identifier ident = Identifier::fromUid(vm, uid);
</span><span class="cx">     
</span><span class="cx">     LOG_IC((ICEvent::OperationGetById, baseValue.classInfoOrNull(), ident));
</span><del>-    JSValue result = baseValue.get(exec, ident, slot);
-    bool willDoSideEffects = !(slot.isValue() || slot.isUnset()) || slot.isTaintedByOpaqueObject();
-    stubInfo-&gt;didSideEffects |= willDoSideEffects;
-    return JSValue::encode(result);
</del><ins>+    return JSValue::encode(baseValue.get(exec, ident, slot));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue JIT_OPERATION operationGetByIdGeneric(ExecState* exec, EncodedJSValue base, UniquedStringImpl* uid)
</span><span class="lines">@@ -323,9 +260,6 @@
</span><span class="cx">     LOG_IC((ICEvent::OperationGetByIdOptimize, baseValue.classInfoOrNull(), ident));
</span><span class="cx"> 
</span><span class="cx">     return JSValue::encode(baseValue.getPropertySlot(exec, ident, [&amp;] (bool found, PropertySlot&amp; slot) -&gt; JSValue {
</span><del>-        bool willDoSideEffects = !(slot.isValue() || slot.isUnset()) || slot.isTaintedByOpaqueObject();
-        stubInfo-&gt;didSideEffects |= willDoSideEffects;
-
</del><span class="cx">         if (stubInfo-&gt;considerCaching(baseValue.structureOrNull()))
</span><span class="cx">             repatchGetByID(exec, baseValue, ident, slot, *stubInfo, GetByIDKind::Normal);
</span><span class="cx">         return found ? slot.getValue(exec, ident) : jsUndefined();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.h (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.h        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.h        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -332,9 +332,6 @@
</span><span class="cx"> EncodedJSValue JIT_OPERATION operationTryGetById(ExecState*, StructureStubInfo*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL;
</span><span class="cx"> EncodedJSValue JIT_OPERATION operationTryGetByIdGeneric(ExecState*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL;
</span><span class="cx"> EncodedJSValue JIT_OPERATION operationTryGetByIdOptimize(ExecState*, StructureStubInfo*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL;
</span><del>-EncodedJSValue JIT_OPERATION operationPureGetById(ExecState*, StructureStubInfo*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL;
-EncodedJSValue JIT_OPERATION operationPureGetByIdGeneric(ExecState*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL;
-EncodedJSValue JIT_OPERATION operationPureGetByIdOptimize(ExecState*, StructureStubInfo*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL;
</del><span class="cx"> EncodedJSValue JIT_OPERATION operationGetById(ExecState*, StructureStubInfo*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL;
</span><span class="cx"> EncodedJSValue JIT_OPERATION operationGetByIdGeneric(ExecState*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL;
</span><span class="cx"> EncodedJSValue JIT_OPERATION operationGetByIdOptimize(ExecState*, StructureStubInfo*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITPropertyAccesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -579,7 +579,7 @@
</span><span class="cx"> 
</span><span class="cx">     JITGetByIdGenerator gen(
</span><span class="cx">         m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(m_bytecodeOffset), RegisterSet::stubUnavailableRegisters(),
</span><del>-        ident-&gt;impl(), JSValueRegs(regT0), JSValueRegs(regT0), AccessType::TryGet);
</del><ins>+        ident-&gt;impl(), JSValueRegs(regT0), JSValueRegs(regT0), AccessType::GetPure);
</ins><span class="cx">     gen.generateFastPath(*this);
</span><span class="cx">     addSlowCase(gen.slowPathJump());
</span><span class="cx">     m_getByIds.append(gen);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITPropertyAccess32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -594,7 +594,7 @@
</span><span class="cx"> 
</span><span class="cx">     JITGetByIdGenerator gen(
</span><span class="cx">         m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(currentInstruction), RegisterSet::stubUnavailableRegisters(),
</span><del>-        ident-&gt;impl(), JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0), AccessType::TryGet);
</del><ins>+        ident-&gt;impl(), JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0), AccessType::GetPure);
</ins><span class="cx">     gen.generateFastPath(*this);
</span><span class="cx">     addSlowCase(gen.slowPathJump());
</span><span class="cx">     m_getByIds.append(gen);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitRepatchcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/Repatch.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/Repatch.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/jit/Repatch.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -136,34 +136,16 @@
</span><span class="cx"> 
</span><span class="cx"> inline J_JITOperation_ESsiJI appropriateOptimizingGetByIdFunction(GetByIDKind kind)
</span><span class="cx"> {
</span><del>-    switch (kind) {
-    case GetByIDKind::Normal:
</del><ins>+    if (kind == GetByIDKind::Normal)
</ins><span class="cx">         return operationGetByIdOptimize;
</span><del>-    case GetByIDKind::Try:
-        return operationTryGetByIdOptimize;
-    case GetByIDKind::Pure:
-        return operationPureGetByIdOptimize;
-    default:
-        break;
-    }
-    ASSERT_NOT_REACHED();
-    return operationGetByIdOptimize;
</del><ins>+    return operationTryGetByIdOptimize;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> inline J_JITOperation_ESsiJI appropriateGenericGetByIdFunction(GetByIDKind kind)
</span><span class="cx"> {
</span><del>-    switch (kind) {
-    case GetByIDKind::Normal:
</del><ins>+    if (kind == GetByIDKind::Normal)
</ins><span class="cx">         return operationGetById;
</span><del>-    case GetByIDKind::Try:
-        return operationTryGetById;
-    case GetByIDKind::Pure:
-        return operationPureGetById;
-    default:
-        break;
-    }
-    ASSERT_NOT_REACHED();
-    return operationGetById;
</del><ins>+    return operationTryGetById;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static InlineCacheAction tryCacheGetByID(ExecState* exec, JSValue baseValue, const Identifier&amp; propertyName, const PropertySlot&amp; slot, StructureStubInfo&amp; stubInfo, GetByIDKind kind)
</span><span class="lines">@@ -291,16 +273,6 @@
</span><span class="cx">                 type = AccessCase::Load;
</span><span class="cx">             else if (slot.isUnset())
</span><span class="cx">                 type = AccessCase::Miss;
</span><del>-            else
-                RELEASE_ASSERT_NOT_REACHED();
-
-            newCase = AccessCase::tryGet(vm, codeBlock, type, offset, structure, conditionSet, loadTargetFromProxy, slot.watchpointSet());
-        } else if (kind == GetByIDKind::Try) {
-            AccessCase::AccessType type;
-            if (slot.isCacheableValue())
-                type = AccessCase::Load;
-            else if (slot.isUnset())
-                type = AccessCase::Miss;
</del><span class="cx">             else if (slot.isCacheableGetter())
</span><span class="cx">                 type = AccessCase::GetGetter;
</span><span class="cx">             else
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitRepatchh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/Repatch.h (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/Repatch.h        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/jit/Repatch.h        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -36,7 +36,6 @@
</span><span class="cx"> 
</span><span class="cx"> enum class GetByIDKind {
</span><span class="cx">     Normal,
</span><del>-    Try,
</del><span class="cx">     Pure
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreprofilerProfilerJettisonReasoncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/profiler/ProfilerJettisonReason.cpp (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/profiler/ProfilerJettisonReason.cpp        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/profiler/ProfilerJettisonReason.cpp        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -56,9 +56,6 @@
</span><span class="cx">     case JettisonDueToOSRExit:
</span><span class="cx">         out.print(&quot;OSRExit&quot;);
</span><span class="cx">         return;
</span><del>-    case JettisonDueToPureGetByIdEffects:
-        out.print(&quot;PureGetByIdEffects&quot;);
-        return;
</del><span class="cx">     case JettisonDueToProfiledWatchpoint:
</span><span class="cx">         out.print(&quot;ProfiledWatchpoint&quot;);
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreprofilerProfilerJettisonReasonh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/profiler/ProfilerJettisonReason.h (208587 => 208588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/profiler/ProfilerJettisonReason.h        2016-11-11 13:09:33 UTC (rev 208587)
+++ trunk/Source/JavaScriptCore/profiler/ProfilerJettisonReason.h        2016-11-11 16:50:57 UTC (rev 208588)
</span><span class="lines">@@ -35,7 +35,6 @@
</span><span class="cx">     JettisonDueToBaselineLoopReoptimizationTrigger,
</span><span class="cx">     JettisonDueToBaselineLoopReoptimizationTriggerOnOSREntryFail,
</span><span class="cx">     JettisonDueToOSRExit,
</span><del>-    JettisonDueToPureGetByIdEffects,
</del><span class="cx">     JettisonDueToProfiledWatchpoint,
</span><span class="cx">     JettisonDueToUnprofiledWatchpoint,
</span><span class="cx">     JettisonDueToOldAge
</span></span></pre>
</div>
</div>

</body>
</html>