<!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>[192591] 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/192591">192591</a></dd>
<dt>Author</dt> <dd>benjamin@webkit.org</dd>
<dt>Date</dt> <dd>2015-11-18 15:14:54 -0800 (Wed, 18 Nov 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[JSC] Make LBasicBlock into an alias for B3::BasicBlock. #ifdef anything that does not compile
https://bugs.webkit.org/show_bug.cgi?id=151381

Patch by Benjamin Poulain &lt;bpoulain@apple.com&gt; on 2015-11-18
Reviewed by Filip Pizlo.

* JavaScriptCore.xcodeproj/project.pbxproj:
* ftl/FTLAbbreviatedTypes.h:
* ftl/FTLAbbreviations.h:
* ftl/FTLAbstractHeap.cpp:
(JSC::FTL::AbstractHeap::decorateInstruction):
(JSC::FTL::IndexedAbstractHeap::IndexedAbstractHeap):
* ftl/FTLAbstractHeap.h:
(JSC::FTL::AbstractHeap::AbstractHeap):
* ftl/FTLAbstractHeapRepository.cpp:
(JSC::FTL::AbstractHeapRepository::AbstractHeapRepository):
* ftl/FTLAbstractHeapRepository.h:
* ftl/FTLB3Output.h:
(JSC::FTL::Output::newBlock):
(JSC::FTL::Output::insertNewBlocksBefore):
(JSC::FTL::Output::addIncomingToPhi):
(JSC::FTL::Output::Output): Deleted.
(JSC::FTL::Output::initialize): Deleted.
* ftl/FTLCommonValues.cpp:
(JSC::FTL::CommonValues::CommonValues):
* ftl/FTLCommonValues.h:
* ftl/FTLIntrinsicRepository.cpp:
* ftl/FTLIntrinsicRepository.h:
* ftl/FTLLowerDFGToLLVM.cpp:
(JSC::FTL::DFG::LowerDFGToLLVM::LowerDFGToLLVM):
(JSC::FTL::DFG::LowerDFGToLLVM::lower):
(JSC::FTL::DFG::LowerDFGToLLVM::compileArithAddOrSub):
(JSC::FTL::DFG::LowerDFGToLLVM::compilePutById):
(JSC::FTL::DFG::LowerDFGToLLVM::compileCreateDirectArguments):
(JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize):
(JSC::FTL::DFG::LowerDFGToLLVM::compileCallOrConstruct):
(JSC::FTL::DFG::LowerDFGToLLVM::compileTailCall):
(JSC::FTL::DFG::LowerDFGToLLVM::compileCallOrConstructVarargs):
(JSC::FTL::DFG::LowerDFGToLLVM::compileForwardVarargs):
(JSC::FTL::DFG::LowerDFGToLLVM::compileIn):
(JSC::FTL::DFG::LowerDFGToLLVM::compileInstanceOf):
(JSC::FTL::DFG::LowerDFGToLLVM::getById):
(JSC::FTL::DFG::LowerDFGToLLVM::allocateCell):
(JSC::FTL::DFG::LowerDFGToLLVM::buildSwitch):
(JSC::FTL::DFG::LowerDFGToLLVM::lazySlowPath):
(JSC::FTL::DFG::LowerDFGToLLVM::crash):
* ftl/FTLOutput.cpp:
(JSC::FTL::Output::Output):
* ftl/FTLOutput.h:
(JSC::FTL::Output::addIncomingToPhi):
* ftl/FTLState.cpp:
(JSC::FTL::State::dumpState):
* ftl/FTLValueRange.cpp:
(JSC::FTL::ValueRange::decorateInstruction):
* ftl/FTLValueRange.h:
(JSC::FTL::ValueRange::ValueRange):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj">trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLAbbreviatedTypesh">trunk/Source/JavaScriptCore/ftl/FTLAbbreviatedTypes.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLAbbreviationsh">trunk/Source/JavaScriptCore/ftl/FTLAbbreviations.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLAbstractHeapcpp">trunk/Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLAbstractHeaph">trunk/Source/JavaScriptCore/ftl/FTLAbstractHeap.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLAbstractHeapRepositorycpp">trunk/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLAbstractHeapRepositoryh">trunk/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLB3Outputh">trunk/Source/JavaScriptCore/ftl/FTLB3Output.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLCommonValuescpp">trunk/Source/JavaScriptCore/ftl/FTLCommonValues.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLCommonValuesh">trunk/Source/JavaScriptCore/ftl/FTLCommonValues.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLIntrinsicRepositorycpp">trunk/Source/JavaScriptCore/ftl/FTLIntrinsicRepository.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLIntrinsicRepositoryh">trunk/Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLLowerDFGToLLVMcpp">trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLOutputcpp">trunk/Source/JavaScriptCore/ftl/FTLOutput.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLOutputh">trunk/Source/JavaScriptCore/ftl/FTLOutput.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLStatecpp">trunk/Source/JavaScriptCore/ftl/FTLState.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLValueRangecpp">trunk/Source/JavaScriptCore/ftl/FTLValueRange.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLValueRangeh">trunk/Source/JavaScriptCore/ftl/FTLValueRange.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreftlFTLB3Outputcpp">trunk/Source/JavaScriptCore/ftl/FTLB3Output.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ChangeLog        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -1,3 +1,61 @@
</span><ins>+2015-11-18  Benjamin Poulain  &lt;bpoulain@apple.com&gt;
+
+        [JSC] Make LBasicBlock into an alias for B3::BasicBlock. #ifdef anything that does not compile
+        https://bugs.webkit.org/show_bug.cgi?id=151381
+
+        Reviewed by Filip Pizlo.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * ftl/FTLAbbreviatedTypes.h:
+        * ftl/FTLAbbreviations.h:
+        * ftl/FTLAbstractHeap.cpp:
+        (JSC::FTL::AbstractHeap::decorateInstruction):
+        (JSC::FTL::IndexedAbstractHeap::IndexedAbstractHeap):
+        * ftl/FTLAbstractHeap.h:
+        (JSC::FTL::AbstractHeap::AbstractHeap):
+        * ftl/FTLAbstractHeapRepository.cpp:
+        (JSC::FTL::AbstractHeapRepository::AbstractHeapRepository):
+        * ftl/FTLAbstractHeapRepository.h:
+        * ftl/FTLB3Output.h:
+        (JSC::FTL::Output::newBlock):
+        (JSC::FTL::Output::insertNewBlocksBefore):
+        (JSC::FTL::Output::addIncomingToPhi):
+        (JSC::FTL::Output::Output): Deleted.
+        (JSC::FTL::Output::initialize): Deleted.
+        * ftl/FTLCommonValues.cpp:
+        (JSC::FTL::CommonValues::CommonValues):
+        * ftl/FTLCommonValues.h:
+        * ftl/FTLIntrinsicRepository.cpp:
+        * ftl/FTLIntrinsicRepository.h:
+        * ftl/FTLLowerDFGToLLVM.cpp:
+        (JSC::FTL::DFG::LowerDFGToLLVM::LowerDFGToLLVM):
+        (JSC::FTL::DFG::LowerDFGToLLVM::lower):
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileArithAddOrSub):
+        (JSC::FTL::DFG::LowerDFGToLLVM::compilePutById):
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateDirectArguments):
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize):
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileCallOrConstruct):
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileTailCall):
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileCallOrConstructVarargs):
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileForwardVarargs):
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileIn):
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileInstanceOf):
+        (JSC::FTL::DFG::LowerDFGToLLVM::getById):
+        (JSC::FTL::DFG::LowerDFGToLLVM::allocateCell):
+        (JSC::FTL::DFG::LowerDFGToLLVM::buildSwitch):
+        (JSC::FTL::DFG::LowerDFGToLLVM::lazySlowPath):
+        (JSC::FTL::DFG::LowerDFGToLLVM::crash):
+        * ftl/FTLOutput.cpp:
+        (JSC::FTL::Output::Output):
+        * ftl/FTLOutput.h:
+        (JSC::FTL::Output::addIncomingToPhi):
+        * ftl/FTLState.cpp:
+        (JSC::FTL::State::dumpState):
+        * ftl/FTLValueRange.cpp:
+        (JSC::FTL::ValueRange::decorateInstruction):
+        * ftl/FTLValueRange.h:
+        (JSC::FTL::ValueRange::ValueRange):
+
</ins><span class="cx"> 2015-11-18  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Implement the B3 equivalent of FTLCompile
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -1085,6 +1085,7 @@
</span><span class="cx">                 26718BA41BE99F780052017B /* AirIteratedRegisterCoalescing.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26718BA21BE99F780052017B /* AirIteratedRegisterCoalescing.cpp */; };
</span><span class="cx">                 26718BA51BE99F780052017B /* AirIteratedRegisterCoalescing.h in Headers */ = {isa = PBXBuildFile; fileRef = 26718BA31BE99F780052017B /* AirIteratedRegisterCoalescing.h */; };
</span><span class="cx">                 269D636E1BFBE5D100101B1D /* FTLB3Output.h in Headers */ = {isa = PBXBuildFile; fileRef = 269D636D1BFBE5D000101B1D /* FTLB3Output.h */; };
</span><ins>+                26BB57601BFC4328005F12EB /* FTLB3Output.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26BB575F1BFC4328005F12EB /* FTLB3Output.cpp */; };
</ins><span class="cx">                 2A05ABD51961DF2400341750 /* JSPropertyNameEnumerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A05ABD31961DF2400341750 /* JSPropertyNameEnumerator.cpp */; };
</span><span class="cx">                 2A05ABD61961DF2400341750 /* JSPropertyNameEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A05ABD41961DF2400341750 /* JSPropertyNameEnumerator.h */; };
</span><span class="cx">                 2A111245192FCE79005EE18D /* CustomGetterSetter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A111243192FCE79005EE18D /* CustomGetterSetter.cpp */; };
</span><span class="lines">@@ -3107,6 +3108,7 @@
</span><span class="cx">                 26718BA21BE99F780052017B /* AirIteratedRegisterCoalescing.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AirIteratedRegisterCoalescing.cpp; path = b3/air/AirIteratedRegisterCoalescing.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 26718BA31BE99F780052017B /* AirIteratedRegisterCoalescing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AirIteratedRegisterCoalescing.h; path = b3/air/AirIteratedRegisterCoalescing.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 269D636D1BFBE5D000101B1D /* FTLB3Output.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FTLB3Output.h; path = ftl/FTLB3Output.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                26BB575F1BFC4328005F12EB /* FTLB3Output.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FTLB3Output.cpp; path = ftl/FTLB3Output.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 2A05ABD31961DF2400341750 /* JSPropertyNameEnumerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPropertyNameEnumerator.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2A05ABD41961DF2400341750 /* JSPropertyNameEnumerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPropertyNameEnumerator.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2A111243192FCE79005EE18D /* CustomGetterSetter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CustomGetterSetter.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -8859,6 +8861,7 @@
</span><span class="cx">                                 0F15CD221BA5F9860031FFD3 /* PutByIdFlags.cpp in Sources */,
</span><span class="cx">                                 0F9332A314CA7DD70085F3C6 /* PutByIdStatus.cpp in Sources */,
</span><span class="cx">                                 0F93B4A918B92C4D00178A3F /* PutByIdVariant.cpp in Sources */,
</span><ins>+                                26BB57601BFC4328005F12EB /* FTLB3Output.cpp in Sources */,
</ins><span class="cx">                                 0FF60AC316740F8800029779 /* ReduceWhitespace.cpp in Sources */,
</span><span class="cx">                                 E33637A51B63220200EE0840 /* ReflectObject.cpp in Sources */,
</span><span class="cx">                                 0FA7A8EB18B413C80052371D /* Reg.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLAbbreviatedTypesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLAbbreviatedTypes.h (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLAbbreviatedTypes.h        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLAbbreviatedTypes.h        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -29,15 +29,24 @@
</span><span class="cx"> #if ENABLE(FTL_JIT)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;DFGCommon.h&quot;
</span><del>-#include &quot;B3BasicBlock.h&quot;
-#include &quot;B3Value.h&quot;
-#include &quot;B3Procedure.h&quot;
-#include &quot;LLVMAPI.h&quot;
</del><ins>+#include &quot;LLVMHeaders.h&quot;
</ins><span class="cx"> 
</span><ins>+namespace JSC { namespace B3 {
+class BasicBlock;
+enum Type : int8_t;
+} }
+
</ins><span class="cx"> namespace JSC { namespace FTL {
</span><span class="cx"> 
</span><ins>+#if FTL_USES_B3
+typedef B3::BasicBlock* LBasicBlock;
+typedef B3::Type LType;
+#else
+typedef LLVMBasicBlockRef LBasicBlock;
+typedef LLVMTypeRef LType;
+#endif
+
</ins><span class="cx"> typedef LLVMAtomicOrdering LAtomicOrdering;
</span><del>-typedef LLVMBasicBlockRef LBasicBlock;
</del><span class="cx"> typedef LLVMBuilderRef LBuilder;
</span><span class="cx"> typedef LLVMCallConv LCallConv;
</span><span class="cx"> typedef LLVMContextRef LContext;
</span><span class="lines">@@ -45,10 +54,11 @@
</span><span class="cx"> typedef LLVMLinkage LLinkage;
</span><span class="cx"> typedef LLVMModuleRef LModule;
</span><span class="cx"> typedef LLVMRealPredicate LRealPredicate;
</span><del>-typedef LLVMTypeRef LType;
</del><span class="cx"> typedef LLVMValueRef LValue;
</span><span class="cx"> typedef LLVMMemoryBufferRef LMemoryBuffer;
</span><span class="cx"> 
</span><ins>+enum SynchronizationScope { SingleThread, CrossThread };
+
</ins><span class="cx"> } } // namespace JSC::FTL
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(FTL_JIT)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLAbbreviationsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLAbbreviations.h (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLAbbreviations.h        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLAbbreviations.h        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -35,6 +35,8 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC { namespace FTL {
</span><span class="cx"> 
</span><ins>+#if !FTL_USES_B3
+
</ins><span class="cx"> // This file contains short-form calls into the LLVM C API. It is meant to
</span><span class="cx"> // save typing and make the lowering code clearer. If we ever call an LLVM C API
</span><span class="cx"> // function more than once in the FTL lowering code, we should add a shortcut for
</span><span class="lines">@@ -281,7 +283,6 @@
</span><span class="cx"> static inline LValue buildFCmp(LBuilder builder, LRealPredicate cond, LValue left, LValue right) { return llvm-&gt;BuildFCmp(builder, cond, left, right, &quot;&quot;); }
</span><span class="cx"> static inline LValue buildInsertElement(LBuilder builder, LValue vector, LValue element, LValue index) { return llvm-&gt;BuildInsertElement(builder, vector, element, index, &quot;&quot;); }
</span><span class="cx"> 
</span><del>-enum SynchronizationScope { SingleThread, CrossThread };
</del><span class="cx"> static inline LValue buildFence(LBuilder builder, LAtomicOrdering ordering, SynchronizationScope scope = CrossThread)
</span><span class="cx"> {
</span><span class="cx">     return llvm-&gt;BuildFence(builder, ordering, scope == SingleThread, &quot;&quot;);
</span><span class="lines">@@ -337,6 +338,8 @@
</span><span class="cx">     llvm-&gt;DisposeMessage(error);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#endif // !FTL_USES_B3
+
</ins><span class="cx"> } } // namespace JSC::FTL
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(FTL_JIT)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLAbstractHeapcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLAbstractHeap.cpp        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -40,6 +40,7 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC { namespace FTL {
</span><span class="cx"> 
</span><ins>+#if !FTL_USES_B3
</ins><span class="cx"> LValue AbstractHeap::tbaaMetadataSlow(const AbstractHeapRepository&amp; repository) const
</span><span class="cx"> {
</span><span class="cx">     m_tbaaMetadata = mdNode(
</span><span class="lines">@@ -48,12 +49,18 @@
</span><span class="cx">         m_parent-&gt;tbaaMetadata(repository));
</span><span class="cx">     return m_tbaaMetadata;
</span><span class="cx"> }
</span><ins>+#endif
</ins><span class="cx"> 
</span><span class="cx"> void AbstractHeap::decorateInstruction(LValue instruction, const AbstractHeapRepository&amp; repository) const
</span><span class="cx"> {
</span><ins>+#if !FTL_USES_B3
</ins><span class="cx">     if (!Options::useFTLTBAA())
</span><span class="cx">         return;
</span><span class="cx">     setMetadata(instruction, repository.m_tbaaKind, tbaaMetadata(repository));
</span><ins>+#else
+    UNUSED_PARAM(instruction);
+    UNUSED_PARAM(repository);
+#endif
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void AbstractHeap::dump(PrintStream&amp; out) const
</span><span class="lines">@@ -78,6 +85,9 @@
</span><span class="cx">     , m_scaleTerm(0)
</span><span class="cx">     , m_canShift(false)
</span><span class="cx"> {
</span><ins>+#if FTL_USES_B3
+    UNUSED_PARAM(context);
+#else
</ins><span class="cx">     // See if there is a common shift amount we could use instead of multiplying. Don't
</span><span class="cx">     // try too hard. This is just a speculative optimization to reduce load on LLVM.
</span><span class="cx">     for (unsigned i = 0; i &lt; 4; ++i) {
</span><span class="lines">@@ -91,6 +101,7 @@
</span><span class="cx">     
</span><span class="cx">     if (!m_canShift)
</span><span class="cx">         m_scaleTerm = constInt(intPtrType(context), m_elementSize, ZeroExtend);
</span><ins>+#endif
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> IndexedAbstractHeap::~IndexedAbstractHeap()
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLAbstractHeaph"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLAbstractHeap.h (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLAbstractHeap.h        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLAbstractHeap.h        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -53,14 +53,18 @@
</span><span class="cx">     AbstractHeap()
</span><span class="cx">         : m_parent(0)
</span><span class="cx">         , m_heapName(0)
</span><ins>+#if !FTL_USES_B3
</ins><span class="cx">         , m_tbaaMetadata(0)
</span><ins>+#endif
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     AbstractHeap(AbstractHeap* parent, const char* heapName)
</span><span class="cx">         : m_parent(parent)
</span><span class="cx">         , m_heapName(heapName)
</span><ins>+#if !FTL_USES_B3
</ins><span class="cx">         , m_tbaaMetadata(0)
</span><ins>+#endif
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -88,7 +92,8 @@
</span><span class="cx">         ASSERT(isInitialized());
</span><span class="cx">         return m_heapName;
</span><span class="cx">     }
</span><del>-    
</del><ins>+
+#if !FTL_USES_B3
</ins><span class="cx">     LValue tbaaMetadata(const AbstractHeapRepository&amp; repository) const
</span><span class="cx">     {
</span><span class="cx">         ASSERT(isInitialized());
</span><span class="lines">@@ -96,6 +101,7 @@
</span><span class="cx">             return m_tbaaMetadata;
</span><span class="cx">         return tbaaMetadataSlow(repository);
</span><span class="cx">     }
</span><ins>+#endif
</ins><span class="cx">     
</span><span class="cx">     void decorateInstruction(LValue instruction, const AbstractHeapRepository&amp;) const;
</span><span class="cx"> 
</span><span class="lines">@@ -103,12 +109,16 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     friend class AbstractHeapRepository;
</span><del>-    
</del><ins>+
+#if !FTL_USES_B3
</ins><span class="cx">     LValue tbaaMetadataSlow(const AbstractHeapRepository&amp;) const;
</span><ins>+#endif
</ins><span class="cx">     
</span><span class="cx">     AbstractHeap* m_parent;
</span><span class="cx">     const char* m_heapName;
</span><ins>+#if !FTL_USES_B3
</ins><span class="cx">     mutable LValue m_tbaaMetadata;
</span><ins>+#endif
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> // Think of &quot;AbstractField&quot; as being an &quot;AbstractHeapWithOffset&quot;. I would have named
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLAbstractHeapRepositorycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.cpp (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.cpp        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.cpp        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -64,7 +64,9 @@
</span><span class="cx"> 
</span><span class="cx">     , absolute(context, &amp;root, &quot;absolute&quot;)
</span><span class="cx">     , m_context(context)
</span><ins>+#if !FTL_USES_B3
</ins><span class="cx">     , m_tbaaKind(mdKindID(m_context, &quot;tbaa&quot;))
</span><ins>+#endif
</ins><span class="cx"> {
</span><span class="cx">     // Make sure that our explicit assumptions about the StructureIDBlob match reality.
</span><span class="cx">     RELEASE_ASSERT(!(JSCell_indexingType.offset() &amp; (sizeof(int32_t) - 1)));
</span><span class="lines">@@ -76,11 +78,13 @@
</span><span class="cx">     JSCell_typeInfoType.changeParent(&amp;JSCell_usefulBytes);
</span><span class="cx">     JSCell_typeInfoFlags.changeParent(&amp;JSCell_usefulBytes);
</span><span class="cx">     JSCell_cellState.changeParent(&amp;JSCell_usefulBytes);
</span><del>-    
</del><ins>+
+#if !FTL_USES_B3
</ins><span class="cx">     root.m_tbaaMetadata = mdNode(m_context, mdString(m_context, root.m_heapName));
</span><span class="cx">     
</span><span class="cx">     RELEASE_ASSERT(m_tbaaKind);
</span><span class="cx">     RELEASE_ASSERT(root.m_tbaaMetadata);
</span><ins>+#endif
</ins><span class="cx">     
</span><span class="cx">     RELEASE_ASSERT(!JSCell_freeListNext.offset());
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLAbstractHeapRepositoryh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -194,7 +194,9 @@
</span><span class="cx">     friend class AbstractHeap;
</span><span class="cx">     
</span><span class="cx">     LContext m_context;
</span><ins>+#if !FTL_USES_B3
</ins><span class="cx">     unsigned m_tbaaKind;
</span><ins>+#endif
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } } // namespace JSC::FTL
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLB3Outputcpp"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/ftl/FTLB3Output.cpp (0 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLB3Output.cpp                                (rev 0)
+++ trunk/Source/JavaScriptCore/ftl/FTLB3Output.cpp        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -0,0 +1,44 @@
</span><ins>+/*
+ * Copyright (C) 2013, 2014 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;FTLB3Output.h&quot;
+
+#if ENABLE(FTL_JIT)
+#if FTL_USES_B3
+
+namespace JSC { namespace FTL {
+
+Output::Output(State&amp; state)
+    : CommonValues(state.context)
+    , m_procedure(*state.proc)
+{
+}
+
+} } // namespace JSC::FTL
+
+#endif // FTL_USES_B3
+#endif // ENABLE(FTL_JIT)
+
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLB3Outputh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLB3Output.h (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLB3Output.h        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLB3Output.h        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -26,16 +26,20 @@
</span><span class="cx"> #ifndef FTLB3Output_h
</span><span class="cx"> #define FTLB3Output_h
</span><span class="cx"> 
</span><ins>+#include &quot;DFGCommon.h&quot;
+
</ins><span class="cx"> #if ENABLE(FTL_JIT)
</span><span class="cx"> #if FTL_USES_B3
</span><span class="cx"> 
</span><del>-#include &quot;DFGCommon.h&quot;
</del><ins>+#include &quot;B3BasicBlock.h&quot;
+#include &quot;B3Procedure.h&quot;
</ins><span class="cx"> #include &quot;FTLAbbreviatedTypes.h&quot;
</span><span class="cx"> #include &quot;FTLAbstractHeapRepository.h&quot;
</span><span class="cx"> #include &quot;FTLCommonValues.h&quot;
</span><span class="cx"> #include &quot;FTLState.h&quot;
</span><span class="cx"> #include &quot;FTLSwitchCase.h&quot;
</span><span class="cx"> #include &quot;FTLTypedPointer.h&quot;
</span><ins>+#include &quot;FTLValueFromBlock.h&quot;
</ins><span class="cx"> #include &quot;FTLWeight.h&quot;
</span><span class="cx"> #include &quot;FTLWeightedTarget.h&quot;
</span><span class="cx"> #include &lt;wtf/StringPrintStream.h&gt;
</span><span class="lines">@@ -53,23 +57,25 @@
</span><span class="cx"> 
</span><span class="cx"> class Output : public CommonValues {
</span><span class="cx"> public:
</span><del>-    Output(LContext context)
-        : CommonValues(context)
</del><ins>+    Output(State&amp;);
+    ~Output() { CRASH(); }
+
+    LBasicBlock newBlock(const char* name = &quot;&quot;)
</ins><span class="cx">     {
</span><del>-        CRASH();
</del><ins>+        UNUSED_PARAM(name);
+        return m_procedure.addBlock();
</ins><span class="cx">     }
</span><del>-    ~Output() { CRASH(); }
</del><span class="cx"> 
</span><del>-    void initialize(LModule, LValue, AbstractHeapRepository&amp;) { CRASH(); }
</del><ins>+    LBasicBlock insertNewBlocksBefore(LBasicBlock nextBlock)
+    {
+        LBasicBlock lastNextBlock = m_nextBlock;
+        m_nextBlock = nextBlock;
+        return lastNextBlock;
+    }
</ins><span class="cx"> 
</span><del>-    LBasicBlock insertNewBlocksBefore(LBasicBlock nextBlock) { CRASH(); }
-
</del><span class="cx">     LBasicBlock appendTo(LBasicBlock, LBasicBlock nextBlock) { CRASH(); }
</span><del>-
</del><span class="cx">     void appendTo(LBasicBlock) { CRASH(); }
</span><span class="cx"> 
</span><del>-    LBasicBlock newBlock(const char* name = &quot;&quot;) { CRASH(); }
-
</del><span class="cx">     LValue param(unsigned index) { CRASH(); }
</span><span class="cx">     LValue constBool(bool value) { CRASH(); }
</span><span class="cx">     LValue constInt32(int32_t value) { CRASH(); }
</span><span class="lines">@@ -85,6 +91,8 @@
</span><span class="cx">     LValue phi(LType type, ValueFromBlock value, Params... theRest) { CRASH(); }
</span><span class="cx">     template&lt;typename VectorType&gt;
</span><span class="cx">     LValue phi(LType type, const VectorType&amp; vector) { CRASH(); }
</span><ins>+    void addIncomingToPhi(LValue phi, ValueFromBlock value) { CRASH(); }
+
</ins><span class="cx">     LValue add(LValue left, LValue right) { CRASH(); }
</span><span class="cx">     LValue sub(LValue left, LValue right) { CRASH(); }
</span><span class="cx">     LValue mul(LValue left, LValue right) { CRASH(); }
</span><span class="lines">@@ -308,9 +316,10 @@
</span><span class="cx">     LValue patchpointVoidIntrinsic() { CRASH(); }
</span><span class="cx"> 
</span><span class="cx"> #pragma mark - States
</span><ins>+    B3::Procedure&amp; m_procedure;
</ins><span class="cx"> 
</span><del>-    LBasicBlock m_block;
-    LBasicBlock m_nextBlock;
</del><ins>+    LBasicBlock m_block { nullptr };
+    LBasicBlock m_nextBlock { nullptr };
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> #if COMPILER(CLANG)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLCommonValuescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLCommonValues.cpp (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLCommonValues.cpp        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLCommonValues.cpp        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -26,6 +26,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;FTLCommonValues.h&quot;
</span><span class="cx"> 
</span><ins>+#include &quot;B3Type.h&quot;
</ins><span class="cx"> #include &quot;FTLAbbreviations.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(FTL_JIT)
</span><span class="lines">@@ -33,15 +34,23 @@
</span><span class="cx"> namespace JSC { namespace FTL {
</span><span class="cx"> 
</span><span class="cx"> CommonValues::CommonValues(LContext context)
</span><ins>+#if FTL_USES_B3
+    : voidType(B3::Void)
+    , boolean(B3::Int32)
+    , int32(B3::Int32)
+    , int64(B3::Int64)
+    , intPtr(B3::pointerType())
+    , doubleType(B3::Double)
+#else
</ins><span class="cx">     : voidType(FTL::voidType(context))
</span><span class="cx">     , boolean(int1Type(context))
</span><del>-    , int8(int8Type(context))
-    , int16(int16Type(context))
</del><span class="cx">     , int32(int32Type(context))
</span><span class="cx">     , int64(int64Type(context))
</span><span class="cx">     , intPtr(intPtrType(context))
</span><ins>+    , doubleType(FTL::doubleType(context))
+    , int8(int8Type(context))
+    , int16(int16Type(context))
</ins><span class="cx">     , floatType(FTL::floatType(context))
</span><del>-    , doubleType(FTL::doubleType(context))
</del><span class="cx">     , ref8(pointerType(int8))
</span><span class="cx">     , ref16(pointerType(int16))
</span><span class="cx">     , ref32(pointerType(int32))
</span><span class="lines">@@ -67,9 +76,15 @@
</span><span class="cx">     , profKind(mdKindID(context, &quot;prof&quot;))
</span><span class="cx">     , branchWeights(mdString(context, &quot;branch_weights&quot;))
</span><span class="cx">     , nonNegativeInt32(constInt(int32, 0, SignExtend), constInt(int32, 1ll &lt;&lt; 31, SignExtend))
</span><ins>+#endif // !FTL_USES_B3
</ins><span class="cx">     , m_context(context)
</span><span class="cx">     , m_module(0)
</span><span class="cx"> {
</span><ins>+#if FTL_USES_B3
+    // Plenty of values are uninitialized. The branch is just there for NORETURN.
+    if (!m_module)
+        CRASH();
+#endif
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } } // namespace JSC::FTL
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLCommonValuesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLCommonValues.h (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLCommonValues.h        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLCommonValues.h        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -44,13 +44,14 @@
</span><span class="cx">     
</span><span class="cx">     const LType voidType;
</span><span class="cx">     const LType boolean;
</span><del>-    const LType int8;
-    const LType int16;
</del><span class="cx">     const LType int32;
</span><span class="cx">     const LType int64;
</span><span class="cx">     const LType intPtr;
</span><ins>+    const LType doubleType;
+#if !FTL_USES_B3
+    const LType int8;
+    const LType int16;
</ins><span class="cx">     const LType floatType;
</span><del>-    const LType doubleType;
</del><span class="cx">     const LType ref8;
</span><span class="cx">     const LType ref16;
</span><span class="cx">     const LType ref32;
</span><span class="lines">@@ -58,24 +59,25 @@
</span><span class="cx">     const LType refPtr;
</span><span class="cx">     const LType refFloat;
</span><span class="cx">     const LType refDouble;
</span><del>-    const LValue booleanTrue;
-    const LValue booleanFalse;
-    const LValue int8Zero;
-    const LValue int32Zero;
-    const LValue int32One;
-    const LValue int64Zero;
-    const LValue intPtrZero;
-    const LValue intPtrOne;
-    const LValue intPtrTwo;
-    const LValue intPtrThree;
-    const LValue intPtrFour;
-    const LValue intPtrEight;
-    const LValue intPtrPtr;
-    const LValue doubleZero;
</del><ins>+#endif
+    const LValue booleanTrue { nullptr };
+    const LValue booleanFalse { nullptr };
+    const LValue int8Zero { nullptr };
+    const LValue int32Zero { nullptr };
+    const LValue int32One { nullptr };
+    const LValue int64Zero { nullptr };
+    const LValue intPtrZero { nullptr };
+    const LValue intPtrOne { nullptr };
+    const LValue intPtrTwo { nullptr };
+    const LValue intPtrThree { nullptr };
+    const LValue intPtrFour { nullptr };
+    const LValue intPtrEight { nullptr };
+    const LValue intPtrPtr { nullptr };
+    const LValue doubleZero { nullptr };
</ins><span class="cx">     
</span><del>-    const unsigned rangeKind;
-    const unsigned profKind;
-    const LValue branchWeights;
</del><ins>+    const unsigned rangeKind { 0 };
+    const unsigned profKind { 0 };
+    const LValue branchWeights { nullptr };
</ins><span class="cx">     
</span><span class="cx">     const ValueRange nonNegativeInt32;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLIntrinsicRepositorycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLIntrinsicRepository.cpp (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLIntrinsicRepository.cpp        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLIntrinsicRepository.cpp        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> #include &quot;FTLIntrinsicRepository.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(FTL_JIT)
</span><ins>+#if !FTL_USES_B3
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;FTLAbbreviations.h&quot;
</span><span class="cx"> 
</span><span class="lines">@@ -63,5 +64,6 @@
</span><span class="cx"> 
</span><span class="cx"> } } // namespace JSC::FTL
</span><span class="cx"> 
</span><ins>+#endif // !FTL_USES_B3
</ins><span class="cx"> #endif // ENABLE(FTL_JIT)
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLIntrinsicRepositoryh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -28,6 +28,10 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(FTL_JIT)
</span><span class="cx"> 
</span><ins>+#include &quot;DFGCommon.h&quot;
+
+#if !FTL_USES_B3
+
</ins><span class="cx"> #include &quot;DFGOperations.h&quot;
</span><span class="cx"> #include &quot;FTLAbbreviations.h&quot;
</span><span class="cx"> #include &quot;FTLCommonValues.h&quot;
</span><span class="lines">@@ -181,6 +185,7 @@
</span><span class="cx"> 
</span><span class="cx"> } } // namespace JSC::FTL
</span><span class="cx"> 
</span><ins>+#endif // !FTL_USES_B3
</ins><span class="cx"> #endif // ENABLE(FTL_JIT)
</span><span class="cx"> 
</span><span class="cx"> #endif // FTLIntrinsicRepository_h
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLLowerDFGToLLVMcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -75,7 +75,7 @@
</span><span class="cx"> {
</span><span class="cx">     CRASH();
</span><span class="cx"> }
</span><del>-#else
</del><ins>+#elif !FTL_USES_B3
</ins><span class="cx"> NO_RETURN_DUE_TO_CRASH static void ftlUnreachable(
</span><span class="cx">     CodeBlock* codeBlock, BlockIndex blockIndex, unsigned nodeIndex)
</span><span class="cx"> {
</span><span class="lines">@@ -104,12 +104,14 @@
</span><span class="cx">         : m_graph(state.graph)
</span><span class="cx">         , m_ftlState(state)
</span><span class="cx">         , m_heaps(state.context)
</span><del>-        , m_out(state.context)
</del><ins>+        , m_out(state)
</ins><span class="cx">         , m_state(state.graph)
</span><span class="cx">         , m_interpreter(state.graph, m_state)
</span><span class="cx">         , m_stackmapIDs(0)
</span><ins>+#if !FTL_USES_B3
</ins><span class="cx">         , m_tbaaKind(mdKindID(state.context, &quot;tbaa&quot;))
</span><span class="cx">         , m_tbaaStructKind(mdKindID(state.context, &quot;tbaa.struct&quot;))
</span><ins>+#endif
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -124,7 +126,15 @@
</span><span class="cx">             name = &quot;jsBody&quot;;
</span><span class="cx">         
</span><span class="cx">         m_graph.ensureDominators();
</span><del>-        
</del><ins>+
+#if FTL_USES_B3
+        if (verboseCompilationEnabled() || !verboseCompilationEnabled())
+            CRASH();
+
+        m_prologue = FTL_NEW_BLOCK(m_out, (&quot;Prologue&quot;));
+        LBasicBlock stackOverflow = FTL_NEW_BLOCK(m_out, (&quot;Stack overflow&quot;));
+        LBasicBlock checkArguments = FTL_NEW_BLOCK(m_out, (&quot;Check arguments&quot;));
+#else
</ins><span class="cx">         m_ftlState.module =
</span><span class="cx">             moduleCreateWithNameInContext(name.data(), m_ftlState.context);
</span><span class="cx">         
</span><span class="lines">@@ -158,8 +168,6 @@
</span><span class="cx">         m_out.appendTo(m_prologue, stackOverflow);
</span><span class="cx">         createPhiVariables();
</span><span class="cx"> 
</span><del>-        auto preOrder = m_graph.blocksInPreOrder();
-
</del><span class="cx">         LValue capturedAlloca = m_out.alloca(arrayType(m_out.int64, m_graph.m_nextMachineLocal));
</span><span class="cx">         
</span><span class="cx">         m_captured = m_out.add(
</span><span class="lines">@@ -170,6 +178,9 @@
</span><span class="cx">         m_out.call(
</span><span class="cx">             m_out.stackmapIntrinsic(), m_out.constInt64(m_ftlState.capturedStackmapID),
</span><span class="cx">             m_out.int32Zero, capturedAlloca);
</span><ins>+#endif
+
+        auto preOrder = m_graph.blocksInPreOrder();
</ins><span class="cx">         
</span><span class="cx">         // If we have any CallVarargs then we need to have a spill slot for it.
</span><span class="cx">         bool hasVarargs = false;
</span><span class="lines">@@ -231,6 +242,11 @@
</span><span class="cx">                 }
</span><span class="cx">             }
</span><span class="cx">         }
</span><ins>+
+#if FTL_USES_B3
+        if (hasVarargs || !hasVarargs)
+            CRASH();
+#else
</ins><span class="cx">         if (hasVarargs) {
</span><span class="cx">             LValue varargsSpillSlots = m_out.alloca(
</span><span class="cx">                 arrayType(m_out.int64, JSCallVarargs::numSpillSlotsNeeded()));
</span><span class="lines">@@ -251,6 +267,7 @@
</span><span class="cx">                 m_out.stackmapIntrinsic(), m_out.constInt64(m_ftlState.exceptionHandlingSpillSlotStackmapID),
</span><span class="cx">                 m_out.int32Zero, exceptionHandlingVolatileRegistersSpillSlots);
</span><span class="cx">         }
</span><ins>+#endif
</ins><span class="cx">         
</span><span class="cx">         // We should not create any alloca's after this point, since they will cease to
</span><span class="cx">         // be mem2reg candidates.
</span><span class="lines">@@ -326,14 +343,15 @@
</span><span class="cx">         
</span><span class="cx">         for (BasicBlock* block : preOrder)
</span><span class="cx">             compileBlock(block);
</span><del>-        
</del><ins>+
+#if !FTL_USES_B3
</ins><span class="cx">         if (Options::dumpLLVMIR())
</span><span class="cx">             dumpModule(m_ftlState.module);
</span><del>-        
</del><span class="cx">         if (verboseCompilationEnabled())
</span><span class="cx">             m_ftlState.dumpState(&quot;after lowering&quot;);
</span><span class="cx">         if (validationEnabled())
</span><span class="cx">             verifyModule(m_ftlState.module);
</span><ins>+#endif
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="lines">@@ -1542,6 +1560,9 @@
</span><span class="cx">             if (Options::verboseCompilation())
</span><span class="cx">                 dataLog(&quot;    Emitting ArithSub patchpoint with stackmap #&quot;, stackmapID, &quot;\n&quot;);
</span><span class="cx"> 
</span><ins>+#if FTL_USES_B3
+            CRASH();
+#else
</ins><span class="cx">             LValue left = lowJSValue(m_node-&gt;child1());
</span><span class="cx">             LValue right = lowJSValue(m_node-&gt;child2());
</span><span class="cx"> 
</span><span class="lines">@@ -1564,6 +1585,7 @@
</span><span class="cx">                 abstractValue(m_node-&gt;child2()).resultType()));
</span><span class="cx"> 
</span><span class="cx">             setJSValue(call);
</span><ins>+#endif
</ins><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -2359,7 +2381,11 @@
</span><span class="cx">     {
</span><span class="cx">         // See above; CellUse is easier so we do only that for now.
</span><span class="cx">         ASSERT(m_node-&gt;child1().useKind() == CellUse);
</span><del>-        
</del><ins>+
+#if FTL_USES_B3
+        if (verboseCompilationEnabled() || !verboseCompilationEnabled())
+            CRASH();
+#else
</ins><span class="cx">         LValue base = lowCell(m_node-&gt;child1());
</span><span class="cx">         LValue value = lowJSValue(m_node-&gt;child2());
</span><span class="cx">         auto uid = m_graph.identifiers()[m_node-&gt;identifierNumber()];
</span><span class="lines">@@ -2369,7 +2395,7 @@
</span><span class="cx"> 
</span><span class="cx">         if (verboseCompilationEnabled())
</span><span class="cx">             dataLog(&quot;    Emitting PutById patchpoint with stackmap #&quot;, stackmapID, &quot;\n&quot;);
</span><del>-        
</del><ins>+
</ins><span class="cx">         StackmapArgumentList arguments;
</span><span class="cx">         arguments.append(base); 
</span><span class="cx">         arguments.append(value);
</span><span class="lines">@@ -2388,6 +2414,7 @@
</span><span class="cx">             stackmapID, m_node-&gt;origin.semantic, uid,
</span><span class="cx">             m_graph.executableFor(m_node-&gt;origin.semantic)-&gt;ecmaMode(),
</span><span class="cx">             m_node-&gt;op() == PutByIdDirect ? Direct : NotDirect));
</span><ins>+#endif
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     void compileGetButterfly()
</span><span class="lines">@@ -2955,6 +2982,10 @@
</span><span class="cx">         }
</span><span class="cx">             
</span><span class="cx">         default:
</span><ins>+#if FTL_USES_B3
+            UNUSED_PARAM(child5);
+            CRASH();
+#else
</ins><span class="cx">             TypedArrayType type = m_node-&gt;arrayMode().typedArrayType();
</span><span class="cx">             
</span><span class="cx">             if (isTypedView(type)) {
</span><span class="lines">@@ -3095,6 +3126,7 @@
</span><span class="cx">             }
</span><span class="cx">             
</span><span class="cx">             DFG_CRASH(m_graph, m_node, &quot;Bad array type&quot;);
</span><ins>+#endif // FTL_USES_B3
</ins><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="lines">@@ -3133,6 +3165,10 @@
</span><span class="cx">     
</span><span class="cx">     void compileArrayPush()
</span><span class="cx">     {
</span><ins>+#if FTL_USES_B3
+        if (verboseCompilationEnabled() || !verboseCompilationEnabled())
+            CRASH();
+#else
</ins><span class="cx">         LValue base = lowCell(m_node-&gt;child1());
</span><span class="cx">         LValue storage = lowStorage(m_node-&gt;child3());
</span><span class="cx">         
</span><span class="lines">@@ -3199,6 +3235,7 @@
</span><span class="cx">             DFG_CRASH(m_graph, m_node, &quot;Bad array type&quot;);
</span><span class="cx">             return;
</span><span class="cx">         }
</span><ins>+#endif
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     void compileArrayPop()
</span><span class="lines">@@ -3476,7 +3513,7 @@
</span><span class="cx">                 m_out.load64(m_out.baseIndex(m_heaps.variables, stackBase, index)),
</span><span class="cx">                 m_out.baseIndex(m_heaps.DirectArguments_storage, result, index));
</span><span class="cx">             ValueFromBlock nextIndex = m_out.anchor(index);
</span><del>-            addIncoming(previousIndex, nextIndex);
</del><ins>+            m_out.addIncomingToPhi(previousIndex, nextIndex);
</ins><span class="cx">             m_out.branch(m_out.isNull(index), unsure(end), unsure(loop));
</span><span class="cx">             
</span><span class="cx">             m_out.appendTo(end, lastNext);
</span><span class="lines">@@ -3701,8 +3738,8 @@
</span><span class="cx">                     TypedPointer(m_heaps.indexedDoubleProperties.atAnyIndex(), pointer));
</span><span class="cx">                 
</span><span class="cx">                 LValue nextIndex = m_out.sub(index, m_out.int32One);
</span><del>-                addIncoming(index, m_out.anchor(nextIndex));
-                addIncoming(pointer, m_out.anchor(m_out.add(pointer, m_out.intPtrEight)));
</del><ins>+                m_out.addIncomingToPhi(index, m_out.anchor(nextIndex));
+                m_out.addIncomingToPhi(pointer, m_out.anchor(m_out.add(pointer, m_out.intPtrEight)));
</ins><span class="cx">                 m_out.branch(
</span><span class="cx">                     m_out.notZero32(nextIndex), unsure(initLoop), unsure(initDone));
</span><span class="cx">                 
</span><span class="lines">@@ -4564,6 +4601,10 @@
</span><span class="cx"> 
</span><span class="cx">     void compileCallOrConstruct()
</span><span class="cx">     {
</span><ins>+#if FTL_USES_B3
+        if (verboseCompilationEnabled() || !verboseCompilationEnabled())
+            CRASH();
+#else
</ins><span class="cx">         int numArgs = m_node-&gt;numChildren() - 1;
</span><span class="cx"> 
</span><span class="cx">         LValue jsCallee = lowJSValue(m_graph.varArgChild(m_node, 0));
</span><span class="lines">@@ -4598,10 +4639,15 @@
</span><span class="cx">         m_ftlState.jsCalls.append(JSCall(stackmapID, m_node, codeOriginDescriptionOfCallSite()));
</span><span class="cx">         
</span><span class="cx">         setJSValue(call);
</span><ins>+#endif
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void compileTailCall()
</span><span class="cx">     {
</span><ins>+#if FTL_USES_B3
+        if (verboseCompilationEnabled() || !verboseCompilationEnabled())
+            CRASH();
+#else
</ins><span class="cx">         int numArgs = m_node-&gt;numChildren() - 1;
</span><span class="cx">         StackmapArgumentList exitArguments;
</span><span class="cx">         exitArguments.reserveCapacity(numArgs + 6);
</span><span class="lines">@@ -4633,10 +4679,15 @@
</span><span class="cx">         m_out.unreachable();
</span><span class="cx"> 
</span><span class="cx">         m_ftlState.jsTailCalls.append(tailCall);
</span><ins>+#endif
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     void compileCallOrConstructVarargs()
</span><span class="cx">     {
</span><ins>+#if FTL_USES_B3
+        if (verboseCompilationEnabled() || !verboseCompilationEnabled())
+            CRASH();
+#else
</ins><span class="cx">         LValue jsCallee = lowJSValue(m_node-&gt;child1());
</span><span class="cx">         LValue thisArg = lowJSValue(m_node-&gt;child3());
</span><span class="cx">         
</span><span class="lines">@@ -4689,6 +4740,7 @@
</span><span class="cx">         default:
</span><span class="cx">             setJSValue(call);
</span><span class="cx">         }
</span><ins>+#endif
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     void compileLoadVarargs()
</span><span class="lines">@@ -4760,7 +4812,7 @@
</span><span class="cx">             m_out.constInt64(JSValue::encode(jsUndefined())),
</span><span class="cx">             m_out.baseIndex(m_heaps.variables, targetStart, currentIndex));
</span><span class="cx">         ValueFromBlock nextIndex = m_out.anchor(currentIndex);
</span><del>-        addIncoming(previousIndex, nextIndex);
</del><ins>+        m_out.addIncomingToPhi(previousIndex, nextIndex);
</ins><span class="cx">         m_out.branch(
</span><span class="cx">             m_out.above(currentIndex, lengthAsPtr), unsure(undefinedLoop), unsure(mainLoopEntry));
</span><span class="cx">         
</span><span class="lines">@@ -4777,7 +4829,7 @@
</span><span class="cx">                 m_out.add(currentIndex, m_out.constIntPtr(data-&gt;offset))));
</span><span class="cx">         m_out.store64(value, m_out.baseIndex(m_heaps.variables, targetStart, currentIndex));
</span><span class="cx">         nextIndex = m_out.anchor(currentIndex);
</span><del>-        addIncoming(previousIndex, nextIndex);
</del><ins>+        m_out.addIncomingToPhi(previousIndex, nextIndex);
</ins><span class="cx">         m_out.branch(m_out.isNull(currentIndex), unsure(continuation), unsure(mainLoop));
</span><span class="cx">         
</span><span class="cx">         m_out.appendTo(continuation, lastNext);
</span><span class="lines">@@ -5238,6 +5290,10 @@
</span><span class="cx">     
</span><span class="cx">     void compileIn()
</span><span class="cx">     {
</span><ins>+#if FTL_USES_B3
+        if (verboseCompilationEnabled() || !verboseCompilationEnabled())
+            CRASH();
+#else
</ins><span class="cx">         Edge base = m_node-&gt;child2();
</span><span class="cx">         LValue cell = lowCell(base);
</span><span class="cx">         speculateObject(base, cell);
</span><span class="lines">@@ -5261,6 +5317,7 @@
</span><span class="cx">         } 
</span><span class="cx"> 
</span><span class="cx">         setJSValue(vmCall(m_out.operation(operationGenericIn), m_callFrame, cell, lowJSValue(m_node-&gt;child1())));
</span><ins>+#endif
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void compileCheckHasInstance()
</span><span class="lines">@@ -5315,7 +5372,7 @@
</span><span class="cx">         
</span><span class="cx">         m_out.appendTo(notYetInstance, continuation);
</span><span class="cx">         ValueFromBlock notInstanceResult = m_out.anchor(m_out.booleanFalse);
</span><del>-        addIncoming(value, m_out.anchor(currentPrototype));
</del><ins>+        m_out.addIncomingToPhi(value, m_out.anchor(currentPrototype));
</ins><span class="cx">         m_out.branch(isCell(currentPrototype), unsure(loop), unsure(continuation));
</span><span class="cx">         
</span><span class="cx">         m_out.appendTo(continuation, lastNext);
</span><span class="lines">@@ -6222,6 +6279,13 @@
</span><span class="cx">     
</span><span class="cx">     LValue getById(LValue base)
</span><span class="cx">     {
</span><ins>+#if FTL_USES_B3
+        UNUSED_PARAM(base);
+
+        if (verboseCompilationEnabled() || !verboseCompilationEnabled())
+            CRASH();
+        return nullptr;
+#else
</ins><span class="cx">         auto uid = m_graph.identifiers()[m_node-&gt;identifierNumber()];
</span><span class="cx"> 
</span><span class="cx">         // Arguments: id, bytes, target, numArgs, args...
</span><span class="lines">@@ -6246,6 +6310,7 @@
</span><span class="cx">         m_ftlState.getByIds.append(GetByIdDescriptor(stackmapID, m_node-&gt;origin.semantic, uid));
</span><span class="cx">         
</span><span class="cx">         return call;
</span><ins>+#endif
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     LValue loadButterflyWithBarrier(LValue object)
</span><span class="lines">@@ -6480,8 +6545,12 @@
</span><span class="cx">         LValue result;
</span><span class="cx">         LValue condition;
</span><span class="cx">         if (Options::forceGCSlowPaths()) {
</span><ins>+#if FTL_USES_B3
+            CRASH();
+#else
</ins><span class="cx">             result = getUndef(m_out.int64);
</span><span class="cx">             condition = m_out.booleanFalse;
</span><ins>+#endif
</ins><span class="cx">         } else {
</span><span class="cx">             result = m_out.loadPtr(
</span><span class="cx">                 allocator, m_heaps.MarkedAllocator_freeListHead);
</span><span class="lines">@@ -6982,11 +7051,22 @@
</span><span class="cx">     
</span><span class="cx">     void buildSwitch(SwitchData* data, LType type, LValue switchValue)
</span><span class="cx">     {
</span><ins>+        ASSERT(type == m_out.intPtr || type == m_out.int32);
+
</ins><span class="cx">         Vector&lt;SwitchCase&gt; cases;
</span><span class="cx">         for (unsigned i = 0; i &lt; data-&gt;cases.size(); ++i) {
</span><del>-            cases.append(SwitchCase(
-                constInt(type, data-&gt;cases[i].value.switchLookupValue(data-&gt;kind)),
-                lowBlock(data-&gt;cases[i].target.block), Weight(data-&gt;cases[i].target.count)));
</del><ins>+            SwitchCase newCase;
+
+            if (type == m_out.intPtr) {
+                newCase = SwitchCase(m_out.constIntPtr(data-&gt;cases[i].value.switchLookupValue(data-&gt;kind)),
+                    lowBlock(data-&gt;cases[i].target.block), Weight(data-&gt;cases[i].target.count));
+            } else if (type == m_out.int32) {
+                newCase = SwitchCase(m_out.constInt32(data-&gt;cases[i].value.switchLookupValue(data-&gt;kind)),
+                    lowBlock(data-&gt;cases[i].target.block), Weight(data-&gt;cases[i].target.count));
+            } else
+                CRASH();
+
+            cases.append(newCase);
</ins><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         m_out.switchInstruction(
</span><span class="lines">@@ -7579,6 +7659,14 @@
</span><span class="cx">     template&lt;typename Functor&gt;
</span><span class="cx">     LValue lazySlowPath(const Functor&amp; functor, const Vector&lt;LValue&gt;&amp; userArguments)
</span><span class="cx">     {
</span><ins>+#if FTL_USES_B3
+        UNUSED_PARAM(functor);
+        UNUSED_PARAM(userArguments);
+
+        if (verboseCompilationEnabled() || !verboseCompilationEnabled())
+            CRASH();
+        return nullptr;
+#else
</ins><span class="cx">         unsigned stackmapID = m_stackmapIDs++;
</span><span class="cx"> 
</span><span class="cx">         StackmapArgumentList arguments;
</span><span class="lines">@@ -7599,6 +7687,7 @@
</span><span class="cx">         m_ftlState.lazySlowPaths.append(LazySlowPathDescriptor(stackmapID, m_node-&gt;origin.semantic, linker));
</span><span class="cx"> 
</span><span class="cx">         return call;
</span><ins>+#endif
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     void speculate(
</span><span class="lines">@@ -9401,6 +9490,12 @@
</span><span class="cx">         UNUSED_PARAM(blockIndex);
</span><span class="cx">         UNUSED_PARAM(nodeIndex);
</span><span class="cx"> #else
</span><ins>+#if FTL_USES_B3
+        UNUSED_PARAM(blockIndex);
+        UNUSED_PARAM(nodeIndex);
+        if (verboseCompilationEnabled() || !verboseCompilationEnabled())
+            CRASH();
+#else
</ins><span class="cx">         m_out.call(
</span><span class="cx">             m_out.intToPtr(
</span><span class="cx">                 m_out.constIntPtr(ftlUnreachable),
</span><span class="lines">@@ -9410,6 +9505,7 @@
</span><span class="cx">             m_out.constIntPtr(codeBlock()), m_out.constInt32(blockIndex),
</span><span class="cx">             m_out.constInt32(nodeIndex));
</span><span class="cx"> #endif
</span><ins>+#endif
</ins><span class="cx">         m_out.unreachable();
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -9462,8 +9558,10 @@
</span><span class="cx">     Node* m_node;
</span><span class="cx">     
</span><span class="cx">     uint32_t m_stackmapIDs;
</span><ins>+#if !FTL_USES_B3
</ins><span class="cx">     unsigned m_tbaaKind;
</span><span class="cx">     unsigned m_tbaaStructKind;
</span><ins>+#endif
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // anonymous namespace
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLOutputcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLOutput.cpp (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLOutput.cpp        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLOutput.cpp        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -33,8 +33,8 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC { namespace FTL {
</span><span class="cx"> 
</span><del>-Output::Output(LContext context)
-    : IntrinsicRepository(context)
</del><ins>+Output::Output(State&amp; state)
+    : IntrinsicRepository(state.context)
</ins><span class="cx">     , m_function(0)
</span><span class="cx">     , m_heaps(0)
</span><span class="cx">     , m_builder(llvm-&gt;CreateBuilderInContext(m_context))
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLOutputh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLOutput.h (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLOutput.h        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLOutput.h        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx"> 
</span><span class="cx"> class Output : public IntrinsicRepository {
</span><span class="cx"> public:
</span><del>-    Output(LContext);
</del><ins>+    Output(State&amp;);
</ins><span class="cx">     ~Output();
</span><span class="cx">     
</span><span class="cx">     void initialize(LModule, LValue, AbstractHeapRepository&amp;);
</span><span class="lines">@@ -114,6 +114,10 @@
</span><span class="cx">             addIncoming(result, vector[i]);
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><ins>+    void addIncomingToPhi(LValue phi, ValueFromBlock value)
+    {
+        addIncoming(phi, value);
+    }
</ins><span class="cx">     
</span><span class="cx">     LValue add(LValue left, LValue right) { return buildAdd(m_builder, left, right); }
</span><span class="cx">     LValue sub(LValue left, LValue right) { return buildSub(m_builder, left, right); }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLStatecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLState.cpp (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLState.cpp        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLState.cpp        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -87,8 +87,14 @@
</span><span class="cx"> 
</span><span class="cx"> void State::dumpState(LModule module, const char* when)
</span><span class="cx"> {
</span><ins>+#if FTL_USES_B3
+    UNUSED_PARAM(module);
+    if (!when || !!when)
+        CRASH();
+#else
</ins><span class="cx">     dataLog(&quot;LLVM IR for &quot;, CodeBlockWithJITType(graph.m_codeBlock, FTL::JITCode::FTLJIT), &quot; &quot;, when, &quot;:\n&quot;);
</span><span class="cx">     dumpModule(module);
</span><ins>+#endif
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } } // namespace JSC::FTL
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLValueRangecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLValueRange.cpp (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLValueRange.cpp        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLValueRange.cpp        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -35,9 +35,15 @@
</span><span class="cx"> void ValueRange::decorateInstruction(
</span><span class="cx">     LContext context, LValue loadInstruction, unsigned rangeKind) const
</span><span class="cx"> {
</span><ins>+#if FTL_USES_B3
+    UNUSED_PARAM(context);
+    UNUSED_PARAM(loadInstruction);
+    UNUSED_PARAM(rangeKind);
+#else
</ins><span class="cx">     if (!m_rangeMetadata)
</span><span class="cx">         m_rangeMetadata = mdNode(context, m_begin, m_end);
</span><span class="cx">     setMetadata(loadInstruction, rangeKind, m_rangeMetadata);
</span><ins>+#endif // !FTL_USES_B3
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } } // namespace JSC::FTL
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLValueRangeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLValueRange.h (192590 => 192591)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLValueRange.h        2015-11-18 23:05:34 UTC (rev 192590)
+++ trunk/Source/JavaScriptCore/ftl/FTLValueRange.h        2015-11-18 23:14:54 UTC (rev 192591)
</span><span class="lines">@@ -37,14 +37,18 @@
</span><span class="cx">     ValueRange()
</span><span class="cx">         : m_begin(0)
</span><span class="cx">         , m_end(0)
</span><ins>+#if !FTL_USES_B3
</ins><span class="cx">         , m_rangeMetadata(0)
</span><ins>+#endif
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     ValueRange(LValue begin, LValue end)
</span><span class="cx">         : m_begin(begin)
</span><span class="cx">         , m_end(end)
</span><ins>+#if !FTL_USES_B3
</ins><span class="cx">         , m_rangeMetadata(0)
</span><ins>+#endif
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -56,7 +60,9 @@
</span><span class="cx"> private:
</span><span class="cx">     LValue m_begin;
</span><span class="cx">     LValue m_end;
</span><ins>+#if !FTL_USES_B3
</ins><span class="cx">     mutable LValue m_rangeMetadata;
</span><ins>+#endif
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } } // namespace JSC::FTL
</span></span></pre>
</div>
</div>

</body>
</html>