<!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>[214571] trunk/Source</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/214571">214571</a></dd>
<dt>Author</dt> <dd>sbarati@apple.com</dd>
<dt>Date</dt> <dd>2017-03-29 15:55:53 -0700 (Wed, 29 Mar 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>LinkBuffer and ExecutableAllocator shouldn't have anything to do with VM
https://bugs.webkit.org/show_bug.cgi?id=170210

Reviewed by Mark Lam.

Source/JavaScriptCore:

This is one more step in the direction of PIC-ified Wasm.
LinkBuffer and ExecutableAllocator have no business knowing about VM.

* assembler/LinkBuffer.cpp:
(JSC::LinkBuffer::allocate):
* assembler/LinkBuffer.h:
(JSC::LinkBuffer::LinkBuffer):
(JSC::LinkBuffer::vm): Deleted.
* b3/B3Compile.cpp:
(JSC::B3::compile):
* b3/B3Compile.h:
* b3/air/testair.cpp:
* b3/testb3.cpp:
(JSC::B3::compileProc):
(JSC::B3::compileAndRun):
(JSC::B3::testLoadAcq42):
(JSC::B3::testAddArgZeroImmZDef):
(JSC::B3::testAddLoadTwice):
(JSC::B3::testMulLoadTwice):
(JSC::B3::testMulAddArgsLeft):
(JSC::B3::testMulAddArgsRight):
(JSC::B3::testMulAddArgsLeft32):
(JSC::B3::testMulAddArgsRight32):
(JSC::B3::testMulSubArgsLeft):
(JSC::B3::testMulSubArgsRight):
(JSC::B3::testMulSubArgsLeft32):
(JSC::B3::testMulSubArgsRight32):
(JSC::B3::testMulNegArgs):
(JSC::B3::testMulNegArgs32):
(JSC::B3::testCompareFloatToDoubleThroughPhi):
(JSC::B3::testDoubleToFloatThroughPhi):
(JSC::B3::testReduceFloatToDoubleValidates):
(JSC::B3::testDoubleProducerPhiToFloatConversion):
(JSC::B3::testDoubleProducerPhiToFloatConversionWithDoubleConsumer):
(JSC::B3::testDoubleProducerPhiWithNonFloatConst):
(JSC::B3::testIToD64Arg):
(JSC::B3::testIToF64Arg):
(JSC::B3::testIToD32Arg):
(JSC::B3::testIToF32Arg):
(JSC::B3::testIToD64Mem):
(JSC::B3::testIToF64Mem):
(JSC::B3::testIToD32Mem):
(JSC::B3::testIToF32Mem):
(JSC::B3::testIToDReducedToIToF64Arg):
(JSC::B3::testIToDReducedToIToF32Arg):
(JSC::B3::testStoreRelAddLoadAcq32):
(JSC::B3::testStoreRelAddLoadAcq8):
(JSC::B3::testStoreRelAddFenceLoadAcq8):
(JSC::B3::testStoreRelAddLoadAcq16):
(JSC::B3::testStoreRelAddLoadAcq64):
(JSC::B3::testBranch):
(JSC::B3::testBranchPtr):
(JSC::B3::testDiamond):
(JSC::B3::testBranchNotEqual):
(JSC::B3::testBranchNotEqualCommute):
(JSC::B3::testBranchNotEqualNotEqual):
(JSC::B3::testBranchEqual):
(JSC::B3::testBranchEqualEqual):
(JSC::B3::testBranchEqualCommute):
(JSC::B3::testBranchEqualEqual1):
(JSC::B3::testBranchLoadPtr):
(JSC::B3::testBranchLoad32):
(JSC::B3::testBranchLoad8S):
(JSC::B3::testBranchLoad8Z):
(JSC::B3::testBranchLoad16S):
(JSC::B3::testBranchLoad16Z):
(JSC::B3::testBranch8WithLoad8ZIndex):
(JSC::B3::testComplex):
(JSC::B3::testSimpleCheck):
(JSC::B3::testCheckFalse):
(JSC::B3::testCheckTrue):
(JSC::B3::testCheckLessThan):
(JSC::B3::testCheckMegaCombo):
(JSC::B3::testCheckTrickyMegaCombo):
(JSC::B3::testCheckTwoMegaCombos):
(JSC::B3::testCheckTwoNonRedundantMegaCombos):
(JSC::B3::testCheckAddImm):
(JSC::B3::testCheckAddImmCommute):
(JSC::B3::testCheckAddImmSomeRegister):
(JSC::B3::testCheckAdd):
(JSC::B3::testCheckAdd64):
(JSC::B3::testCheckAddFold):
(JSC::B3::testCheckAddFoldFail):
(JSC::B3::testCheckAddSelfOverflow64):
(JSC::B3::testCheckAddSelfOverflow32):
(JSC::B3::testCheckSubImm):
(JSC::B3::testCheckSubBadImm):
(JSC::B3::testCheckSub):
(JSC::B3::testCheckSub64):
(JSC::B3::testCheckSubFold):
(JSC::B3::testCheckSubFoldFail):
(JSC::B3::testCheckNeg):
(JSC::B3::testCheckNeg64):
(JSC::B3::testCheckMul):
(JSC::B3::testCheckMulMemory):
(JSC::B3::testCheckMul2):
(JSC::B3::testCheckMul64):
(JSC::B3::testCheckMulFold):
(JSC::B3::testCheckMulFoldFail):
(JSC::B3::testCheckMul64SShr):
(JSC::B3::testSwitch):
(JSC::B3::testSwitchChillDiv):
(JSC::B3::testSwitchTargettingSameBlock):
(JSC::B3::testSwitchTargettingSameBlockFoldPathConstant):
(JSC::B3::testBasicSelect):
(JSC::B3::testSelectTest):
(JSC::B3::testSelectCompareDouble):
(JSC::B3::testSelectDouble):
(JSC::B3::testSelectDoubleTest):
(JSC::B3::testSelectDoubleCompareDouble):
(JSC::B3::testSelectFloatCompareFloat):
(JSC::B3::testSelectFold):
(JSC::B3::testSelectInvert):
(JSC::B3::testCheckSelect):
(JSC::B3::testCheckSelectCheckSelect):
(JSC::B3::testCheckSelectAndCSE):
(JSC::B3::testTrivialInfiniteLoop):
(JSC::B3::testFoldPathEqual):
(JSC::B3::testLShiftSelf32):
(JSC::B3::testRShiftSelf32):
(JSC::B3::testURShiftSelf32):
(JSC::B3::testLShiftSelf64):
(JSC::B3::testRShiftSelf64):
(JSC::B3::testURShiftSelf64):
(JSC::B3::testPatchpointDoubleRegs):
(JSC::B3::testSpillDefSmallerThanUse):
(JSC::B3::testSpillUseLargerThanDef):
(JSC::B3::testLateRegister):
(JSC::B3::testInterpreter):
(JSC::B3::testEntrySwitchSimple):
(JSC::B3::testEntrySwitchNoEntrySwitch):
(JSC::B3::testEntrySwitchWithCommonPaths):
(JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint):
(JSC::B3::testEntrySwitchLoop):
(JSC::B3::testSomeEarlyRegister):
(JSC::B3::testTerminalPatchpointThatNeedsToBeSpilled):
(JSC::B3::testTerminalPatchpointThatNeedsToBeSpilled2):
(JSC::B3::testPatchpointTerminalReturnValue):
(JSC::B3::testMemoryFence):
(JSC::B3::testStoreFence):
(JSC::B3::testLoadFence):
(JSC::B3::testPCOriginMapDoesntInsertNops):
(JSC::B3::testPinRegisters):
(JSC::B3::testX86LeaAddAddShlLeft):
(JSC::B3::testX86LeaAddAddShlRight):
(JSC::B3::testX86LeaAddAdd):
(JSC::B3::testX86LeaAddShlRight):
(JSC::B3::testX86LeaAddShlLeftScale1):
(JSC::B3::testX86LeaAddShlLeftScale2):
(JSC::B3::testX86LeaAddShlLeftScale4):
(JSC::B3::testX86LeaAddShlLeftScale8):
(JSC::B3::testAddShl32):
(JSC::B3::testAddShl64):
(JSC::B3::testAddShl65):
(JSC::B3::testLoadBaseIndexShift2):
(JSC::B3::testLoadBaseIndexShift32):
(JSC::B3::testOptimizeMaterialization):
(JSC::B3::testAtomicWeakCAS):
(JSC::B3::testAtomicStrongCAS):
(JSC::B3::testAtomicXchg):
(JSC::B3::testDepend32):
(JSC::B3::testDepend64):
(JSC::B3::testWasmBoundsCheck):
(JSC::B3::testWasmAddress):
(JSC::B3::run):
(JSC::B3::compile): Deleted.
* bytecode/PolymorphicAccess.cpp:
(JSC::PolymorphicAccess::regenerate):
* dfg/DFGJITCompiler.cpp:
(JSC::DFG::JITCompiler::compile):
(JSC::DFG::JITCompiler::compileFunction):
* dfg/DFGLazyJSValue.cpp:
(JSC::DFG::LazyJSValue::emit):
* dfg/DFGOSRExitCompiler.cpp:
* dfg/DFGSpeculativeJIT32_64.cpp:
(JSC::DFG::SpeculativeJIT::emitCall):
* dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::emitCall):
* dfg/DFGThunks.cpp:
(JSC::DFG::osrExitGenerationThunkGenerator):
(JSC::DFG::osrEntryThunkGenerator):
* ftl/FTLCompile.cpp:
(JSC::FTL::compile):
* ftl/FTLLazySlowPath.cpp:
(JSC::FTL::LazySlowPath::generate):
* ftl/FTLLink.cpp:
(JSC::FTL::link):
* ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct):
(JSC::FTL::DFG::LowerDFGToB3::compileTailCall):
(JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread):
(JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs):
(JSC::FTL::DFG::LowerDFGToB3::compileCallEval):
* ftl/FTLOSRExitCompiler.cpp:
(JSC::FTL::compileStub):
* ftl/FTLOSRExitHandle.cpp:
(JSC::FTL::OSRExitHandle::emitExitThunk):
* ftl/FTLSlowPathCall.cpp:
(JSC::FTL::SlowPathCallContext::makeCall):
* ftl/FTLSlowPathCall.h:
(JSC::FTL::callOperation):
* ftl/FTLState.h:
* ftl/FTLThunks.cpp:
(JSC::FTL::genericGenerationThunkGenerator):
(JSC::FTL::slowPathCallThunkGenerator):
* ftl/FTLThunks.h:
(JSC::FTL::generateIfNecessary):
(JSC::FTL::Thunks::getSlowPathCallThunk):
* jit/AssemblyHelpers.cpp:
(JSC::AssemblyHelpers::emitDumbVirtualCall):
* jit/AssemblyHelpers.h:
* jit/ExecutableAllocator.cpp:
(JSC::ExecutableAllocator::initializeAllocator):
(JSC::ExecutableAllocator::singleton):
(JSC::ExecutableAllocator::ExecutableAllocator):
(JSC::ExecutableAllocator::allocate):
* jit/ExecutableAllocator.h:
* jit/JIT.cpp:
(JSC::JIT::compileWithoutLinking):
* jit/JITCall.cpp:
(JSC::JIT::compileCallEvalSlowCase):
* jit/JITMathIC.h:
(JSC::JITMathIC::generateOutOfLine):
* jit/JITOpcodes.cpp:
(JSC::JIT::privateCompileHasIndexedProperty):
* jit/JITOpcodes32_64.cpp:
(JSC::JIT::privateCompileHasIndexedProperty):
* jit/JITOperations.cpp:
* jit/JITOperations.h:
* jit/JITPropertyAccess.cpp:
(JSC::JIT::stringGetByValStubGenerator):
(JSC::JIT::privateCompileGetByVal):
(JSC::JIT::privateCompileGetByValWithCachedId):
(JSC::JIT::privateCompilePutByVal):
(JSC::JIT::privateCompilePutByValWithCachedId):
* jit/JITPropertyAccess32_64.cpp:
(JSC::JIT::stringGetByValStubGenerator):
* jit/JITStubRoutine.h:
* jit/Repatch.cpp:
(JSC::ftlThunkAwareRepatchCall):
(JSC::linkPolymorphicCall):
* jit/SpecializedThunkJIT.h:
(JSC::SpecializedThunkJIT::finalize):
* jit/ThunkGenerators.cpp:
(JSC::throwExceptionFromCallSlowPathGenerator):
(JSC::linkCallThunkGenerator):
(JSC::linkPolymorphicCallThunkGenerator):
(JSC::virtualThunkFor):
(JSC::nativeForGenerator):
(JSC::arityFixupGenerator):
(JSC::unreachableGenerator):
(JSC::boundThisNoArgsFunctionCallGenerator):
(JSC::throwExceptionFromWasmThunkGenerator):
* llint/LLIntThunks.cpp:
(JSC::LLInt::generateThunkWithJumpTo):
* runtime/SamplingProfiler.cpp:
(JSC::SamplingProfiler::takeSample):
* runtime/VM.cpp:
(JSC::VM::VM):
* runtime/VM.h:
* runtime/VMTraps.cpp:
(JSC::VMTraps::tryInstallTrapBreakpoints):
* tools/VMInspector.cpp:
* wasm/WasmBinding.cpp:
(JSC::Wasm::wasmToJs):
(JSC::Wasm::wasmToWasm):
(JSC::Wasm::exitStubGenerator):
* wasm/WasmPlan.cpp:
(JSC::Wasm::Plan::complete):
* yarr/YarrJIT.cpp:
(JSC::Yarr::YarrGenerator::compile):
(JSC::Yarr::jitCompile):

Source/WebCore:

* cssjit/SelectorCompiler.cpp:
(WebCore::SelectorCompiler::compileSelector):
(WebCore::SelectorCompiler::SelectorCodeGenerator::compile):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerLinkBuffercpp">trunk/Source/JavaScriptCore/assembler/LinkBuffer.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerLinkBufferh">trunk/Source/JavaScriptCore/assembler/LinkBuffer.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreb3B3Compilecpp">trunk/Source/JavaScriptCore/b3/B3Compile.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreb3B3Compileh">trunk/Source/JavaScriptCore/b3/B3Compile.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreb3airtestaircpp">trunk/Source/JavaScriptCore/b3/air/testair.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreb3testb3cpp">trunk/Source/JavaScriptCore/b3/testb3.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodePolymorphicAccesscpp">trunk/Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGJITCompilercpp">trunk/Source/JavaScriptCore/dfg/DFGJITCompiler.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGLazyJSValuecpp">trunk/Source/JavaScriptCore/dfg/DFGLazyJSValue.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGOSRExitCompilercpp">trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompiler.cpp</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="#trunkSourceJavaScriptCoredfgDFGThunkscpp">trunk/Source/JavaScriptCore/dfg/DFGThunks.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLCompilecpp">trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLLazySlowPathcpp">trunk/Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLLinkcpp">trunk/Source/JavaScriptCore/ftl/FTLLink.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLLowerDFGToB3cpp">trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLOSRExitCompilercpp">trunk/Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLOSRExitHandlecpp">trunk/Source/JavaScriptCore/ftl/FTLOSRExitHandle.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLSlowPathCallcpp">trunk/Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLSlowPathCallh">trunk/Source/JavaScriptCore/ftl/FTLSlowPathCall.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLStateh">trunk/Source/JavaScriptCore/ftl/FTLState.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLThunkscpp">trunk/Source/JavaScriptCore/ftl/FTLThunks.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLThunksh">trunk/Source/JavaScriptCore/ftl/FTLThunks.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitAssemblyHelperscpp">trunk/Source/JavaScriptCore/jit/AssemblyHelpers.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitAssemblyHelpersh">trunk/Source/JavaScriptCore/jit/AssemblyHelpers.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitExecutableAllocatorcpp">trunk/Source/JavaScriptCore/jit/ExecutableAllocator.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitExecutableAllocatorh">trunk/Source/JavaScriptCore/jit/ExecutableAllocator.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITcpp">trunk/Source/JavaScriptCore/jit/JIT.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITCallcpp">trunk/Source/JavaScriptCore/jit/JITCall.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITMathICh">trunk/Source/JavaScriptCore/jit/JITMathIC.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOpcodescpp">trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITOpcodes32_64cpp">trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.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="#trunkSourceJavaScriptCorejitJITStubRoutineh">trunk/Source/JavaScriptCore/jit/JITStubRoutine.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitRepatchcpp">trunk/Source/JavaScriptCore/jit/Repatch.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorejitSpecializedThunkJITh">trunk/Source/JavaScriptCore/jit/SpecializedThunkJIT.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitThunkGeneratorscpp">trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLLIntThunkscpp">trunk/Source/JavaScriptCore/llint/LLIntThunks.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeSamplingProfilercpp">trunk/Source/JavaScriptCore/runtime/SamplingProfiler.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeVMcpp">trunk/Source/JavaScriptCore/runtime/VM.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeVMh">trunk/Source/JavaScriptCore/runtime/VM.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeVMTrapscpp">trunk/Source/JavaScriptCore/runtime/VMTraps.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoretoolsVMInspectorcpp">trunk/Source/JavaScriptCore/tools/VMInspector.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmBindingcpp">trunk/Source/JavaScriptCore/wasm/WasmBinding.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorewasmWasmPlancpp">trunk/Source/JavaScriptCore/wasm/WasmPlan.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreyarrYarrJITcpp">trunk/Source/JavaScriptCore/yarr/YarrJIT.cpp</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorecssjitSelectorCompilercpp">trunk/Source/WebCore/cssjit/SelectorCompiler.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/ChangeLog        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -1,3 +1,283 @@
</span><ins>+2017-03-29  Saam Barati  &lt;sbarati@apple.com&gt;
+
+        LinkBuffer and ExecutableAllocator shouldn't have anything to do with VM
+        https://bugs.webkit.org/show_bug.cgi?id=170210
+
+        Reviewed by Mark Lam.
+
+        This is one more step in the direction of PIC-ified Wasm.
+        LinkBuffer and ExecutableAllocator have no business knowing about VM.
+
+        * assembler/LinkBuffer.cpp:
+        (JSC::LinkBuffer::allocate):
+        * assembler/LinkBuffer.h:
+        (JSC::LinkBuffer::LinkBuffer):
+        (JSC::LinkBuffer::vm): Deleted.
+        * b3/B3Compile.cpp:
+        (JSC::B3::compile):
+        * b3/B3Compile.h:
+        * b3/air/testair.cpp:
+        * b3/testb3.cpp:
+        (JSC::B3::compileProc):
+        (JSC::B3::compileAndRun):
+        (JSC::B3::testLoadAcq42):
+        (JSC::B3::testAddArgZeroImmZDef):
+        (JSC::B3::testAddLoadTwice):
+        (JSC::B3::testMulLoadTwice):
+        (JSC::B3::testMulAddArgsLeft):
+        (JSC::B3::testMulAddArgsRight):
+        (JSC::B3::testMulAddArgsLeft32):
+        (JSC::B3::testMulAddArgsRight32):
+        (JSC::B3::testMulSubArgsLeft):
+        (JSC::B3::testMulSubArgsRight):
+        (JSC::B3::testMulSubArgsLeft32):
+        (JSC::B3::testMulSubArgsRight32):
+        (JSC::B3::testMulNegArgs):
+        (JSC::B3::testMulNegArgs32):
+        (JSC::B3::testCompareFloatToDoubleThroughPhi):
+        (JSC::B3::testDoubleToFloatThroughPhi):
+        (JSC::B3::testReduceFloatToDoubleValidates):
+        (JSC::B3::testDoubleProducerPhiToFloatConversion):
+        (JSC::B3::testDoubleProducerPhiToFloatConversionWithDoubleConsumer):
+        (JSC::B3::testDoubleProducerPhiWithNonFloatConst):
+        (JSC::B3::testIToD64Arg):
+        (JSC::B3::testIToF64Arg):
+        (JSC::B3::testIToD32Arg):
+        (JSC::B3::testIToF32Arg):
+        (JSC::B3::testIToD64Mem):
+        (JSC::B3::testIToF64Mem):
+        (JSC::B3::testIToD32Mem):
+        (JSC::B3::testIToF32Mem):
+        (JSC::B3::testIToDReducedToIToF64Arg):
+        (JSC::B3::testIToDReducedToIToF32Arg):
+        (JSC::B3::testStoreRelAddLoadAcq32):
+        (JSC::B3::testStoreRelAddLoadAcq8):
+        (JSC::B3::testStoreRelAddFenceLoadAcq8):
+        (JSC::B3::testStoreRelAddLoadAcq16):
+        (JSC::B3::testStoreRelAddLoadAcq64):
+        (JSC::B3::testBranch):
+        (JSC::B3::testBranchPtr):
+        (JSC::B3::testDiamond):
+        (JSC::B3::testBranchNotEqual):
+        (JSC::B3::testBranchNotEqualCommute):
+        (JSC::B3::testBranchNotEqualNotEqual):
+        (JSC::B3::testBranchEqual):
+        (JSC::B3::testBranchEqualEqual):
+        (JSC::B3::testBranchEqualCommute):
+        (JSC::B3::testBranchEqualEqual1):
+        (JSC::B3::testBranchLoadPtr):
+        (JSC::B3::testBranchLoad32):
+        (JSC::B3::testBranchLoad8S):
+        (JSC::B3::testBranchLoad8Z):
+        (JSC::B3::testBranchLoad16S):
+        (JSC::B3::testBranchLoad16Z):
+        (JSC::B3::testBranch8WithLoad8ZIndex):
+        (JSC::B3::testComplex):
+        (JSC::B3::testSimpleCheck):
+        (JSC::B3::testCheckFalse):
+        (JSC::B3::testCheckTrue):
+        (JSC::B3::testCheckLessThan):
+        (JSC::B3::testCheckMegaCombo):
+        (JSC::B3::testCheckTrickyMegaCombo):
+        (JSC::B3::testCheckTwoMegaCombos):
+        (JSC::B3::testCheckTwoNonRedundantMegaCombos):
+        (JSC::B3::testCheckAddImm):
+        (JSC::B3::testCheckAddImmCommute):
+        (JSC::B3::testCheckAddImmSomeRegister):
+        (JSC::B3::testCheckAdd):
+        (JSC::B3::testCheckAdd64):
+        (JSC::B3::testCheckAddFold):
+        (JSC::B3::testCheckAddFoldFail):
+        (JSC::B3::testCheckAddSelfOverflow64):
+        (JSC::B3::testCheckAddSelfOverflow32):
+        (JSC::B3::testCheckSubImm):
+        (JSC::B3::testCheckSubBadImm):
+        (JSC::B3::testCheckSub):
+        (JSC::B3::testCheckSub64):
+        (JSC::B3::testCheckSubFold):
+        (JSC::B3::testCheckSubFoldFail):
+        (JSC::B3::testCheckNeg):
+        (JSC::B3::testCheckNeg64):
+        (JSC::B3::testCheckMul):
+        (JSC::B3::testCheckMulMemory):
+        (JSC::B3::testCheckMul2):
+        (JSC::B3::testCheckMul64):
+        (JSC::B3::testCheckMulFold):
+        (JSC::B3::testCheckMulFoldFail):
+        (JSC::B3::testCheckMul64SShr):
+        (JSC::B3::testSwitch):
+        (JSC::B3::testSwitchChillDiv):
+        (JSC::B3::testSwitchTargettingSameBlock):
+        (JSC::B3::testSwitchTargettingSameBlockFoldPathConstant):
+        (JSC::B3::testBasicSelect):
+        (JSC::B3::testSelectTest):
+        (JSC::B3::testSelectCompareDouble):
+        (JSC::B3::testSelectDouble):
+        (JSC::B3::testSelectDoubleTest):
+        (JSC::B3::testSelectDoubleCompareDouble):
+        (JSC::B3::testSelectFloatCompareFloat):
+        (JSC::B3::testSelectFold):
+        (JSC::B3::testSelectInvert):
+        (JSC::B3::testCheckSelect):
+        (JSC::B3::testCheckSelectCheckSelect):
+        (JSC::B3::testCheckSelectAndCSE):
+        (JSC::B3::testTrivialInfiniteLoop):
+        (JSC::B3::testFoldPathEqual):
+        (JSC::B3::testLShiftSelf32):
+        (JSC::B3::testRShiftSelf32):
+        (JSC::B3::testURShiftSelf32):
+        (JSC::B3::testLShiftSelf64):
+        (JSC::B3::testRShiftSelf64):
+        (JSC::B3::testURShiftSelf64):
+        (JSC::B3::testPatchpointDoubleRegs):
+        (JSC::B3::testSpillDefSmallerThanUse):
+        (JSC::B3::testSpillUseLargerThanDef):
+        (JSC::B3::testLateRegister):
+        (JSC::B3::testInterpreter):
+        (JSC::B3::testEntrySwitchSimple):
+        (JSC::B3::testEntrySwitchNoEntrySwitch):
+        (JSC::B3::testEntrySwitchWithCommonPaths):
+        (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint):
+        (JSC::B3::testEntrySwitchLoop):
+        (JSC::B3::testSomeEarlyRegister):
+        (JSC::B3::testTerminalPatchpointThatNeedsToBeSpilled):
+        (JSC::B3::testTerminalPatchpointThatNeedsToBeSpilled2):
+        (JSC::B3::testPatchpointTerminalReturnValue):
+        (JSC::B3::testMemoryFence):
+        (JSC::B3::testStoreFence):
+        (JSC::B3::testLoadFence):
+        (JSC::B3::testPCOriginMapDoesntInsertNops):
+        (JSC::B3::testPinRegisters):
+        (JSC::B3::testX86LeaAddAddShlLeft):
+        (JSC::B3::testX86LeaAddAddShlRight):
+        (JSC::B3::testX86LeaAddAdd):
+        (JSC::B3::testX86LeaAddShlRight):
+        (JSC::B3::testX86LeaAddShlLeftScale1):
+        (JSC::B3::testX86LeaAddShlLeftScale2):
+        (JSC::B3::testX86LeaAddShlLeftScale4):
+        (JSC::B3::testX86LeaAddShlLeftScale8):
+        (JSC::B3::testAddShl32):
+        (JSC::B3::testAddShl64):
+        (JSC::B3::testAddShl65):
+        (JSC::B3::testLoadBaseIndexShift2):
+        (JSC::B3::testLoadBaseIndexShift32):
+        (JSC::B3::testOptimizeMaterialization):
+        (JSC::B3::testAtomicWeakCAS):
+        (JSC::B3::testAtomicStrongCAS):
+        (JSC::B3::testAtomicXchg):
+        (JSC::B3::testDepend32):
+        (JSC::B3::testDepend64):
+        (JSC::B3::testWasmBoundsCheck):
+        (JSC::B3::testWasmAddress):
+        (JSC::B3::run):
+        (JSC::B3::compile): Deleted.
+        * bytecode/PolymorphicAccess.cpp:
+        (JSC::PolymorphicAccess::regenerate):
+        * dfg/DFGJITCompiler.cpp:
+        (JSC::DFG::JITCompiler::compile):
+        (JSC::DFG::JITCompiler::compileFunction):
+        * dfg/DFGLazyJSValue.cpp:
+        (JSC::DFG::LazyJSValue::emit):
+        * dfg/DFGOSRExitCompiler.cpp:
+        * dfg/DFGSpeculativeJIT32_64.cpp:
+        (JSC::DFG::SpeculativeJIT::emitCall):
+        * dfg/DFGSpeculativeJIT64.cpp:
+        (JSC::DFG::SpeculativeJIT::emitCall):
+        * dfg/DFGThunks.cpp:
+        (JSC::DFG::osrExitGenerationThunkGenerator):
+        (JSC::DFG::osrEntryThunkGenerator):
+        * ftl/FTLCompile.cpp:
+        (JSC::FTL::compile):
+        * ftl/FTLLazySlowPath.cpp:
+        (JSC::FTL::LazySlowPath::generate):
+        * ftl/FTLLink.cpp:
+        (JSC::FTL::link):
+        * ftl/FTLLowerDFGToB3.cpp:
+        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct):
+        (JSC::FTL::DFG::LowerDFGToB3::compileTailCall):
+        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread):
+        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs):
+        (JSC::FTL::DFG::LowerDFGToB3::compileCallEval):
+        * ftl/FTLOSRExitCompiler.cpp:
+        (JSC::FTL::compileStub):
+        * ftl/FTLOSRExitHandle.cpp:
+        (JSC::FTL::OSRExitHandle::emitExitThunk):
+        * ftl/FTLSlowPathCall.cpp:
+        (JSC::FTL::SlowPathCallContext::makeCall):
+        * ftl/FTLSlowPathCall.h:
+        (JSC::FTL::callOperation):
+        * ftl/FTLState.h:
+        * ftl/FTLThunks.cpp:
+        (JSC::FTL::genericGenerationThunkGenerator):
+        (JSC::FTL::slowPathCallThunkGenerator):
+        * ftl/FTLThunks.h:
+        (JSC::FTL::generateIfNecessary):
+        (JSC::FTL::Thunks::getSlowPathCallThunk):
+        * jit/AssemblyHelpers.cpp:
+        (JSC::AssemblyHelpers::emitDumbVirtualCall):
+        * jit/AssemblyHelpers.h:
+        * jit/ExecutableAllocator.cpp:
+        (JSC::ExecutableAllocator::initializeAllocator):
+        (JSC::ExecutableAllocator::singleton):
+        (JSC::ExecutableAllocator::ExecutableAllocator):
+        (JSC::ExecutableAllocator::allocate):
+        * jit/ExecutableAllocator.h:
+        * jit/JIT.cpp:
+        (JSC::JIT::compileWithoutLinking):
+        * jit/JITCall.cpp:
+        (JSC::JIT::compileCallEvalSlowCase):
+        * jit/JITMathIC.h:
+        (JSC::JITMathIC::generateOutOfLine):
+        * jit/JITOpcodes.cpp:
+        (JSC::JIT::privateCompileHasIndexedProperty):
+        * jit/JITOpcodes32_64.cpp:
+        (JSC::JIT::privateCompileHasIndexedProperty):
+        * jit/JITOperations.cpp:
+        * jit/JITOperations.h:
+        * jit/JITPropertyAccess.cpp:
+        (JSC::JIT::stringGetByValStubGenerator):
+        (JSC::JIT::privateCompileGetByVal):
+        (JSC::JIT::privateCompileGetByValWithCachedId):
+        (JSC::JIT::privateCompilePutByVal):
+        (JSC::JIT::privateCompilePutByValWithCachedId):
+        * jit/JITPropertyAccess32_64.cpp:
+        (JSC::JIT::stringGetByValStubGenerator):
+        * jit/JITStubRoutine.h:
+        * jit/Repatch.cpp:
+        (JSC::ftlThunkAwareRepatchCall):
+        (JSC::linkPolymorphicCall):
+        * jit/SpecializedThunkJIT.h:
+        (JSC::SpecializedThunkJIT::finalize):
+        * jit/ThunkGenerators.cpp:
+        (JSC::throwExceptionFromCallSlowPathGenerator):
+        (JSC::linkCallThunkGenerator):
+        (JSC::linkPolymorphicCallThunkGenerator):
+        (JSC::virtualThunkFor):
+        (JSC::nativeForGenerator):
+        (JSC::arityFixupGenerator):
+        (JSC::unreachableGenerator):
+        (JSC::boundThisNoArgsFunctionCallGenerator):
+        (JSC::throwExceptionFromWasmThunkGenerator):
+        * llint/LLIntThunks.cpp:
+        (JSC::LLInt::generateThunkWithJumpTo):
+        * runtime/SamplingProfiler.cpp:
+        (JSC::SamplingProfiler::takeSample):
+        * runtime/VM.cpp:
+        (JSC::VM::VM):
+        * runtime/VM.h:
+        * runtime/VMTraps.cpp:
+        (JSC::VMTraps::tryInstallTrapBreakpoints):
+        * tools/VMInspector.cpp:
+        * wasm/WasmBinding.cpp:
+        (JSC::Wasm::wasmToJs):
+        (JSC::Wasm::wasmToWasm):
+        (JSC::Wasm::exitStubGenerator):
+        * wasm/WasmPlan.cpp:
+        (JSC::Wasm::Plan::complete):
+        * yarr/YarrJIT.cpp:
+        (JSC::Yarr::YarrGenerator::compile):
+        (JSC::Yarr::jitCompile):
+
</ins><span class="cx"> 2017-03-29  Keith Miller  &lt;keith_miller@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         WebAssembly: Worklist should periodically check in to see if there are higher priority jobs to do.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerLinkBuffercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/LinkBuffer.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/LinkBuffer.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/assembler/LinkBuffer.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -32,7 +32,6 @@
</span><span class="cx"> #include &quot;JITCode.h&quot;
</span><span class="cx"> #include &quot;JSCInlines.h&quot;
</span><span class="cx"> #include &quot;Options.h&quot;
</span><del>-#include &quot;VM.h&quot;
</del><span class="cx"> #include &lt;wtf/CompilationThread.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="lines">@@ -242,8 +241,7 @@
</span><span class="cx">         initialSize = macroAssembler.m_assembler.codeSize();
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    ASSERT(m_vm != nullptr);
-    m_executableMemory = m_vm-&gt;executableAllocator.allocate(*m_vm, initialSize, ownerUID, effort);
</del><ins>+    m_executableMemory = ExecutableAllocator::singleton().allocate(initialSize, ownerUID, effort);
</ins><span class="cx">     if (!m_executableMemory)
</span><span class="cx">         return;
</span><span class="cx">     m_code = m_executableMemory-&gt;start();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerLinkBufferh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/LinkBuffer.h (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/LinkBuffer.h        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/assembler/LinkBuffer.h        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -43,7 +43,6 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><span class="cx"> class CodeBlock;
</span><del>-class VM;
</del><span class="cx"> 
</span><span class="cx"> // LinkBuffer:
</span><span class="cx"> //
</span><span class="lines">@@ -79,11 +78,10 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> public:
</span><del>-    LinkBuffer(VM&amp; vm, MacroAssembler&amp; macroAssembler, void* ownerUID, JITCompilationEffort effort = JITCompilationMustSucceed)
</del><ins>+    LinkBuffer(MacroAssembler&amp; macroAssembler, void* ownerUID, JITCompilationEffort effort = JITCompilationMustSucceed)
</ins><span class="cx">         : m_size(0)
</span><span class="cx">         , m_didAllocate(false)
</span><span class="cx">         , m_code(0)
</span><del>-        , m_vm(&amp;vm)
</del><span class="cx"> #ifndef NDEBUG
</span><span class="cx">         , m_completed(false)
</span><span class="cx"> #endif
</span><span class="lines">@@ -95,7 +93,6 @@
</span><span class="cx">         : m_size(size)
</span><span class="cx">         , m_didAllocate(false)
</span><span class="cx">         , m_code(code)
</span><del>-        , m_vm(0)
</del><span class="cx"> #ifndef NDEBUG
</span><span class="cx">         , m_completed(false)
</span><span class="cx"> #endif
</span><span class="lines">@@ -253,8 +250,6 @@
</span><span class="cx">     bool wasAlreadyDisassembled() const { return m_alreadyDisassembled; }
</span><span class="cx">     void didAlreadyDisassemble() { m_alreadyDisassembled = true; }
</span><span class="cx"> 
</span><del>-    VM&amp; vm() { return *m_vm; }
-
</del><span class="cx"> private:
</span><span class="cx"> #if ENABLE(BRANCH_COMPACTION)
</span><span class="cx">     int executableOffsetFor(int location)
</span><span class="lines">@@ -305,7 +300,6 @@
</span><span class="cx"> #endif
</span><span class="cx">     bool m_didAllocate;
</span><span class="cx">     void* m_code;
</span><del>-    VM* m_vm;
</del><span class="cx"> #ifndef NDEBUG
</span><span class="cx">     bool m_completed;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreb3B3Compilecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/b3/B3Compile.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/b3/B3Compile.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/b3/B3Compile.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -38,7 +38,7 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC { namespace B3 {
</span><span class="cx"> 
</span><del>-Compilation compile(VM&amp; vm, Procedure&amp; proc, unsigned optLevel)
</del><ins>+Compilation compile(Procedure&amp; proc, unsigned optLevel)
</ins><span class="cx"> {
</span><span class="cx">     TimingScope timingScope(&quot;Compilation&quot;);
</span><span class="cx">     
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx">     
</span><span class="cx">     CCallHelpers jit;
</span><span class="cx">     generate(proc, jit);
</span><del>-    LinkBuffer linkBuffer(vm, jit, nullptr);
</del><ins>+    LinkBuffer linkBuffer(jit, nullptr);
</ins><span class="cx"> 
</span><span class="cx">     return Compilation(FINALIZE_CODE(linkBuffer, (&quot;B3::Compilation&quot;)), proc.releaseByproducts());
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreb3B3Compileh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/b3/B3Compile.h (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/b3/B3Compile.h        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/b3/B3Compile.h        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -45,7 +45,7 @@
</span><span class="cx"> // Then you keep the Compilation object alive for as long as you want to be able to run the code.
</span><span class="cx"> // If this API feels too high-level, you can use B3::generate() directly.
</span><span class="cx"> 
</span><del>-JS_EXPORT_PRIVATE Compilation compile(VM&amp;, Procedure&amp;, unsigned optLevel = 1);
</del><ins>+JS_EXPORT_PRIVATE Compilation compile(Procedure&amp;, unsigned optLevel = 1);
</ins><span class="cx"> 
</span><span class="cx"> } } // namespace JSC::B3
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreb3airtestaircpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/b3/air/testair.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/b3/air/testair.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/b3/air/testair.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -36,7 +36,6 @@
</span><span class="cx"> #include &quot;JSCInlines.h&quot;
</span><span class="cx"> #include &quot;LinkBuffer.h&quot;
</span><span class="cx"> #include &quot;PureNaN.h&quot;
</span><del>-#include &quot;VM.h&quot;
</del><span class="cx"> #include &lt;cmath&gt;
</span><span class="cx"> #include &lt;map&gt;
</span><span class="cx"> #include &lt;string&gt;
</span><span class="lines">@@ -80,14 +79,12 @@
</span><span class="cx">         CRASH();                                                        \
</span><span class="cx">     } while (false)
</span><span class="cx"> 
</span><del>-VM* vm;
-
</del><span class="cx"> std::unique_ptr&lt;B3::Compilation&gt; compile(B3::Procedure&amp; proc)
</span><span class="cx"> {
</span><span class="cx">     prepareForGeneration(proc.code());
</span><span class="cx">     CCallHelpers jit;
</span><span class="cx">     generate(proc.code(), jit);
</span><del>-    LinkBuffer linkBuffer(*vm, jit, nullptr);
</del><ins>+    LinkBuffer linkBuffer(jit, nullptr);
</ins><span class="cx"> 
</span><span class="cx">     return std::make_unique&lt;B3::Compilation&gt;(
</span><span class="cx">         FINALIZE_CODE(linkBuffer, (&quot;testair compilation&quot;)), proc.releaseByproducts());
</span><span class="lines">@@ -1849,7 +1846,6 @@
</span><span class="cx"> void run(const char* filter)
</span><span class="cx"> {
</span><span class="cx">     JSC::initializeThreading();
</span><del>-    vm = &amp;VM::create(LargeHeap).leakRef();
</del><span class="cx"> 
</span><span class="cx">     Deque&lt;RefPtr&lt;SharedTask&lt;void()&gt;&gt;&gt; tasks;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreb3testb3cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/b3/testb3.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/b3/testb3.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/b3/testb3.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -66,7 +66,6 @@
</span><span class="cx"> #include &quot;JSCInlines.h&quot;
</span><span class="cx"> #include &quot;LinkBuffer.h&quot;
</span><span class="cx"> #include &quot;PureNaN.h&quot;
</span><del>-#include &quot;VM.h&quot;
</del><span class="cx"> #include &lt;cmath&gt;
</span><span class="cx"> #include &lt;string&gt;
</span><span class="cx"> #include &lt;wtf/FastTLS.h&gt;
</span><span class="lines">@@ -118,11 +117,9 @@
</span><span class="cx">         CRASH(); \
</span><span class="cx">     } while (false)
</span><span class="cx"> 
</span><del>-VM* vm;
-
-std::unique_ptr&lt;Compilation&gt; compile(Procedure&amp; procedure, unsigned optLevel = 1)
</del><ins>+std::unique_ptr&lt;Compilation&gt; compileProc(Procedure&amp; procedure, unsigned optLevel = 1)
</ins><span class="cx"> {
</span><del>-    return std::make_unique&lt;Compilation&gt;(B3::compile(*vm, procedure, optLevel));
</del><ins>+    return std::make_unique&lt;Compilation&gt;(B3::compile(procedure, optLevel));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename T, typename... Arguments&gt;
</span><span class="lines">@@ -141,7 +138,7 @@
</span><span class="cx"> template&lt;typename T, typename... Arguments&gt;
</span><span class="cx"> T compileAndRun(Procedure&amp; procedure, Arguments... arguments)
</span><span class="cx"> {
</span><del>-    return invoke&lt;T&gt;(*compile(procedure), arguments...);
</del><ins>+    return invoke&lt;T&gt;(*compileProc(procedure), arguments...);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void lowerToAirForTesting(Procedure&amp; proc)
</span><span class="lines">@@ -312,7 +309,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;ConstPtrValue&gt;(proc, Origin(), &amp;x),
</span><span class="cx">             0, HeapRange(42), HeapRange(42)));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     if (isARM64())
</span><span class="cx">         checkUsesInstruction(*code, &quot;lda&quot;);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code) == 42);
</span><span class="lines">@@ -615,7 +612,7 @@
</span><span class="cx">             arg,
</span><span class="cx">             constZero));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc, 0);
</del><ins>+    auto code = compileProc(proc, 0);
</ins><span class="cx">     CHECK(invoke&lt;int64_t&gt;(*code, 0x0123456789abcdef) == 0x89abcdef);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -632,7 +629,7 @@
</span><span class="cx">             proc, Return, Origin(),
</span><span class="cx">             root-&gt;appendNew&lt;Value&gt;(proc, Add, Origin(), load, load));
</span><span class="cx"> 
</span><del>-        auto code = compile(proc, optLevel);
</del><ins>+        auto code = compileProc(proc, optLevel);
</ins><span class="cx">         CHECK(invoke&lt;int32_t&gt;(*code) == 42 * 2);
</span><span class="cx">     };
</span><span class="cx"> 
</span><span class="lines">@@ -984,7 +981,7 @@
</span><span class="cx">             proc, Return, Origin(),
</span><span class="cx">             root-&gt;appendNew&lt;Value&gt;(proc, Mul, Origin(), load, load));
</span><span class="cx"> 
</span><del>-        auto code = compile(proc, optLevel);
</del><ins>+        auto code = compileProc(proc, optLevel);
</ins><span class="cx">         CHECK(invoke&lt;int32_t&gt;(*code) == 42 * 42);
</span><span class="cx">     };
</span><span class="cx"> 
</span><span class="lines">@@ -1004,7 +1001,7 @@
</span><span class="cx">     Value* added = root-&gt;appendNew&lt;Value&gt;(proc, Add, Origin(), multiplied, arg2);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), added);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto testValues = int64Operands();
</span><span class="cx">     for (auto a : testValues) {
</span><span class="lines">@@ -1028,7 +1025,7 @@
</span><span class="cx">     Value* added = root-&gt;appendNew&lt;Value&gt;(proc, Add, Origin(), arg0, multiplied);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), added);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto testValues = int64Operands();
</span><span class="cx">     for (auto a : testValues) {
</span><span class="lines">@@ -1055,7 +1052,7 @@
</span><span class="cx">     Value* added = root-&gt;appendNew&lt;Value&gt;(proc, Add, Origin(), multiplied, arg2);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), added);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto testValues = int32Operands();
</span><span class="cx">     for (auto a : testValues) {
</span><span class="lines">@@ -1082,7 +1079,7 @@
</span><span class="cx">     Value* added = root-&gt;appendNew&lt;Value&gt;(proc, Add, Origin(), arg0, multiplied);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), added);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto testValues = int32Operands();
</span><span class="cx">     for (auto a : testValues) {
</span><span class="lines">@@ -1106,7 +1103,7 @@
</span><span class="cx">     Value* added = root-&gt;appendNew&lt;Value&gt;(proc, Sub, Origin(), multiplied, arg2);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), added);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto testValues = int64Operands();
</span><span class="cx">     for (auto a : testValues) {
</span><span class="lines">@@ -1130,7 +1127,7 @@
</span><span class="cx">     Value* added = root-&gt;appendNew&lt;Value&gt;(proc, Sub, Origin(), arg0, multiplied);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), added);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto testValues = int64Operands();
</span><span class="cx">     for (auto a : testValues) {
</span><span class="lines">@@ -1157,7 +1154,7 @@
</span><span class="cx">     Value* added = root-&gt;appendNew&lt;Value&gt;(proc, Sub, Origin(), multiplied, arg2);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), added);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto testValues = int32Operands();
</span><span class="cx">     for (auto a : testValues) {
</span><span class="lines">@@ -1184,7 +1181,7 @@
</span><span class="cx">     Value* added = root-&gt;appendNew&lt;Value&gt;(proc, Sub, Origin(), arg0, multiplied);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), added);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto testValues = int32Operands();
</span><span class="cx">     for (auto a : testValues) {
</span><span class="lines">@@ -1208,7 +1205,7 @@
</span><span class="cx">     Value* added = root-&gt;appendNew&lt;Value&gt;(proc, Sub, Origin(), zero, multiplied);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), added);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto testValues = int64Operands();
</span><span class="cx">     for (auto a : testValues) {
</span><span class="lines">@@ -1232,7 +1229,7 @@
</span><span class="cx">     Value* added = root-&gt;appendNew&lt;Value&gt;(proc, Sub, Origin(), zero, multiplied);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), added);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto testValues = int32Operands();
</span><span class="cx">     for (auto a : testValues) {
</span><span class="lines">@@ -4636,7 +4633,7 @@
</span><span class="cx">     Value* equal = tail-&gt;appendNew&lt;Value&gt;(proc, Equal, Origin(), doubleInput, arg2AsFRoundedDouble);
</span><span class="cx">     tail-&gt;appendNewControlValue(proc, Return, Origin(), equal);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     int32_t integerA = bitwise_cast&lt;int32_t&gt;(a);
</span><span class="cx">     double doubleB = b;
</span><span class="cx">     CHECK(invoke&lt;int64_t&gt;(*code, 1, integerA, doubleB) == (a == b));
</span><span class="lines">@@ -4685,7 +4682,7 @@
</span><span class="cx">     Value* floatResult = tail-&gt;appendNew&lt;Value&gt;(proc, DoubleToFloat, Origin(), doubleInput);
</span><span class="cx">     tail-&gt;appendNewControlValue(proc, Return, Origin(), floatResult);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(isIdentical(invoke&lt;float&gt;(*code, 1, bitwise_cast&lt;int32_t&gt;(value)), value + 42.5f));
</span><span class="cx">     CHECK(isIdentical(invoke&lt;float&gt;(*code, 0, bitwise_cast&lt;int32_t&gt;(value)), static_cast&lt;float&gt;(M_PI)));
</span><span class="cx"> }
</span><span class="lines">@@ -4740,7 +4737,7 @@
</span><span class="cx">             result);
</span><span class="cx">     tail-&gt;appendNewControlValue(proc, Return, Origin(), result);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(isIdentical(invoke&lt;float&gt;(*code, 1), 11.5f * 11.5f + static_cast&lt;float&gt;(bitwise_cast&lt;double&gt;(static_cast&lt;uint64_t&gt;(1))) + 11.5f));
</span><span class="cx">     CHECK(isIdentical(invoke&lt;float&gt;(*code, 0), 10.5f * 10.5f + static_cast&lt;float&gt;(bitwise_cast&lt;double&gt;(static_cast&lt;uint64_t&gt;(0))) + 10.5f));
</span><span class="cx"> }
</span><span class="lines">@@ -4780,7 +4777,7 @@
</span><span class="cx">     Value* floatResult = tail-&gt;appendNew&lt;Value&gt;(proc, DoubleToFloat, Origin(), finalAdd);
</span><span class="cx">     tail-&gt;appendNewControlValue(proc, Return, Origin(), floatResult);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(isIdentical(invoke&lt;float&gt;(*code, 1, bitwise_cast&lt;int32_t&gt;(value)), value + value));
</span><span class="cx">     CHECK(isIdentical(invoke&lt;float&gt;(*code, 0, bitwise_cast&lt;int32_t&gt;(value)), 42.5f + value));
</span><span class="cx"> }
</span><span class="lines">@@ -4829,7 +4826,7 @@
</span><span class="cx"> 
</span><span class="cx">     tail-&gt;appendNewControlValue(proc, Return, Origin(), doubleAdd);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(isIdentical(invoke&lt;double&gt;(*code, 1, bitwise_cast&lt;int32_t&gt;(value)), (value + value) + static_cast&lt;double&gt;(value)));
</span><span class="cx">     CHECK(isIdentical(invoke&lt;double&gt;(*code, 0, bitwise_cast&lt;int32_t&gt;(value)), static_cast&lt;double&gt;((42.5f + value) + 42.5f)));
</span><span class="cx"> }
</span><span class="lines">@@ -4869,7 +4866,7 @@
</span><span class="cx">     Value* floatResult = tail-&gt;appendNew&lt;Value&gt;(proc, DoubleToFloat, Origin(), finalAdd);
</span><span class="cx">     tail-&gt;appendNewControlValue(proc, Return, Origin(), floatResult);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(isIdentical(invoke&lt;float&gt;(*code, 1, bitwise_cast&lt;int32_t&gt;(value)), value + value));
</span><span class="cx">     CHECK(isIdentical(invoke&lt;float&gt;(*code, 0, bitwise_cast&lt;int32_t&gt;(value)), static_cast&lt;float&gt;(constValue + value)));
</span><span class="cx"> }
</span><span class="lines">@@ -5225,7 +5222,7 @@
</span><span class="cx">     Value* srcAsDouble = root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), src);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), srcAsDouble);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     for (auto testValue : int64Operands())
</span><span class="cx">         CHECK(isIdentical(invoke&lt;double&gt;(*code, testValue.value), static_cast&lt;double&gt;(testValue.value)));
</span><span class="cx"> }
</span><span class="lines">@@ -5238,7 +5235,7 @@
</span><span class="cx">     Value* srcAsFloat = root-&gt;appendNew&lt;Value&gt;(proc, IToF, Origin(), src);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), srcAsFloat);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     for (auto testValue : int64Operands())
</span><span class="cx">         CHECK(isIdentical(invoke&lt;float&gt;(*code, testValue.value), static_cast&lt;float&gt;(testValue.value)));
</span><span class="cx"> }
</span><span class="lines">@@ -5252,7 +5249,7 @@
</span><span class="cx">     Value* srcAsDouble = root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), src);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), srcAsDouble);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     for (auto testValue : int32Operands())
</span><span class="cx">         CHECK(isIdentical(invoke&lt;double&gt;(*code, testValue.value), static_cast&lt;double&gt;(testValue.value)));
</span><span class="cx"> }
</span><span class="lines">@@ -5266,7 +5263,7 @@
</span><span class="cx">     Value* srcAsFloat = root-&gt;appendNew&lt;Value&gt;(proc, IToF, Origin(), src);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), srcAsFloat);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     for (auto testValue : int32Operands())
</span><span class="cx">         CHECK(isIdentical(invoke&lt;float&gt;(*code, testValue.value), static_cast&lt;float&gt;(testValue.value)));
</span><span class="cx"> }
</span><span class="lines">@@ -5280,7 +5277,7 @@
</span><span class="cx">     Value* srcAsDouble = root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), loadedSrc);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), srcAsDouble);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     int64_t inMemoryValue;
</span><span class="cx">     for (auto testValue : int64Operands()) {
</span><span class="cx">         inMemoryValue = testValue.value;
</span><span class="lines">@@ -5298,7 +5295,7 @@
</span><span class="cx">     Value* srcAsFloat = root-&gt;appendNew&lt;Value&gt;(proc, IToF, Origin(), loadedSrc);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), srcAsFloat);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     int64_t inMemoryValue;
</span><span class="cx">     for (auto testValue : int64Operands()) {
</span><span class="cx">         inMemoryValue = testValue.value;
</span><span class="lines">@@ -5316,7 +5313,7 @@
</span><span class="cx">     Value* srcAsDouble = root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), loadedSrc);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), srcAsDouble);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     int32_t inMemoryValue;
</span><span class="cx">     for (auto testValue : int32Operands()) {
</span><span class="cx">         inMemoryValue = testValue.value;
</span><span class="lines">@@ -5334,7 +5331,7 @@
</span><span class="cx">     Value* srcAsFloat = root-&gt;appendNew&lt;Value&gt;(proc, IToF, Origin(), loadedSrc);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), srcAsFloat);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     int32_t inMemoryValue;
</span><span class="cx">     for (auto testValue : int32Operands()) {
</span><span class="cx">         inMemoryValue = testValue.value;
</span><span class="lines">@@ -5392,7 +5389,7 @@
</span><span class="cx">     Value* floatResult = root-&gt;appendNew&lt;Value&gt;(proc, DoubleToFloat, Origin(), srcAsDouble);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), floatResult);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     for (auto testValue : int64Operands())
</span><span class="cx">         CHECK(isIdentical(invoke&lt;float&gt;(*code, testValue.value), static_cast&lt;float&gt;(testValue.value)));
</span><span class="cx"> }
</span><span class="lines">@@ -5407,7 +5404,7 @@
</span><span class="cx">     Value* floatResult = root-&gt;appendNew&lt;Value&gt;(proc, DoubleToFloat, Origin(), srcAsDouble);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), floatResult);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     for (auto testValue : int32Operands())
</span><span class="cx">         CHECK(isIdentical(invoke&lt;float&gt;(*code, testValue.value), static_cast&lt;float&gt;(testValue.value)));
</span><span class="cx"> }
</span><span class="lines">@@ -5789,7 +5786,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     if (isARM64()) {
</span><span class="cx">         checkUsesInstruction(*code, &quot;lda&quot;);
</span><span class="cx">         checkUsesInstruction(*code, &quot;stl&quot;);
</span><span class="lines">@@ -5862,7 +5859,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     if (isARM64()) {
</span><span class="cx">         checkUsesInstruction(*code, &quot;lda&quot;);
</span><span class="cx">         checkUsesInstruction(*code, &quot;stl&quot;);
</span><span class="lines">@@ -5901,7 +5898,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     if (isARM64()) {
</span><span class="cx">         checkUsesInstruction(*code, &quot;lda&quot;);
</span><span class="cx">         checkUsesInstruction(*code, &quot;stl&quot;);
</span><span class="lines">@@ -5974,7 +5971,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     if (isARM64()) {
</span><span class="cx">         checkUsesInstruction(*code, &quot;lda&quot;);
</span><span class="cx">         checkUsesInstruction(*code, &quot;stl&quot;);
</span><span class="lines">@@ -6043,7 +6040,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     if (isARM64()) {
</span><span class="cx">         checkUsesInstruction(*code, &quot;lda&quot;);
</span><span class="cx">         checkUsesInstruction(*code, &quot;stl&quot;);
</span><span class="lines">@@ -7049,7 +7046,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 42) == 1);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 0) == 0);
</span><span class="cx"> }
</span><span class="lines">@@ -7074,7 +7071,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;int&gt;(*code, static_cast&lt;intptr_t&gt;(42)) == 1);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, static_cast&lt;intptr_t&gt;(0)) == 0);
</span><span class="cx"> }
</span><span class="lines">@@ -7107,7 +7104,7 @@
</span><span class="cx">     elseResult-&gt;setPhi(phi);
</span><span class="cx">     done-&gt;appendNewControlValue(proc, Return, Origin(), phi);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 42) == 1);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 0) == 0);
</span><span class="cx"> }
</span><span class="lines">@@ -7137,7 +7134,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 42) == 1);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 0) == 0);
</span><span class="cx"> }
</span><span class="lines">@@ -7167,7 +7164,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 42) == 1);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 0) == 0);
</span><span class="cx"> }
</span><span class="lines">@@ -7200,7 +7197,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 42) == 1);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 0) == 0);
</span><span class="cx"> }
</span><span class="lines">@@ -7230,7 +7227,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 1));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 42) == 1);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 0) == 0);
</span><span class="cx"> }
</span><span class="lines">@@ -7263,7 +7260,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 42) == 1);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 0) == 0);
</span><span class="cx"> }
</span><span class="lines">@@ -7293,7 +7290,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 1));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 42) == 1);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 0) == 0);
</span><span class="cx"> }
</span><span class="lines">@@ -7326,7 +7323,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 1));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 42) == 1);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 0) == 0);
</span><span class="cx"> }
</span><span class="lines">@@ -7741,7 +7738,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     intptr_t cond;
</span><span class="cx">     cond = 42;
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, &amp;cond) == 1);
</span><span class="lines">@@ -7771,7 +7768,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     int32_t cond;
</span><span class="cx">     cond = 42;
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, &amp;cond) == 1);
</span><span class="lines">@@ -7801,7 +7798,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     int8_t cond;
</span><span class="cx">     cond = -1;
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, &amp;cond) == 1);
</span><span class="lines">@@ -7831,7 +7828,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     uint8_t cond;
</span><span class="cx">     cond = 1;
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, &amp;cond) == 1);
</span><span class="lines">@@ -7861,7 +7858,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     int16_t cond;
</span><span class="cx">     cond = -1;
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, &amp;cond) == 1);
</span><span class="lines">@@ -7891,7 +7888,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     uint16_t cond;
</span><span class="cx">     cond = 1;
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, &amp;cond) == 1);
</span><span class="lines">@@ -7931,7 +7928,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     uint32_t cond;
</span><span class="cx">     cond = 0xffffffffU; // All bytes are 0xff.
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, &amp;cond - 2, (sizeof(uint32_t) * 2) &gt;&gt; logScale) == 1);
</span><span class="lines">@@ -8068,7 +8065,7 @@
</span><span class="cx"> 
</span><span class="cx">     current-&gt;appendNewControlValue(proc, Return, Origin(), vars[0]);
</span><span class="cx"> 
</span><del>-    compile(proc);
</del><ins>+    compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     double after = monotonicallyIncreasingTimeMS();
</span><span class="cx">     dataLog(toCString(&quot;    That took &quot;, after - before, &quot; ms.\n&quot;));
</span><span class="lines">@@ -8617,7 +8614,7 @@
</span><span class="cx">     root-&gt;appendNewControlValue(
</span><span class="cx">         proc, Return, Origin(), root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 0) == 0);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 1) == 42);
</span><span class="lines">@@ -8636,7 +8633,7 @@
</span><span class="cx">     root-&gt;appendNewControlValue(
</span><span class="cx">         proc, Return, Origin(), root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code) == 0);
</span><span class="cx"> }
</span><span class="lines">@@ -8662,7 +8659,7 @@
</span><span class="cx">     root-&gt;appendNewControlValue(
</span><span class="cx">         proc, Return, Origin(), root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code) == 42);
</span><span class="cx"> }
</span><span class="lines">@@ -8693,7 +8690,7 @@
</span><span class="cx">     root-&gt;appendNewControlValue(
</span><span class="cx">         proc, Return, Origin(), root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 42) == 0);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, 1000) == 0);
</span><span class="lines">@@ -8739,7 +8736,7 @@
</span><span class="cx">     root-&gt;appendNewControlValue(
</span><span class="cx">         proc, Return, Origin(), root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     int8_t value;
</span><span class="cx">     value = 42;
</span><span class="lines">@@ -8794,7 +8791,7 @@
</span><span class="cx">     root-&gt;appendNewControlValue(
</span><span class="cx">         proc, Return, Origin(), root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     int8_t value;
</span><span class="cx">     value = 42;
</span><span class="lines">@@ -8858,7 +8855,7 @@
</span><span class="cx">     root-&gt;appendNewControlValue(
</span><span class="cx">         proc, Return, Origin(), root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     int8_t value;
</span><span class="cx">     value = 42;
</span><span class="lines">@@ -8939,7 +8936,7 @@
</span><span class="cx">     elseCase-&gt;appendNewControlValue(
</span><span class="cx">         proc, Return, Origin(), elseCase-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 45));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     int8_t value;
</span><span class="cx"> 
</span><span class="lines">@@ -8994,7 +8991,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkAdd));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0) == 42.0);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 1) == 43.0);
</span><span class="lines">@@ -9030,7 +9027,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkAdd));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0) == 42.0);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 1) == 43.0);
</span><span class="lines">@@ -9065,7 +9062,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkAdd));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0) == 42.0);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 1) == 43.0);
</span><span class="lines">@@ -9102,7 +9099,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkAdd));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0, 42) == 42.0);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 1, 42) == 43.0);
</span><span class="lines">@@ -9135,7 +9132,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkAdd));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0ll, 42ll) == 42.0);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 1ll, 42ll) == 43.0);
</span><span class="lines">@@ -9156,7 +9153,7 @@
</span><span class="cx">         });
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), checkAdd);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code) == a + b);
</span><span class="cx"> }
</span><span class="lines">@@ -9177,7 +9174,7 @@
</span><span class="cx">         });
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), checkAdd);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code) == 42);
</span><span class="cx"> }
</span><span class="lines">@@ -9284,7 +9281,7 @@
</span><span class="cx"> 
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), checkAdd);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;int64_t&gt;(*code, 0ll) == 0);
</span><span class="cx">     CHECK(invoke&lt;int64_t&gt;(*code, 1ll) == 2);
</span><span class="lines">@@ -9315,7 +9312,7 @@
</span><span class="cx"> 
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), checkAdd);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;int32_t&gt;(*code, 0ll) == 0);
</span><span class="cx">     CHECK(invoke&lt;int32_t&gt;(*code, 1ll) == 2);
</span><span class="lines">@@ -9350,7 +9347,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkSub));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0) == -42.0);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 1) == -41.0);
</span><span class="lines">@@ -9392,7 +9389,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkSub));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0) == -static_cast&lt;double&gt;(badImm));
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, -1) == -static_cast&lt;double&gt;(badImm) - 1);
</span><span class="lines">@@ -9429,7 +9426,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkSub));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0, 42) == -42.0);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 1, 42) == -41.0);
</span><span class="lines">@@ -9467,7 +9464,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkSub));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0ll, 42ll) == -42.0);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 1ll, 42ll) == -41.0);
</span><span class="lines">@@ -9488,7 +9485,7 @@
</span><span class="cx">         });
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), checkSub);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code) == a - b);
</span><span class="cx"> }
</span><span class="lines">@@ -9509,7 +9506,7 @@
</span><span class="cx">         });
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), checkSub);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code) == 42);
</span><span class="cx"> }
</span><span class="lines">@@ -9538,7 +9535,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkNeg));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0) == 0.0);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 1) == -1.0);
</span><span class="lines">@@ -9568,7 +9565,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkNeg));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0ll) == 0.0);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 1ll) == -1.0);
</span><span class="lines">@@ -9605,7 +9602,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkMul));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0, 42) == 0.0);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 1, 42) == 42.0);
</span><span class="lines">@@ -9646,7 +9643,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkMul));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     left = 0;
</span><span class="cx">     right = 42;
</span><span class="lines">@@ -9693,7 +9690,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkMul));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0) == 0.0);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 1) == 2.0);
</span><span class="lines">@@ -9726,7 +9723,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkMul));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0, 42) == 0.0);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 1, 42) == 42.0);
</span><span class="lines">@@ -9747,7 +9744,7 @@
</span><span class="cx">         });
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), checkMul);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code) == a * b);
</span><span class="cx"> }
</span><span class="lines">@@ -9768,7 +9765,7 @@
</span><span class="cx">         });
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), checkMul);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code) == 42);
</span><span class="cx"> }
</span><span class="lines">@@ -9884,7 +9881,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, IToD, Origin(), checkMul));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0ll, 42ll) == 0.0);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 1ll, 42ll) == 0.0);
</span><span class="lines">@@ -10734,7 +10731,7 @@
</span><span class="cx">         switchValue-&gt;appendCase(SwitchCase(gap * i, FrequentedBlock(newBlock)));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     for (unsigned i = 0; i &lt; degree; ++i) {
</span><span class="cx">         CHECK(invoke&lt;int32_t&gt;(*code, i * gap, 42, 11) == ((i &amp; 1) ? 11 : 42));
</span><span class="lines">@@ -10777,7 +10774,7 @@
</span><span class="cx">         switchValue-&gt;appendCase(SwitchCase(gap * i, FrequentedBlock(newBlock)));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     for (unsigned i = 0; i &lt; degree; ++i) {
</span><span class="cx">         dataLog(&quot;i = &quot;, i, &quot;\n&quot;);
</span><span class="lines">@@ -10816,7 +10813,7 @@
</span><span class="cx">     switchValue-&gt;appendCase(SwitchCase(3, FrequentedBlock(otherTarget)));
</span><span class="cx">     switchValue-&gt;appendCase(SwitchCase(13, FrequentedBlock(otherTarget)));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     for (unsigned i = 0; i &lt; 20; ++i) {
</span><span class="cx">         int32_t expected = (i == 3 || i == 13) ? 42 : 5;
</span><span class="lines">@@ -10844,7 +10841,7 @@
</span><span class="cx">     switchValue-&gt;appendCase(SwitchCase(3, FrequentedBlock(otherTarget)));
</span><span class="cx">     switchValue-&gt;appendCase(SwitchCase(13, FrequentedBlock(otherTarget)));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     for (unsigned i = 0; i &lt; 20; ++i) {
</span><span class="cx">         int32_t expected = (i == 3 || i == 13) ? i : 42;
</span><span class="lines">@@ -11202,7 +11199,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR1),
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR2)));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, 42, 1, 2) == 1);
</span><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, 42, 642462, 32533) == 642462);
</span><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, 43, 1, 2) == 2);
</span><span class="lines">@@ -11221,7 +11218,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR1),
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR2)));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, 42, 1, 2) == 1);
</span><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, 42, 642462, 32533) == 642462);
</span><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, 0, 1, 2) == 2);
</span><span class="lines">@@ -11243,7 +11240,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR0),
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR1)));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, -1.0, 1.0, 1, 2) == 1);
</span><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, 42.5, 42.51, 642462, 32533) == 642462);
</span><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, PNaN, 0.0, 1, 2) == 2);
</span><span class="lines">@@ -11340,7 +11337,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), FPRInfo::argumentFPR0),
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), FPRInfo::argumentFPR1)));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 42, 1.5, 2.6) == 1.5);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 42, 642462.7, 32533.8) == 642462.7);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 43, 1.9, 2.0) == 2.0);
</span><span class="lines">@@ -11359,7 +11356,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), FPRInfo::argumentFPR0),
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), FPRInfo::argumentFPR1)));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 42, 1.5, 2.6) == 1.5);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 42, 642462.7, 32533.8) == 642462.7);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 0, 1.9, 2.0) == 2.0);
</span><span class="lines">@@ -11381,7 +11378,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), FPRInfo::argumentFPR2),
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), FPRInfo::argumentFPR3)));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;double&gt;(*code, -1.0, 1.0, 1.1, 2.2) == 1.1);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 42.5, 42.51, 642462.3, 32533.4) == 642462.3);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, PNaN, 0.0, 1.5, 2.6) == 2.6);
</span><span class="lines">@@ -11467,7 +11464,7 @@
</span><span class="cx">                     arg1),
</span><span class="cx">                 arg2,
</span><span class="cx">                 arg3));
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; left : floatingPointOperands&lt;double&gt;()) {
</span><span class="cx">             for (auto&amp; right : floatingPointOperands&lt;double&gt;()) {
</span><span class="lines">@@ -11494,7 +11491,7 @@
</span><span class="cx">         keepValuesLive-&gt;setGenerator([&amp;] (CCallHelpers&amp;, const StackmapGenerationParams&amp;) { });
</span><span class="cx"> 
</span><span class="cx">         root-&gt;appendNewControlValue(proc, Return, Origin(), result);
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; left : floatingPointOperands&lt;double&gt;()) {
</span><span class="cx">             for (auto&amp; right : floatingPointOperands&lt;double&gt;()) {
</span><span class="lines">@@ -11521,7 +11518,7 @@
</span><span class="cx">         keepValuesLive-&gt;setGenerator([&amp;] (CCallHelpers&amp;, const StackmapGenerationParams&amp;) { });
</span><span class="cx"> 
</span><span class="cx">         root-&gt;appendNewControlValue(proc, Return, Origin(), result);
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; left : floatingPointOperands&lt;double&gt;()) {
</span><span class="cx">             for (auto&amp; right : floatingPointOperands&lt;double&gt;()) {
</span><span class="lines">@@ -11549,7 +11546,7 @@
</span><span class="cx">         keepValuesLive-&gt;setGenerator([&amp;] (CCallHelpers&amp;, const StackmapGenerationParams&amp;) { });
</span><span class="cx"> 
</span><span class="cx">         root-&gt;appendNewControlValue(proc, Return, Origin(), result);
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; left : floatingPointOperands&lt;double&gt;()) {
</span><span class="cx">             for (auto&amp; right : floatingPointOperands&lt;double&gt;()) {
</span><span class="lines">@@ -11575,7 +11572,7 @@
</span><span class="cx">                     arg1),
</span><span class="cx">                 arg2,
</span><span class="cx">                 arg0));
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; left : floatingPointOperands&lt;double&gt;()) {
</span><span class="cx">             for (auto&amp; right : floatingPointOperands&lt;double&gt;()) {
</span><span class="lines">@@ -11601,7 +11598,7 @@
</span><span class="cx">         keepValuesLive-&gt;setGenerator([&amp;] (CCallHelpers&amp;, const StackmapGenerationParams&amp;) { });
</span><span class="cx"> 
</span><span class="cx">         root-&gt;appendNewControlValue(proc, Return, Origin(), result);
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; left : floatingPointOperands&lt;double&gt;()) {
</span><span class="cx">             for (auto&amp; right : floatingPointOperands&lt;double&gt;()) {
</span><span class="lines">@@ -11653,7 +11650,7 @@
</span><span class="cx">                     arg1),
</span><span class="cx">                 arg2,
</span><span class="cx">                 arg3));
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; left : floatingPointOperands&lt;float&gt;()) {
</span><span class="cx">             for (auto&amp; right : floatingPointOperands&lt;float&gt;()) {
</span><span class="lines">@@ -11688,7 +11685,7 @@
</span><span class="cx">         keepValuesLive-&gt;setGenerator([&amp;] (CCallHelpers&amp;, const StackmapGenerationParams&amp;) { });
</span><span class="cx"> 
</span><span class="cx">         root-&gt;appendNewControlValue(proc, Return, Origin(), result);
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; left : floatingPointOperands&lt;float&gt;()) {
</span><span class="cx">             for (auto&amp; right : floatingPointOperands&lt;float&gt;()) {
</span><span class="lines">@@ -11723,7 +11720,7 @@
</span><span class="cx">         keepValuesLive-&gt;setGenerator([&amp;] (CCallHelpers&amp;, const StackmapGenerationParams&amp;) { });
</span><span class="cx"> 
</span><span class="cx">         root-&gt;appendNewControlValue(proc, Return, Origin(), result);
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; left : floatingPointOperands&lt;float&gt;()) {
</span><span class="cx">             for (auto&amp; right : floatingPointOperands&lt;float&gt;()) {
</span><span class="lines">@@ -11759,7 +11756,7 @@
</span><span class="cx">         keepValuesLive-&gt;setGenerator([&amp;] (CCallHelpers&amp;, const StackmapGenerationParams&amp;) { });
</span><span class="cx"> 
</span><span class="cx">         root-&gt;appendNewControlValue(proc, Return, Origin(), result);
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; left : floatingPointOperands&lt;float&gt;()) {
</span><span class="cx">             for (auto&amp; right : floatingPointOperands&lt;float&gt;()) {
</span><span class="lines">@@ -11791,7 +11788,7 @@
</span><span class="cx">                     arg1),
</span><span class="cx">                 arg2,
</span><span class="cx">                 arg0));
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; left : floatingPointOperands&lt;float&gt;()) {
</span><span class="cx">             for (auto&amp; right : floatingPointOperands&lt;float&gt;()) {
</span><span class="lines">@@ -11823,7 +11820,7 @@
</span><span class="cx">         keepValuesLive-&gt;setGenerator([&amp;] (CCallHelpers&amp;, const StackmapGenerationParams&amp;) { });
</span><span class="cx"> 
</span><span class="cx">         root-&gt;appendNewControlValue(proc, Return, Origin(), result);
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; left : floatingPointOperands&lt;float&gt;()) {
</span><span class="cx">             for (auto&amp; right : floatingPointOperands&lt;float&gt;()) {
</span><span class="lines">@@ -11860,7 +11857,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR0),
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR1)));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, 1, 2) == (value == 42 ? 1 : 2));
</span><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, 642462, 32533) == (value == 42 ? 642462 : 32533));
</span><span class="cx"> }
</span><span class="lines">@@ -11883,7 +11880,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR1),
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR2)));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, 42, 1, 2) == 1);
</span><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, 42, 642462, 32533) == 642462);
</span><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, 43, 1, 2) == 2);
</span><span class="lines">@@ -11926,7 +11923,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(generationCount == 1);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, true) == 0);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, false) == 666);
</span><span class="lines">@@ -11997,7 +11994,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(generationCount == 1);
</span><span class="cx">     CHECK(generationCount2 == 1);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, true, true) == 0);
</span><span class="lines">@@ -12043,7 +12040,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, Add, Origin(), addValue, addValue2));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(generationCount == 1);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, true) == 0);
</span><span class="cx">     CHECK(invoke&lt;int&gt;(*code, false) == 666);
</span><span class="lines">@@ -12452,7 +12449,7 @@
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Jump, Origin(), FrequentedBlock(loop));
</span><span class="cx">     loop-&gt;appendNewControlValue(proc, Jump, Origin(), FrequentedBlock(loop));
</span><span class="cx"> 
</span><del>-    compile(proc);
</del><ins>+    compileProc(proc);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void testFoldPathEqual()
</span><span class="lines">@@ -12477,7 +12474,7 @@
</span><span class="cx">         elseBlock-&gt;appendNew&lt;Value&gt;(
</span><span class="cx">             proc, Equal, Origin(), arg, elseBlock-&gt;appendNew&lt;ConstPtrValue&gt;(proc, Origin(), 0)));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, 0) == 1);
</span><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, 1) == 0);
</span><span class="cx">     CHECK(invoke&lt;intptr_t&gt;(*code, 42) == 0);
</span><span class="lines">@@ -12494,7 +12491,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, Shl, Origin(), arg, arg));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto check = [&amp;] (int32_t value) {
</span><span class="cx">         CHECK(invoke&lt;int32_t&gt;(*code, value) == value &lt;&lt; (value &amp; 31));
</span><span class="lines">@@ -12517,7 +12514,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, SShr, Origin(), arg, arg));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto check = [&amp;] (int32_t value) {
</span><span class="cx">         CHECK(invoke&lt;int32_t&gt;(*code, value) == value &gt;&gt; (value &amp; 31));
</span><span class="lines">@@ -12540,7 +12537,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, ZShr, Origin(), arg, arg));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto check = [&amp;] (uint32_t value) {
</span><span class="cx">         CHECK(invoke&lt;uint32_t&gt;(*code, value) == value &gt;&gt; (value &amp; 31));
</span><span class="lines">@@ -12562,7 +12559,7 @@
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(
</span><span class="cx">             proc, Shl, Origin(), arg, root-&gt;appendNew&lt;Value&gt;(proc, Trunc, Origin(), arg)));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto check = [&amp;] (int64_t value) {
</span><span class="cx">         CHECK(invoke&lt;int64_t&gt;(*code, value) == value &lt;&lt; (value &amp; 63));
</span><span class="lines">@@ -12586,7 +12583,7 @@
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(
</span><span class="cx">             proc, SShr, Origin(), arg, root-&gt;appendNew&lt;Value&gt;(proc, Trunc, Origin(), arg)));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto check = [&amp;] (int64_t value) {
</span><span class="cx">         CHECK(invoke&lt;int64_t&gt;(*code, value) == value &gt;&gt; (value &amp; 63));
</span><span class="lines">@@ -12610,7 +12607,7 @@
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(
</span><span class="cx">             proc, ZShr, Origin(), arg, root-&gt;appendNew&lt;Value&gt;(proc, Trunc, Origin(), arg)));
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx"> 
</span><span class="cx">     auto check = [&amp;] (uint64_t value) {
</span><span class="cx">         CHECK(invoke&lt;uint64_t&gt;(*code, value) == value &gt;&gt; (value &amp; 63));
</span><span class="lines">@@ -12643,7 +12640,7 @@
</span><span class="cx"> 
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), patchpoint);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(numCalls == 1);
</span><span class="cx">     CHECK(invoke&lt;double&gt;(*code, 42.5) == 42.5);
</span><span class="cx"> }
</span><span class="lines">@@ -12676,7 +12673,7 @@
</span><span class="cx">     Value* result = root-&gt;appendNew&lt;Value&gt;(proc, Sub, Origin(), forceSpill, arg64);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), result);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;int64_t&gt;(*code, 0xffffffff00000000) == 0);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -12730,7 +12727,7 @@
</span><span class="cx">     elseResult-&gt;setPhi(phi);
</span><span class="cx">     tail-&gt;appendNewControlValue(proc, Return, Origin(), phi);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;uint64_t&gt;(*code, 1, 0xffffffff00000000) == 0);
</span><span class="cx">     CHECK(invoke&lt;uint64_t&gt;(*code, 0, 0xffffffff00000000) == 0xffffffff00000000);
</span><span class="cx"> 
</span><span class="lines">@@ -12812,7 +12809,7 @@
</span><span class="cx">         });
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), secondPatchpoint);
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK(invoke&lt;uint64_t&gt;(*code) == result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -12986,7 +12983,7 @@
</span><span class="cx">         proc, Return, Origin(),
</span><span class="cx">         stop-&gt;appendIntConstant(proc, Origin(), pointerType(), 0));
</span><span class="cx">     
</span><del>-    auto interpreter = compile(proc);
</del><ins>+    auto interpreter = compileProc(proc);
</ins><span class="cx">     
</span><span class="cx">     Vector&lt;intptr_t&gt; data;
</span><span class="cx">     Vector&lt;intptr_t&gt; code;
</span><span class="lines">@@ -13136,7 +13133,7 @@
</span><span class="cx">     
</span><span class="cx">     CCallHelpers jit;
</span><span class="cx">     generate(proc, jit);
</span><del>-    LinkBuffer linkBuffer(*vm, jit, nullptr);
</del><ins>+    LinkBuffer linkBuffer(jit, nullptr);
</ins><span class="cx">     CodeLocationLabel labelOne = linkBuffer.locationOf(proc.entrypointLabel(0));
</span><span class="cx">     CodeLocationLabel labelTwo = linkBuffer.locationOf(proc.entrypointLabel(1));
</span><span class="cx">     CodeLocationLabel labelThree = linkBuffer.locationOf(proc.entrypointLabel(2));
</span><span class="lines">@@ -13169,7 +13166,7 @@
</span><span class="cx">     
</span><span class="cx">     CCallHelpers jit;
</span><span class="cx">     generate(proc, jit);
</span><del>-    LinkBuffer linkBuffer(*vm, jit, nullptr);
</del><ins>+    LinkBuffer linkBuffer(jit, nullptr);
</ins><span class="cx">     CodeLocationLabel labelOne = linkBuffer.locationOf(proc.entrypointLabel(0));
</span><span class="cx">     CodeLocationLabel labelTwo = linkBuffer.locationOf(proc.entrypointLabel(1));
</span><span class="cx">     CodeLocationLabel labelThree = linkBuffer.locationOf(proc.entrypointLabel(2));
</span><span class="lines">@@ -13256,7 +13253,7 @@
</span><span class="cx">     
</span><span class="cx">     CCallHelpers jit;
</span><span class="cx">     generate(proc, jit);
</span><del>-    LinkBuffer linkBuffer(*vm, jit, nullptr);
</del><ins>+    LinkBuffer linkBuffer(jit, nullptr);
</ins><span class="cx">     CodeLocationLabel labelOne = linkBuffer.locationOf(proc.entrypointLabel(0));
</span><span class="cx">     CodeLocationLabel labelTwo = linkBuffer.locationOf(proc.entrypointLabel(1));
</span><span class="cx">     CodeLocationLabel labelThree = linkBuffer.locationOf(proc.entrypointLabel(2));
</span><span class="lines">@@ -13373,7 +13370,7 @@
</span><span class="cx">     
</span><span class="cx">     CCallHelpers jit;
</span><span class="cx">     generate(proc, jit);
</span><del>-    LinkBuffer linkBuffer(*vm, jit, nullptr);
</del><ins>+    LinkBuffer linkBuffer(jit, nullptr);
</ins><span class="cx">     CodeLocationLabel labelOne = linkBuffer.locationOf(proc.entrypointLabel(0));
</span><span class="cx">     CodeLocationLabel labelTwo = linkBuffer.locationOf(proc.entrypointLabel(1));
</span><span class="cx">     CodeLocationLabel labelThree = linkBuffer.locationOf(proc.entrypointLabel(2));
</span><span class="lines">@@ -13451,7 +13448,7 @@
</span><span class="cx">     
</span><span class="cx">     CCallHelpers jit;
</span><span class="cx">     generate(proc, jit);
</span><del>-    LinkBuffer linkBuffer(*vm, jit, nullptr);
</del><ins>+    LinkBuffer linkBuffer(jit, nullptr);
</ins><span class="cx">     CodeLocationLabel labelOne = linkBuffer.locationOf(proc.entrypointLabel(0));
</span><span class="cx">     CodeLocationLabel labelTwo = linkBuffer.locationOf(proc.entrypointLabel(1));
</span><span class="cx">     
</span><span class="lines">@@ -13500,7 +13497,7 @@
</span><span class="cx">         
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), patchpoint);
</span><span class="cx">         
</span><del>-        compile(proc);
</del><ins>+        compileProc(proc);
</ins><span class="cx">         CHECK(ranFirstPatchpoint);
</span><span class="cx">         CHECK(ranSecondPatchpoint);
</span><span class="cx">     };
</span><span class="lines">@@ -13614,7 +13611,7 @@
</span><span class="cx">     
</span><span class="cx">     slowPath-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), slowPath-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 20));
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK_EQ(invoke&lt;int&gt;(*code), 10);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -13702,7 +13699,7 @@
</span><span class="cx">     Options::maxB3TailDupBlockSize() = 0;
</span><span class="cx">     Options::maxB3TailDupBlockSuccessors() = 0;
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK_EQ(invoke&lt;int&gt;(*code, 1), 1);
</span><span class="cx">     CHECK_EQ(invoke&lt;int&gt;(*code, 0), 0);
</span><span class="cx">     CHECK_EQ(invoke&lt;int&gt;(*code, 42), 666);
</span><span class="lines">@@ -13776,7 +13773,7 @@
</span><span class="cx">     slowPathUpsilon-&gt;setPhi(phi);
</span><span class="cx">     continuation-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), phi);
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK_EQ(invoke&lt;int&gt;(*code, 0), 31);
</span><span class="cx">     CHECK_EQ(invoke&lt;int&gt;(*code, 1), 32);
</span><span class="cx">     CHECK_EQ(invoke&lt;int&gt;(*code, 41), 72);
</span><span class="lines">@@ -13794,7 +13791,7 @@
</span><span class="cx">     root-&gt;appendNew&lt;FenceValue&gt;(proc, Origin());
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), root-&gt;appendIntConstant(proc, Origin(), Int32, 42));
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK_EQ(invoke&lt;int&gt;(*code), 42);
</span><span class="cx">     if (isX86())
</span><span class="cx">         checkUsesInstruction(*code, &quot;lock or $0x0, (%rsp)&quot;);
</span><span class="lines">@@ -13813,7 +13810,7 @@
</span><span class="cx">     root-&gt;appendNew&lt;FenceValue&gt;(proc, Origin(), HeapRange::top(), HeapRange());
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), root-&gt;appendIntConstant(proc, Origin(), Int32, 42));
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK_EQ(invoke&lt;int&gt;(*code), 42);
</span><span class="cx">     checkDoesNotUseInstruction(*code, &quot;lock&quot;);
</span><span class="cx">     checkDoesNotUseInstruction(*code, &quot;mfence&quot;);
</span><span class="lines">@@ -13830,7 +13827,7 @@
</span><span class="cx">     root-&gt;appendNew&lt;FenceValue&gt;(proc, Origin(), HeapRange(), HeapRange::top());
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), root-&gt;appendIntConstant(proc, Origin(), Int32, 42));
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK_EQ(invoke&lt;int&gt;(*code), 42);
</span><span class="cx">     checkDoesNotUseInstruction(*code, &quot;lock&quot;);
</span><span class="cx">     checkDoesNotUseInstruction(*code, &quot;mfence&quot;);
</span><span class="lines">@@ -14055,7 +14052,7 @@
</span><span class="cx"> 
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin());
</span><span class="cx"> 
</span><del>-    compile(proc);
</del><ins>+    compileProc(proc);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void testPinRegisters()
</span><span class="lines">@@ -14090,7 +14087,7 @@
</span><span class="cx">                 CHECK_EQ(params[0].gpr(), GPRInfo::regCS0);
</span><span class="cx">             });
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin());
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         bool usesCSRs = false;
</span><span class="cx">         for (Air::BasicBlock* block : proc.code()) {
</span><span class="cx">             for (Air::Inst&amp; inst : *block) {
</span><span class="lines">@@ -14129,7 +14126,7 @@
</span><span class="cx">         root-&gt;appendNew&lt;ConstPtrValue&gt;(proc, Origin(), 100));
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), result);
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     checkUsesInstruction(*code, &quot;lea 0x64(%rdi,%rsi,4), %rax&quot;);
</span><span class="cx">     CHECK_EQ(invoke&lt;intptr_t&gt;(*code, 1, 2), (1 + (2 &lt;&lt; 2)) + 100);
</span><span class="cx"> }
</span><span class="lines">@@ -14151,7 +14148,7 @@
</span><span class="cx">         root-&gt;appendNew&lt;ConstPtrValue&gt;(proc, Origin(), 100));
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), result);
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     checkUsesInstruction(*code, &quot;lea 0x64(%rdi,%rsi,4), %rax&quot;);
</span><span class="cx">     CHECK_EQ(invoke&lt;intptr_t&gt;(*code, 1, 2), (1 + (2 &lt;&lt; 2)) + 100);
</span><span class="cx"> }
</span><span class="lines">@@ -14170,7 +14167,7 @@
</span><span class="cx">         root-&gt;appendNew&lt;ConstPtrValue&gt;(proc, Origin(), 100));
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), result);
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK_EQ(invoke&lt;intptr_t&gt;(*code, 1, 2), (1 + 2) + 100);
</span><span class="cx">     checkDisassembly(
</span><span class="cx">         *code,
</span><span class="lines">@@ -14195,7 +14192,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 2)));
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), result);
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     checkUsesInstruction(*code, &quot;lea (%rdi,%rsi,4), %rax&quot;);
</span><span class="cx">     CHECK_EQ(invoke&lt;intptr_t&gt;(*code, 1, 2), 1 + (2 &lt;&lt; 2));
</span><span class="cx"> }
</span><span class="lines">@@ -14214,7 +14211,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0)));
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), result);
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK_EQ(invoke&lt;intptr_t&gt;(*code, 1, 2), 1 + 2);
</span><span class="cx">     checkDisassembly(
</span><span class="cx">         *code,
</span><span class="lines">@@ -14239,7 +14236,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 1)));
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), result);
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     checkUsesInstruction(*code, &quot;lea (%rdi,%rsi,2), %rax&quot;);
</span><span class="cx">     CHECK_EQ(invoke&lt;intptr_t&gt;(*code, 1, 2), 1 + (2 &lt;&lt; 1));
</span><span class="cx"> }
</span><span class="lines">@@ -14258,7 +14255,7 @@
</span><span class="cx">         root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR0));
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), result);
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     checkUsesInstruction(*code, &quot;lea (%rdi,%rsi,4), %rax&quot;);
</span><span class="cx">     CHECK_EQ(invoke&lt;intptr_t&gt;(*code, 1, 2), 1 + (2 &lt;&lt; 2));
</span><span class="cx"> }
</span><span class="lines">@@ -14277,7 +14274,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 3)));
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), result);
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     checkUsesInstruction(*code, &quot;lea (%rdi,%rsi,8), %rax&quot;);
</span><span class="cx">     CHECK_EQ(invoke&lt;intptr_t&gt;(*code, 1, 2), 1 + (2 &lt;&lt; 3));
</span><span class="cx"> }
</span><span class="lines">@@ -14296,7 +14293,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 32)));
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), result);
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK_EQ(invoke&lt;intptr_t&gt;(*code, 1, 2), 1 + (static_cast&lt;intptr_t&gt;(2) &lt;&lt; static_cast&lt;intptr_t&gt;(32)));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -14314,7 +14311,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 64)));
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), result);
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK_EQ(invoke&lt;intptr_t&gt;(*code, 1, 2), 1 + 2);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -14332,7 +14329,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 65)));
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin(), result);
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK_EQ(invoke&lt;intptr_t&gt;(*code, 1, 2), 1 + (2 &lt;&lt; 1));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -14396,7 +14393,7 @@
</span><span class="cx">                     proc, Shl, Origin(),
</span><span class="cx">                     root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR1),
</span><span class="cx">                     root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 2)))));
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     if (isX86())
</span><span class="cx">         checkUsesInstruction(*code, &quot;(%rdi,%rsi,4)&quot;);
</span><span class="cx">     int32_t value = 12341234;
</span><span class="lines">@@ -14420,7 +14417,7 @@
</span><span class="cx">                     proc, Shl, Origin(),
</span><span class="cx">                     root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR1),
</span><span class="cx">                     root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 32)))));
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     int32_t value = 12341234;
</span><span class="cx">     char* ptr = bitwise_cast&lt;char*&gt;(&amp;value);
</span><span class="cx">     for (unsigned i = 0; i &lt; 10; ++i)
</span><span class="lines">@@ -14437,7 +14434,7 @@
</span><span class="cx">         root-&gt;appendNew&lt;ConstPtrValue&gt;(proc, Origin(), 0x123423453456llu + 35));
</span><span class="cx">     root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin());
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     bool found = false;
</span><span class="cx">     for (Air::BasicBlock* block : proc.code()) {
</span><span class="cx">         for (Air::Inst&amp; inst : *block) {
</span><span class="lines">@@ -14493,7 +14490,7 @@
</span><span class="cx">         
</span><span class="cx">         done-&gt;appendNew&lt;Value&gt;(proc, Return, Origin());
</span><span class="cx">         
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 42;
</span><span class="cx">         value[1] = 13;
</span><span class="lines">@@ -14524,7 +14521,7 @@
</span><span class="cx">         
</span><span class="cx">         done-&gt;appendNew&lt;Value&gt;(proc, Return, Origin());
</span><span class="cx">         
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 42;
</span><span class="cx">         value[1] = 13;
</span><span class="lines">@@ -14558,7 +14555,7 @@
</span><span class="cx">         
</span><span class="cx">         fail-&gt;appendNew&lt;Value&gt;(proc, Return, Origin());
</span><span class="cx">         
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 42;
</span><span class="cx">         value[1] = 13;
</span><span class="lines">@@ -14600,7 +14597,7 @@
</span><span class="cx">         
</span><span class="cx">         fail-&gt;appendNew&lt;Value&gt;(proc, Return, Origin());
</span><span class="cx">         
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 42;
</span><span class="cx">         value[1] = 13;
</span><span class="lines">@@ -14626,7 +14623,7 @@
</span><span class="cx">                 root-&gt;appendIntConstant(proc, Origin(), type, 0xbeef),
</span><span class="cx">                 root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR0)));
</span><span class="cx">         
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 42;
</span><span class="cx">         value[1] = 13;
</span><span class="lines">@@ -14655,7 +14652,7 @@
</span><span class="cx">                     root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR0)),
</span><span class="cx">                 root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0)));
</span><span class="cx">         
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 42;
</span><span class="cx">         value[1] = 13;
</span><span class="lines">@@ -14682,7 +14679,7 @@
</span><span class="cx">                 root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR0),
</span><span class="cx">                 42));
</span><span class="cx">         
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 42;
</span><span class="cx">         value[1] = 13;
</span><span class="lines">@@ -14746,7 +14743,7 @@
</span><span class="cx">         
</span><span class="cx">         fail-&gt;appendNew&lt;Value&gt;(proc, Return, Origin());
</span><span class="cx">         
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 42;
</span><span class="cx">         value[1] = 13;
</span><span class="lines">@@ -14787,7 +14784,7 @@
</span><span class="cx">         
</span><span class="cx">         fail-&gt;appendNew&lt;Value&gt;(proc, Return, Origin());
</span><span class="cx">         
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 42;
</span><span class="cx">         value[1] = 13;
</span><span class="lines">@@ -14828,7 +14825,7 @@
</span><span class="cx">         
</span><span class="cx">         fail-&gt;appendNew&lt;Value&gt;(proc, Return, Origin());
</span><span class="cx">         
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 42;
</span><span class="cx">         value[1] = 13;
</span><span class="lines">@@ -14853,7 +14850,7 @@
</span><span class="cx">                 root-&gt;appendIntConstant(proc, Origin(), type, 0xbeef),
</span><span class="cx">                 root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR0)));
</span><span class="cx">         
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 42;
</span><span class="cx">         value[1] = 13;
</span><span class="lines">@@ -14885,7 +14882,7 @@
</span><span class="cx">                     root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR0)),
</span><span class="cx">                 root-&gt;appendIntConstant(proc, Origin(), type, 42)));
</span><span class="cx">         
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 42;
</span><span class="cx">         value[1] = 13;
</span><span class="lines">@@ -14916,7 +14913,7 @@
</span><span class="cx">                     root-&gt;appendIntConstant(proc, Origin(), type, 42)),
</span><span class="cx">                 root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0)));
</span><span class="cx">             
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 42;
</span><span class="cx">         value[1] = 13;
</span><span class="lines">@@ -14997,7 +14994,7 @@
</span><span class="cx">                 root-&gt;appendIntConstant(proc, Origin(), type, 1),
</span><span class="cx">                 root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR0)));
</span><span class="cx">     
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 5;
</span><span class="cx">         value[1] = 100;
</span><span class="lines">@@ -15017,7 +15014,7 @@
</span><span class="cx">                 root-&gt;appendIntConstant(proc, Origin(), type, 42),
</span><span class="cx">                 root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR0)));
</span><span class="cx">     
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 5;
</span><span class="cx">         value[1] = 100;
</span><span class="lines">@@ -15036,7 +15033,7 @@
</span><span class="cx">             root-&gt;appendNew&lt;ArgumentRegValue&gt;(proc, Origin(), GPRInfo::argumentGPR0));
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin());
</span><span class="cx">     
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 5;
</span><span class="cx">         value[1] = 100;
</span><span class="lines">@@ -15056,7 +15053,7 @@
</span><span class="cx">             0, HeapRange(42), HeapRange());
</span><span class="cx">         root-&gt;appendNew&lt;Value&gt;(proc, Return, Origin());
</span><span class="cx">     
</span><del>-        auto code = compile(proc);
</del><ins>+        auto code = compileProc(proc);
</ins><span class="cx">         T value[2];
</span><span class="cx">         value[0] = 5;
</span><span class="cx">         value[1] = 100;
</span><span class="lines">@@ -15089,7 +15086,7 @@
</span><span class="cx">     values[0] = 42;
</span><span class="cx">     values[1] = 0xbeef;
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     if (isARM64())
</span><span class="cx">         checkUsesInstruction(*code, &quot;eor&quot;);
</span><span class="cx">     else if (isX86()) {
</span><span class="lines">@@ -15119,7 +15116,7 @@
</span><span class="cx">     values[0] = 42;
</span><span class="cx">     values[1] = 0xbeef;
</span><span class="cx">     
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     if (isARM64())
</span><span class="cx">         checkUsesInstruction(*code, &quot;eor&quot;);
</span><span class="cx">     else if (isX86()) {
</span><span class="lines">@@ -15154,7 +15151,7 @@
</span><span class="cx">     Value* result = root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 0x42);
</span><span class="cx">     root-&gt;appendNewControlValue(proc, Return, Origin(), result);
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     CHECK_EQ(invoke&lt;int32_t&gt;(*code, 1, 2 + offset), 0x42);
</span><span class="cx">     CHECK_EQ(invoke&lt;int32_t&gt;(*code, 3, 2 + offset), 42);
</span><span class="cx">     CHECK_EQ(invoke&lt;int32_t&gt;(*code, 2, 2 + offset), 42);
</span><span class="lines">@@ -15205,7 +15202,7 @@
</span><span class="cx">     incUpsilon-&gt;setPhi(indexPhi);
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-    auto code = compile(proc);
</del><ins>+    auto code = compileProc(proc);
</ins><span class="cx">     invoke&lt;void&gt;(*code, loopCount, numToStore, values.data());
</span><span class="cx">     for (unsigned value : values)
</span><span class="cx">         CHECK_EQ(numToStore, value);
</span><span class="lines">@@ -15318,7 +15315,6 @@
</span><span class="cx"> void run(const char* filter)
</span><span class="cx"> {
</span><span class="cx">     JSC::initializeThreading();
</span><del>-    vm = &amp;VM::create(LargeHeap).leakRef();
</del><span class="cx"> 
</span><span class="cx">     Deque&lt;RefPtr&lt;SharedTask&lt;void()&gt;&gt;&gt; tasks;
</span><span class="cx"> 
</span><span class="lines">@@ -15999,7 +15995,7 @@
</span><span class="cx">     RUN(testTrunc((static_cast&lt;int64_t&gt;(1) &lt;&lt; 40) + 42));
</span><span class="cx">     RUN(testAdd1(45));
</span><span class="cx">     RUN(testAdd1Ptr(51));
</span><del>-    RUN(testAdd1Ptr(bitwise_cast&lt;intptr_t&gt;(vm)));
</del><ins>+    RUN(testAdd1Ptr(static_cast&lt;intptr_t&gt;(0xbaadbeef)));
</ins><span class="cx">     RUN(testNeg32(52));
</span><span class="cx">     RUN(testNegPtr(53));
</span><span class="cx">     RUN(testStoreAddLoad32(46));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodePolymorphicAccesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -514,7 +514,7 @@
</span><span class="cx">         callSiteIndexForExceptionHandling = state.callSiteIndexForExceptionHandling();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    LinkBuffer linkBuffer(vm, jit, codeBlock, JITCompilationCanFail);
</del><ins>+    LinkBuffer linkBuffer(jit, codeBlock, JITCompilationCanFail);
</ins><span class="cx">     if (linkBuffer.didFailToAllocate()) {
</span><span class="cx">         if (verbose)
</span><span class="cx">             dataLog(&quot;Did fail to allocate.\n&quot;);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGJITCompilercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGJITCompiler.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGJITCompiler.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/dfg/DFGJITCompiler.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -394,7 +394,7 @@
</span><span class="cx">     m_speculative-&gt;createOSREntries();
</span><span class="cx">     setEndOfCode();
</span><span class="cx"> 
</span><del>-    auto linkBuffer = std::make_unique&lt;LinkBuffer&gt;(*vm(), *this, m_codeBlock, JITCompilationCanFail);
</del><ins>+    auto linkBuffer = std::make_unique&lt;LinkBuffer&gt;(*this, m_codeBlock, JITCompilationCanFail);
</ins><span class="cx">     if (linkBuffer-&gt;didFailToAllocate()) {
</span><span class="cx">         m_graph.m_plan.finalizer = std::make_unique&lt;FailedFinalizer&gt;(m_graph.m_plan);
</span><span class="cx">         return;
</span><span class="lines">@@ -488,7 +488,7 @@
</span><span class="cx">     setEndOfCode();
</span><span class="cx"> 
</span><span class="cx">     // === Link ===
</span><del>-    auto linkBuffer = std::make_unique&lt;LinkBuffer&gt;(*vm(), *this, m_codeBlock, JITCompilationCanFail);
</del><ins>+    auto linkBuffer = std::make_unique&lt;LinkBuffer&gt;(*this, m_codeBlock, JITCompilationCanFail);
</ins><span class="cx">     if (linkBuffer-&gt;didFailToAllocate()) {
</span><span class="cx">         m_graph.m_plan.finalizer = std::make_unique&lt;FailedFinalizer&gt;(m_graph.m_plan);
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGLazyJSValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGLazyJSValue.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGLazyJSValue.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/dfg/DFGLazyJSValue.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -229,7 +229,7 @@
</span><span class="cx">     
</span><span class="cx">     jit.addLinkTask(
</span><span class="cx">         [codeBlock, label, thisValue] (LinkBuffer&amp; linkBuffer) {
</span><del>-            JSValue realValue = thisValue.getValue(linkBuffer.vm());
</del><ins>+            JSValue realValue = thisValue.getValue(*codeBlock-&gt;vm());
</ins><span class="cx">             RELEASE_ASSERT(realValue.isCell());
</span><span class="cx"> 
</span><span class="cx">             codeBlock-&gt;addConstant(realValue);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGOSRExitCompilercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompiler.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompiler.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompiler.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -173,7 +173,7 @@
</span><span class="cx"> 
</span><span class="cx">         exitCompiler.compileExit(*vm, exit, operands, recovery);
</span><span class="cx">         
</span><del>-        LinkBuffer patchBuffer(*vm, jit, codeBlock);
</del><ins>+        LinkBuffer patchBuffer(jit, codeBlock);
</ins><span class="cx">         exit.m_code = FINALIZE_CODE_IF(
</span><span class="cx">             shouldDumpDisassembly() || Options::verboseOSR(),
</span><span class="cx">             patchBuffer,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJIT32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -1012,7 +1012,7 @@
</span><span class="cx">         m_jit.addPtr(TrustedImm32(requiredBytes), JITCompiler::stackPointerRegister);
</span><span class="cx">         m_jit.load32(JITCompiler::calleeFrameSlot(CallFrameSlot::callee).withOffset(PayloadOffset), GPRInfo::regT0);
</span><span class="cx">         m_jit.load32(JITCompiler::calleeFrameSlot(CallFrameSlot::callee).withOffset(TagOffset), GPRInfo::regT1);
</span><del>-        m_jit.emitDumbVirtualCall(info);
</del><ins>+        m_jit.emitDumbVirtualCall(*m_jit.vm(), info);
</ins><span class="cx">         
</span><span class="cx">         done.link(&amp;m_jit);
</span><span class="cx">         setResultAndResetStack();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJIT64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -966,7 +966,7 @@
</span><span class="cx">         // This is the part where we meant to make a normal call. Oops.
</span><span class="cx">         m_jit.addPtr(TrustedImm32(requiredBytes), JITCompiler::stackPointerRegister);
</span><span class="cx">         m_jit.load64(JITCompiler::calleeFrameSlot(CallFrameSlot::callee), GPRInfo::regT0);
</span><del>-        m_jit.emitDumbVirtualCall(callLinkInfo);
</del><ins>+        m_jit.emitDumbVirtualCall(*m_jit.vm(), callLinkInfo);
</ins><span class="cx">         
</span><span class="cx">         done.link(&amp;m_jit);
</span><span class="cx">         setResultAndResetStack();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGThunkscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGThunks.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGThunks.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/dfg/DFGThunks.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -93,7 +93,7 @@
</span><span class="cx">     
</span><span class="cx">     jit.jump(MacroAssembler::AbsoluteAddress(&amp;vm-&gt;osrExitJumpDestination));
</span><span class="cx">     
</span><del>-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     
</span><span class="cx">     patchBuffer.link(functionCall, compileOSRExit);
</span><span class="cx">     
</span><span class="lines">@@ -140,7 +140,7 @@
</span><span class="cx"> 
</span><span class="cx">     jit.jump(GPRInfo::regT1);
</span><span class="cx">     
</span><del>-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;DFG OSR entry thunk&quot;));
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLCompilecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -141,8 +141,7 @@
</span><span class="cx">             linkBuffer.link(call, FunctionPtr(lookupExceptionHandler));
</span><span class="cx">         });
</span><span class="cx"> 
</span><del>-    state.finalizer-&gt;b3CodeLinkBuffer = std::make_unique&lt;LinkBuffer&gt;(
-        vm, jit, codeBlock, JITCompilationCanFail);
</del><ins>+    state.finalizer-&gt;b3CodeLinkBuffer = std::make_unique&lt;LinkBuffer&gt;(jit, codeBlock, JITCompilationCanFail);
</ins><span class="cx">     if (state.finalizer-&gt;b3CodeLinkBuffer-&gt;didFailToAllocate()) {
</span><span class="cx">         state.allocationFailed = true;
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLLazySlowPathcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -55,8 +55,6 @@
</span><span class="cx"> {
</span><span class="cx">     RELEASE_ASSERT(!m_stub);
</span><span class="cx"> 
</span><del>-    VM&amp; vm = *codeBlock-&gt;vm();
-
</del><span class="cx">     CCallHelpers jit(codeBlock);
</span><span class="cx">     GenerationParams params;
</span><span class="cx">     CCallHelpers::JumpList exceptionJumps;
</span><span class="lines">@@ -65,7 +63,7 @@
</span><span class="cx"> 
</span><span class="cx">     m_generator-&gt;run(jit, params);
</span><span class="cx"> 
</span><del>-    LinkBuffer linkBuffer(vm, jit, codeBlock, JITCompilationMustSucceed);
</del><ins>+    LinkBuffer linkBuffer(jit, codeBlock, JITCompilationMustSucceed);
</ins><span class="cx">     linkBuffer.link(params.doneJumps, m_done);
</span><span class="cx">     if (m_exceptionTarget)
</span><span class="cx">         linkBuffer.link(exceptionJumps, m_exceptionTarget);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLLinkcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLLink.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLLink.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/ftl/FTLLink.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -162,7 +162,7 @@
</span><span class="cx">             jit.emitFunctionEpilogue();
</span><span class="cx">             mainPathJumps.append(jit.jump());
</span><span class="cx"> 
</span><del>-            linkBuffer = std::make_unique&lt;LinkBuffer&gt;(vm, jit, codeBlock, JITCompilationCanFail);
</del><ins>+            linkBuffer = std::make_unique&lt;LinkBuffer&gt;(jit, codeBlock, JITCompilationCanFail);
</ins><span class="cx">             if (linkBuffer-&gt;didFailToAllocate()) {
</span><span class="cx">                 state.allocationFailed = true;
</span><span class="cx">                 return;
</span><span class="lines">@@ -186,7 +186,7 @@
</span><span class="cx">         jit.emitFunctionEpilogue();
</span><span class="cx">         CCallHelpers::Jump mainPathJump = jit.jump();
</span><span class="cx">         
</span><del>-        linkBuffer = std::make_unique&lt;LinkBuffer&gt;(vm, jit, codeBlock, JITCompilationCanFail);
</del><ins>+        linkBuffer = std::make_unique&lt;LinkBuffer&gt;(jit, codeBlock, JITCompilationCanFail);
</ins><span class="cx">         if (linkBuffer-&gt;didFailToAllocate()) {
</span><span class="cx">             state.allocationFailed = true;
</span><span class="cx">             return;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLLowerDFGToB3cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -5981,6 +5981,7 @@
</span><span class="cx"> 
</span><span class="cx">         CodeOrigin codeOrigin = codeOriginDescriptionOfCallSite();
</span><span class="cx">         State* state = &amp;m_ftlState;
</span><ins>+        VM* vm = &amp;this-&gt;vm();
</ins><span class="cx">         patchpoint-&gt;setGenerator(
</span><span class="cx">             [=] (CCallHelpers&amp; jit, const StackmapGenerationParams&amp; params) {
</span><span class="cx">                 AllowMacroScratchRegisterUsage allowScratch(jit);
</span><span class="lines">@@ -6019,7 +6020,7 @@
</span><span class="cx">                 jit.addLinkTask(
</span><span class="cx">                     [=] (LinkBuffer&amp; linkBuffer) {
</span><span class="cx">                         MacroAssemblerCodePtr linkCall =
</span><del>-                            linkBuffer.vm().getCTIStub(linkCallThunkGenerator).code();
</del><ins>+                            vm-&gt;getCTIStub(linkCallThunkGenerator).code();
</ins><span class="cx">                         linkBuffer.link(slowCall, FunctionPtr(linkCall.executableAddress()));
</span><span class="cx"> 
</span><span class="cx">                         callLinkInfo-&gt;setCallLocations(
</span><span class="lines">@@ -6278,6 +6279,7 @@
</span><span class="cx"> 
</span><span class="cx">         CodeOrigin codeOrigin = codeOriginDescriptionOfCallSite();
</span><span class="cx">         State* state = &amp;m_ftlState;
</span><ins>+        VM* vm = &amp;this-&gt;vm();
</ins><span class="cx">         patchpoint-&gt;setGenerator(
</span><span class="cx">             [=] (CCallHelpers&amp; jit, const StackmapGenerationParams&amp; params) {
</span><span class="cx">                 AllowMacroScratchRegisterUsage allowScratch(jit);
</span><span class="lines">@@ -6329,7 +6331,7 @@
</span><span class="cx">                 jit.addLinkTask(
</span><span class="cx">                     [=] (LinkBuffer&amp; linkBuffer) {
</span><span class="cx">                         MacroAssemblerCodePtr linkCall =
</span><del>-                            linkBuffer.vm().getCTIStub(linkCallThunkGenerator).code();
</del><ins>+                            vm-&gt;getCTIStub(linkCallThunkGenerator).code();
</ins><span class="cx">                         linkBuffer.link(slowCall, FunctionPtr(linkCall.executableAddress()));
</span><span class="cx"> 
</span><span class="cx">                         callLinkInfo-&gt;setCallLocations(
</span><span class="lines">@@ -6403,6 +6405,7 @@
</span><span class="cx">         
</span><span class="cx">         CodeOrigin codeOrigin = codeOriginDescriptionOfCallSite();
</span><span class="cx">         State* state = &amp;m_ftlState;
</span><ins>+        VM* vm = &amp;this-&gt;vm();
</ins><span class="cx">         patchpoint-&gt;setGenerator(
</span><span class="cx">             [=] (CCallHelpers&amp; jit, const StackmapGenerationParams&amp; params) {
</span><span class="cx">                 AllowMacroScratchRegisterUsage allowScratch(jit);
</span><span class="lines">@@ -6456,7 +6459,7 @@
</span><span class="cx">                 auto callWithExceptionCheck = [&amp;] (void* callee) {
</span><span class="cx">                     jit.move(CCallHelpers::TrustedImmPtr(callee), GPRInfo::nonPreservedNonArgumentGPR);
</span><span class="cx">                     jit.call(GPRInfo::nonPreservedNonArgumentGPR);
</span><del>-                    exceptions-&gt;append(jit.emitExceptionCheck(state-&gt;vm(), AssemblyHelpers::NormalExceptionCheck, AssemblyHelpers::FarJumpWidth));
</del><ins>+                    exceptions-&gt;append(jit.emitExceptionCheck(*vm, AssemblyHelpers::NormalExceptionCheck, AssemblyHelpers::FarJumpWidth));
</ins><span class="cx">                 };
</span><span class="cx"> 
</span><span class="cx">                 CCallHelpers::JumpList slowCase;
</span><span class="lines">@@ -6582,7 +6585,7 @@
</span><span class="cx">                 jit.addLinkTask(
</span><span class="cx">                     [=] (LinkBuffer&amp; linkBuffer) {
</span><span class="cx">                         MacroAssemblerCodePtr linkCall =
</span><del>-                            linkBuffer.vm().getCTIStub(linkCallThunkGenerator).code();
</del><ins>+                            vm-&gt;getCTIStub(linkCallThunkGenerator).code();
</ins><span class="cx">                         linkBuffer.link(slowCall, FunctionPtr(linkCall.executableAddress()));
</span><span class="cx">                         
</span><span class="cx">                         callLinkInfo-&gt;setCallLocations(
</span><span class="lines">@@ -6672,6 +6675,7 @@
</span><span class="cx">         
</span><span class="cx">         CodeOrigin codeOrigin = codeOriginDescriptionOfCallSite();
</span><span class="cx">         State* state = &amp;m_ftlState;
</span><ins>+        VM* vm = &amp;this-&gt;vm();
</ins><span class="cx">         patchpoint-&gt;setGenerator(
</span><span class="cx">             [=] (CCallHelpers&amp; jit, const StackmapGenerationParams&amp; params) {
</span><span class="cx">                 AllowMacroScratchRegisterUsage allowScratch(jit);
</span><span class="lines">@@ -6763,7 +6767,7 @@
</span><span class="cx">                 auto callWithExceptionCheck = [&amp;] (void* callee) {
</span><span class="cx">                     jit.move(CCallHelpers::TrustedImmPtr(callee), GPRInfo::nonPreservedNonArgumentGPR);
</span><span class="cx">                     jit.call(GPRInfo::nonPreservedNonArgumentGPR);
</span><del>-                    exceptions-&gt;append(jit.emitExceptionCheck(state-&gt;vm(), AssemblyHelpers::NormalExceptionCheck, AssemblyHelpers::FarJumpWidth));
</del><ins>+                    exceptions-&gt;append(jit.emitExceptionCheck(*vm, AssemblyHelpers::NormalExceptionCheck, AssemblyHelpers::FarJumpWidth));
</ins><span class="cx">                 };
</span><span class="cx"> 
</span><span class="cx">                 unsigned originalStackHeight = params.proc().frameSize();
</span><span class="lines">@@ -6779,7 +6783,7 @@
</span><span class="cx">                         inlineCallFrame = node-&gt;origin.semantic.inlineCallFrame;
</span><span class="cx"> 
</span><span class="cx">                     // emitSetupVarargsFrameFastCase modifies the stack pointer if it succeeds.
</span><del>-                    emitSetupVarargsFrameFastCase(state-&gt;vm(), jit, scratchGPR2, scratchGPR1, scratchGPR2, scratchGPR3, inlineCallFrame, data-&gt;firstVarArgOffset, slowCase);
</del><ins>+                    emitSetupVarargsFrameFastCase(*vm, jit, scratchGPR2, scratchGPR1, scratchGPR2, scratchGPR3, inlineCallFrame, data-&gt;firstVarArgOffset, slowCase);
</ins><span class="cx"> 
</span><span class="cx">                     CCallHelpers::Jump done = jit.jump();
</span><span class="cx">                     slowCase.link(&amp;jit);
</span><span class="lines">@@ -6861,7 +6865,7 @@
</span><span class="cx">                 jit.addLinkTask(
</span><span class="cx">                     [=] (LinkBuffer&amp; linkBuffer) {
</span><span class="cx">                         MacroAssemblerCodePtr linkCall =
</span><del>-                            linkBuffer.vm().getCTIStub(linkCallThunkGenerator).code();
</del><ins>+                            vm-&gt;getCTIStub(linkCallThunkGenerator).code();
</ins><span class="cx">                         linkBuffer.link(slowCall, FunctionPtr(linkCall.executableAddress()));
</span><span class="cx">                         
</span><span class="cx">                         callLinkInfo-&gt;setCallLocations(
</span><span class="lines">@@ -6922,8 +6926,9 @@
</span><span class="cx">         
</span><span class="cx">         CodeOrigin codeOrigin = codeOriginDescriptionOfCallSite();
</span><span class="cx">         State* state = &amp;m_ftlState;
</span><ins>+        VM&amp; vm = this-&gt;vm();
</ins><span class="cx">         patchpoint-&gt;setGenerator(
</span><del>-            [=] (CCallHelpers&amp; jit, const StackmapGenerationParams&amp; params) {
</del><ins>+            [=, &amp;vm] (CCallHelpers&amp; jit, const StackmapGenerationParams&amp; params) {
</ins><span class="cx">                 AllowMacroScratchRegisterUsage allowScratch(jit);
</span><span class="cx">                 CallSiteIndex callSiteIndex = state-&gt;jitCode-&gt;common.addUniqueCallSiteIndex(codeOrigin);
</span><span class="cx">                 
</span><span class="lines">@@ -6956,7 +6961,7 @@
</span><span class="cx">                 
</span><span class="cx">                 jit.addPtr(CCallHelpers::TrustedImm32(requiredBytes), CCallHelpers::stackPointerRegister);
</span><span class="cx">                 jit.load64(CCallHelpers::calleeFrameSlot(CallFrameSlot::callee), GPRInfo::regT0);
</span><del>-                jit.emitDumbVirtualCall(callLinkInfo);
</del><ins>+                jit.emitDumbVirtualCall(vm, callLinkInfo);
</ins><span class="cx">                 
</span><span class="cx">                 done.link(&amp;jit);
</span><span class="cx">                 jit.addPtr(
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLOSRExitCompilercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -491,7 +491,7 @@
</span><span class="cx">     reifyInlinedCallFrames(jit, exit);
</span><span class="cx">     adjustAndJumpToTarget(*vm, jit, exit);
</span><span class="cx">     
</span><del>-    LinkBuffer patchBuffer(*vm, jit, codeBlock);
</del><ins>+    LinkBuffer patchBuffer(jit, codeBlock);
</ins><span class="cx">     exit.m_code = FINALIZE_CODE_IF(
</span><span class="cx">         shouldDumpDisassembly() || Options::verboseOSR() || Options::verboseFTLOSRExit(),
</span><span class="cx">         patchBuffer,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLOSRExitHandlecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLOSRExitHandle.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLOSRExitHandle.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/ftl/FTLOSRExitHandle.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -44,13 +44,14 @@
</span><span class="cx">     jit.pushToSaveImmediateWithoutTouchingRegisters(CCallHelpers::TrustedImm32(index));
</span><span class="cx">     CCallHelpers::PatchableJump jump = jit.patchableJump();
</span><span class="cx">     RefPtr&lt;OSRExitHandle&gt; self = this;
</span><ins>+    VM&amp; vm = state.vm();
</ins><span class="cx">     jit.addLinkTask(
</span><del>-        [self, jump, myLabel, compilation] (LinkBuffer&amp; linkBuffer) {
</del><ins>+        [self, jump, myLabel, compilation, &amp;vm] (LinkBuffer&amp; linkBuffer) {
</ins><span class="cx">             self-&gt;exit.m_patchableJump = CodeLocationJump(linkBuffer.locationOf(jump));
</span><span class="cx"> 
</span><span class="cx">             linkBuffer.link(
</span><span class="cx">                 jump.m_jump,
</span><del>-                CodeLocationLabel(linkBuffer.vm().getCTIStub(osrExitGenerationThunkGenerator).code()));
</del><ins>+                CodeLocationLabel(vm.getCTIStub(osrExitGenerationThunkGenerator).code()));
</ins><span class="cx">             if (compilation)
</span><span class="cx">                 compilation-&gt;addOSRExitSite({ linkBuffer.locationOf(myLabel).executableAddress() });
</span><span class="cx">         });
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLSlowPathCallcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -118,16 +118,14 @@
</span><span class="cx">     return SlowPathCallKey(m_thunkSaveSet, callTarget, m_argumentRegisters, m_offset);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SlowPathCall SlowPathCallContext::makeCall(void* callTarget)
</del><ins>+SlowPathCall SlowPathCallContext::makeCall(VM&amp; vm, void* callTarget)
</ins><span class="cx"> {
</span><span class="cx">     SlowPathCall result = SlowPathCall(m_jit.call(), keyWithTarget(callTarget));
</span><span class="cx"> 
</span><span class="cx">     m_jit.addLinkTask(
</span><del>-        [result] (LinkBuffer&amp; linkBuffer) {
-            VM&amp; vm = linkBuffer.vm();
-
</del><ins>+        [result, &amp;vm] (LinkBuffer&amp; linkBuffer) {
</ins><span class="cx">             MacroAssemblerCodeRef thunk =
</span><del>-                vm.ftlThunks-&gt;getSlowPathCallThunk(vm, result.key());
</del><ins>+                vm.ftlThunks-&gt;getSlowPathCallThunk(result.key());
</ins><span class="cx"> 
</span><span class="cx">             linkBuffer.link(result.call(), CodeLocationLabel(thunk.code()));
</span><span class="cx">         });
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLSlowPathCallh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLSlowPathCall.h (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLSlowPathCall.h        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/ftl/FTLSlowPathCall.h        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx"> 
</span><span class="cx">     // NOTE: The call that this returns is already going to be linked by the JIT using addLinkTask(),
</span><span class="cx">     // so there is no need for you to link it yourself.
</span><del>-    SlowPathCall makeCall(void* callTarget);
</del><ins>+    SlowPathCall makeCall(VM&amp;, void* callTarget);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     SlowPathCallKey keyWithTarget(void* callTarget) const;
</span><span class="lines">@@ -84,7 +84,7 @@
</span><span class="cx">     {
</span><span class="cx">         SlowPathCallContext context(usedRegisters, jit, sizeof...(ArgumentTypes) + 1, resultGPR);
</span><span class="cx">         jit.setupArgumentsWithExecState(arguments...);
</span><del>-        call = context.makeCall(function.value());
</del><ins>+        call = context.makeCall(vm, function.value());
</ins><span class="cx">     }
</span><span class="cx">     if (exceptionTarget)
</span><span class="cx">         exceptionTarget-&gt;append(jit.emitExceptionCheck(vm));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLStateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLState.h (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLState.h        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/ftl/FTLState.h        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -66,7 +66,7 @@
</span><span class="cx">     ~State();
</span><span class="cx"> 
</span><span class="cx">     VM&amp; vm() { return graph.m_vm; }
</span><del>-    
</del><ins>+
</ins><span class="cx">     // None of these things is owned by State. It is the responsibility of
</span><span class="cx">     // FTL phases to properly manage the lifecycle of the module and function.
</span><span class="cx">     DFG::Graph&amp; graph;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLThunkscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLThunks.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLThunks.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/ftl/FTLThunks.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -117,7 +117,7 @@
</span><span class="cx"> 
</span><span class="cx">     jit.ret();
</span><span class="cx">     
</span><del>-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     patchBuffer.link(functionCall, generationFunction);
</span><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;%s&quot;, name));
</span><span class="cx"> }
</span><span class="lines">@@ -164,7 +164,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-MacroAssemblerCodeRef slowPathCallThunkGenerator(VM&amp; vm, const SlowPathCallKey&amp; key)
</del><ins>+MacroAssemblerCodeRef slowPathCallThunkGenerator(const SlowPathCallKey&amp; key)
</ins><span class="cx"> {
</span><span class="cx">     AssemblyHelpers jit(nullptr);
</span><span class="cx">     
</span><span class="lines">@@ -222,7 +222,7 @@
</span><span class="cx">     
</span><span class="cx">     jit.ret();
</span><span class="cx"> 
</span><del>-    LinkBuffer patchBuffer(vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     patchBuffer.link(call, FunctionPtr(key.callTarget()));
</span><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;FTL slow path call thunk for %s&quot;, toCString(key).data()));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLThunksh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLThunks.h (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLThunks.h        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/ftl/FTLThunks.h        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx"> 
</span><span class="cx"> MacroAssemblerCodeRef osrExitGenerationThunkGenerator(VM*);
</span><span class="cx"> MacroAssemblerCodeRef lazySlowPathGenerationThunkGenerator(VM*);
</span><del>-MacroAssemblerCodeRef slowPathCallThunkGenerator(VM&amp;, const SlowPathCallKey&amp;);
</del><ins>+MacroAssemblerCodeRef slowPathCallThunkGenerator(const SlowPathCallKey&amp;);
</ins><span class="cx"> 
</span><span class="cx"> template&lt;typename KeyTypeArgument&gt;
</span><span class="cx"> struct ThunkMap {
</span><span class="lines">@@ -54,13 +54,13 @@
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename MapType, typename GeneratorType&gt;
</span><span class="cx"> MacroAssemblerCodeRef generateIfNecessary(
</span><del>-    VM&amp; vm, MapType&amp; map, const typename MapType::KeyType&amp; key, GeneratorType generator)
</del><ins>+    MapType&amp; map, const typename MapType::KeyType&amp; key, GeneratorType generator)
</ins><span class="cx"> {
</span><span class="cx">     typename MapType::ToThunkMap::iterator iter = map.m_toThunk.find(key);
</span><span class="cx">     if (iter != map.m_toThunk.end())
</span><span class="cx">         return iter-&gt;value;
</span><span class="cx">     
</span><del>-    MacroAssemblerCodeRef result = generator(vm, key);
</del><ins>+    MacroAssemblerCodeRef result = generator(key);
</ins><span class="cx">     map.m_toThunk.add(key, result);
</span><span class="cx">     map.m_fromThunk.add(result.code(), key);
</span><span class="cx">     return result;
</span><span class="lines">@@ -76,10 +76,10 @@
</span><span class="cx"> 
</span><span class="cx"> class Thunks {
</span><span class="cx"> public:
</span><del>-    MacroAssemblerCodeRef getSlowPathCallThunk(VM&amp; vm, const SlowPathCallKey&amp; key)
</del><ins>+    MacroAssemblerCodeRef getSlowPathCallThunk(const SlowPathCallKey&amp; key)
</ins><span class="cx">     {
</span><span class="cx">         return generateIfNecessary(
</span><del>-            vm, m_slowPathCallThunks, key, slowPathCallThunkGenerator);
</del><ins>+            m_slowPathCallThunks, key, slowPathCallThunkGenerator);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     SlowPathCallKey keyForSlowPathCallThunk(MacroAssemblerCodePtr ptr)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitAssemblyHelperscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/AssemblyHelpers.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/AssemblyHelpers.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/AssemblyHelpers.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -627,14 +627,14 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void AssemblyHelpers::emitDumbVirtualCall(CallLinkInfo* info)
</del><ins>+void AssemblyHelpers::emitDumbVirtualCall(VM&amp; vm, CallLinkInfo* info)
</ins><span class="cx"> {
</span><span class="cx">     move(TrustedImmPtr(info), GPRInfo::regT2);
</span><span class="cx">     Call call = nearCall();
</span><span class="cx">     addLinkTask(
</span><del>-        [=] (LinkBuffer&amp; linkBuffer) {
-            MacroAssemblerCodeRef virtualThunk = virtualThunkFor(&amp;linkBuffer.vm(), *info);
-            info-&gt;setSlowStub(createJITStubRoutine(virtualThunk, linkBuffer.vm(), nullptr, true));
</del><ins>+        [=, &amp;vm] (LinkBuffer&amp; linkBuffer) {
+            MacroAssemblerCodeRef virtualThunk = virtualThunkFor(&amp;vm, *info);
+            info-&gt;setSlowStub(createJITStubRoutine(virtualThunk, vm, nullptr, true));
</ins><span class="cx">             linkBuffer.link(call, CodeLocationLabel(virtualThunk.code()));
</span><span class="cx">         });
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitAssemblyHelpersh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/AssemblyHelpers.h (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/AssemblyHelpers.h        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/AssemblyHelpers.h        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -1409,7 +1409,7 @@
</span><span class="cx">         functor(TypeofType::Undefined, true);
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    void emitDumbVirtualCall(CallLinkInfo*);
</del><ins>+    void emitDumbVirtualCall(VM&amp;, CallLinkInfo*);
</ins><span class="cx">     
</span><span class="cx">     Vector&lt;BytecodeAndMachineOffset&gt;&amp; decodedCodeMapFor(CodeBlock*);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitExecutableAllocatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/ExecutableAllocator.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/ExecutableAllocator.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/ExecutableAllocator.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -311,6 +311,7 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> static FixedVMPoolExecutableAllocator* allocator;
</span><ins>+static ExecutableAllocator* executableAllocator;
</ins><span class="cx"> 
</span><span class="cx"> void ExecutableAllocator::initializeAllocator()
</span><span class="cx"> {
</span><span class="lines">@@ -317,13 +318,22 @@
</span><span class="cx">     ASSERT(!allocator);
</span><span class="cx">     allocator = new FixedVMPoolExecutableAllocator();
</span><span class="cx">     CodeProfiling::notifyAllocator(allocator);
</span><ins>+
+    executableAllocator = new ExecutableAllocator;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-ExecutableAllocator::ExecutableAllocator(VM&amp;)
</del><ins>+ExecutableAllocator&amp; ExecutableAllocator::singleton()
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(allocator);
</span><ins>+    ASSERT(executableAllocator);
+    return *executableAllocator;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+ExecutableAllocator::ExecutableAllocator()
+{
+    ASSERT(allocator);
+}
+
</ins><span class="cx"> ExecutableAllocator::~ExecutableAllocator()
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="lines">@@ -362,7 +372,7 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RefPtr&lt;ExecutableMemoryHandle&gt; ExecutableAllocator::allocate(VM&amp;, size_t sizeInBytes, void* ownerUID, JITCompilationEffort effort)
</del><ins>+RefPtr&lt;ExecutableMemoryHandle&gt; ExecutableAllocator::allocate(size_t sizeInBytes, void* ownerUID, JITCompilationEffort effort)
</ins><span class="cx"> {
</span><span class="cx">     if (Options::logExecutableAllocation()) {
</span><span class="cx">         MetaAllocator::Statistics stats = allocator-&gt;currentStatistics();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitExecutableAllocatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/ExecutableAllocator.h (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/ExecutableAllocator.h        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/ExecutableAllocator.h        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -55,8 +55,6 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><del>-class VM;
-
</del><span class="cx"> static const unsigned jitAllocationGranule = 32;
</span><span class="cx"> 
</span><span class="cx"> typedef WTF::MetaAllocatorHandle ExecutableMemoryHandle;
</span><span class="lines">@@ -117,9 +115,7 @@
</span><span class="cx">     enum ProtectionSetting { Writable, Executable };
</span><span class="cx"> 
</span><span class="cx"> public:
</span><del>-    ExecutableAllocator(VM&amp;);
-    ~ExecutableAllocator();
-    
</del><ins>+    static ExecutableAllocator&amp; singleton();
</ins><span class="cx">     static void initializeAllocator();
</span><span class="cx"> 
</span><span class="cx">     bool isValid() const;
</span><span class="lines">@@ -134,7 +130,7 @@
</span><span class="cx">     static void dumpProfile() { }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    RefPtr&lt;ExecutableMemoryHandle&gt; allocate(VM&amp;, size_t sizeInBytes, void* ownerUID, JITCompilationEffort);
</del><ins>+    RefPtr&lt;ExecutableMemoryHandle&gt; allocate(size_t sizeInBytes, void* ownerUID, JITCompilationEffort);
</ins><span class="cx"> 
</span><span class="cx">     bool isValidExecutableMemory(const AbstractLocker&amp;, void* address);
</span><span class="cx"> 
</span><span class="lines">@@ -141,6 +137,10 @@
</span><span class="cx">     static size_t committedByteCount();
</span><span class="cx"> 
</span><span class="cx">     Lock&amp; getLock() const;
</span><ins>+private:
+
+    ExecutableAllocator();
+    ~ExecutableAllocator();
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(JIT) &amp;&amp; ENABLE(ASSEMBLER)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JIT.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JIT.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/JIT.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -716,7 +716,7 @@
</span><span class="cx">         m_disassembler-&gt;setEndOfCode(label());
</span><span class="cx">     m_pcToCodeOriginMapBuilder.appendItem(label(), PCToCodeOriginMapBuilder::defaultCodeOrigin());
</span><span class="cx"> 
</span><del>-    m_linkBuffer = std::unique_ptr&lt;LinkBuffer&gt;(new LinkBuffer(*m_vm, *this, m_codeBlock, effort));
</del><ins>+    m_linkBuffer = std::unique_ptr&lt;LinkBuffer&gt;(new LinkBuffer(*this, m_codeBlock, effort));
</ins><span class="cx"> 
</span><span class="cx">     double after = 0;
</span><span class="cx">     if (UNLIKELY(computeCompileTimes())) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITCallcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITCall.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITCall.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/JITCall.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -121,7 +121,7 @@
</span><span class="cx">     addPtr(TrustedImm32(registerOffset * sizeof(Register) + sizeof(CallerFrameAndPC)), callFrameRegister, stackPointerRegister);
</span><span class="cx"> 
</span><span class="cx">     load64(Address(stackPointerRegister, sizeof(Register) * CallFrameSlot::callee - sizeof(CallerFrameAndPC)), regT0);
</span><del>-    emitDumbVirtualCall(info);
</del><ins>+    emitDumbVirtualCall(*vm(), info);
</ins><span class="cx">     addPtr(TrustedImm32(stackPointerOffsetFor(m_codeBlock) * sizeof(Register)), callFrameRegister, stackPointerRegister);
</span><span class="cx">     checkStackPointerAlignment();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITMathICh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITMathIC.h (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITMathIC.h        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/JITMathIC.h        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -128,7 +128,7 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void generateOutOfLine(VM&amp; vm, CodeBlock* codeBlock, FunctionPtr callReplacement)
</del><ins>+    void generateOutOfLine(CodeBlock* codeBlock, FunctionPtr callReplacement)
</ins><span class="cx">     {
</span><span class="cx">         auto linkJumpToOutOfLineSnippet = [&amp;] () {
</span><span class="cx">             CCallHelpers jit(codeBlock);
</span><span class="lines">@@ -160,7 +160,7 @@
</span><span class="cx">             if (generatedInline) {
</span><span class="cx">                 auto jumpToDone = jit.jump();
</span><span class="cx"> 
</span><del>-                LinkBuffer linkBuffer(vm, jit, codeBlock, JITCompilationCanFail);
</del><ins>+                LinkBuffer linkBuffer(jit, codeBlock, JITCompilationCanFail);
</ins><span class="cx">                 if (!linkBuffer.didFailToAllocate()) {
</span><span class="cx">                     linkBuffer.link(generationState.slowPathJumps, slowPathStartLocation());
</span><span class="cx">                     linkBuffer.link(jumpToDone, doneLocation());
</span><span class="lines">@@ -200,7 +200,7 @@
</span><span class="cx">                 return;
</span><span class="cx">             endJumpList.append(jit.jump());
</span><span class="cx"> 
</span><del>-            LinkBuffer linkBuffer(vm, jit, codeBlock, JITCompilationCanFail);
</del><ins>+            LinkBuffer linkBuffer(jit, codeBlock, JITCompilationCanFail);
</ins><span class="cx">             if (linkBuffer.didFailToAllocate())
</span><span class="cx">                 return;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOpcodescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -1119,7 +1119,7 @@
</span><span class="cx">     move(TrustedImm64(JSValue::encode(jsBoolean(true))), regT0);
</span><span class="cx">     Jump done = jump();
</span><span class="cx"> 
</span><del>-    LinkBuffer patchBuffer(*m_vm, *this, m_codeBlock);
</del><ins>+    LinkBuffer patchBuffer(*this, m_codeBlock);
</ins><span class="cx">     
</span><span class="cx">     patchBuffer.link(badType, CodeLocationLabel(MacroAssemblerCodePtr::createFromExecutableAddress(returnAddress.value())).labelAtOffset(byValInfo-&gt;returnAddressToSlowPath));
</span><span class="cx">     patchBuffer.link(slowCases, CodeLocationLabel(MacroAssemblerCodePtr::createFromExecutableAddress(returnAddress.value())).labelAtOffset(byValInfo-&gt;returnAddressToSlowPath));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOpcodes32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -126,7 +126,7 @@
</span><span class="cx">     jumpToExceptionHandler(*vm);
</span><span class="cx"> 
</span><span class="cx">     // All trampolines constructed! copy the code, link up calls, and set the pointers on the Machine object.
</span><del>-    LinkBuffer patchBuffer(*vm, *this, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(*this, GLOBAL_THUNK_ID);
</ins><span class="cx"> 
</span><span class="cx">     patchBuffer.link(nativeCall, FunctionPtr(func));
</span><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;JIT CTI native call&quot;));
</span><span class="lines">@@ -1061,7 +1061,7 @@
</span><span class="cx">     move(TrustedImm32(1), regT0);
</span><span class="cx">     Jump done = jump();
</span><span class="cx"> 
</span><del>-    LinkBuffer patchBuffer(*m_vm, *this, m_codeBlock);
</del><ins>+    LinkBuffer patchBuffer(*this, m_codeBlock);
</ins><span class="cx">     
</span><span class="cx">     patchBuffer.link(badType, CodeLocationLabel(MacroAssemblerCodePtr::createFromExecutableAddress(returnAddress.value())).labelAtOffset(byValInfo-&gt;returnAddressToSlowPath));
</span><span class="cx">     patchBuffer.link(slowCases, CodeLocationLabel(MacroAssemblerCodePtr::createFromExecutableAddress(returnAddress.value())).labelAtOffset(byValInfo-&gt;returnAddressToSlowPath));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -2375,7 +2375,7 @@
</span><span class="cx">     ASSERT(arithProfile);
</span><span class="cx">     arithProfile-&gt;observeLHSAndRHS(op1, op2);
</span><span class="cx">     auto nonOptimizeVariant = operationValueAddProfiledNoOptimize;
</span><del>-    addIC-&gt;generateOutOfLine(*vm, exec-&gt;codeBlock(), nonOptimizeVariant);
</del><ins>+    addIC-&gt;generateOutOfLine(exec-&gt;codeBlock(), nonOptimizeVariant);
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(MATH_IC_STATS)
</span><span class="cx">     exec-&gt;codeBlock()-&gt;dumpMathICStats();
</span><span class="lines">@@ -2408,7 +2408,7 @@
</span><span class="cx">     auto nonOptimizeVariant = operationValueAddNoOptimize;
</span><span class="cx">     if (ArithProfile* arithProfile = addIC-&gt;arithProfile())
</span><span class="cx">         arithProfile-&gt;observeLHSAndRHS(op1, op2);
</span><del>-    addIC-&gt;generateOutOfLine(*vm, exec-&gt;codeBlock(), nonOptimizeVariant);
</del><ins>+    addIC-&gt;generateOutOfLine(exec-&gt;codeBlock(), nonOptimizeVariant);
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(MATH_IC_STATS)
</span><span class="cx">     exec-&gt;codeBlock()-&gt;dumpMathICStats();
</span><span class="lines">@@ -2485,7 +2485,7 @@
</span><span class="cx">     auto nonOptimizeVariant = operationValueMulNoOptimize;
</span><span class="cx">     if (ArithProfile* arithProfile = mulIC-&gt;arithProfile())
</span><span class="cx">         arithProfile-&gt;observeLHSAndRHS(JSValue::decode(encodedOp1), JSValue::decode(encodedOp2));
</span><del>-    mulIC-&gt;generateOutOfLine(*vm, exec-&gt;codeBlock(), nonOptimizeVariant);
</del><ins>+    mulIC-&gt;generateOutOfLine(exec-&gt;codeBlock(), nonOptimizeVariant);
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(MATH_IC_STATS)
</span><span class="cx">     exec-&gt;codeBlock()-&gt;dumpMathICStats();
</span><span class="lines">@@ -2512,7 +2512,7 @@
</span><span class="cx">     ASSERT(arithProfile);
</span><span class="cx">     arithProfile-&gt;observeLHSAndRHS(JSValue::decode(encodedOp1), JSValue::decode(encodedOp2));
</span><span class="cx">     auto nonOptimizeVariant = operationValueMulProfiledNoOptimize;
</span><del>-    mulIC-&gt;generateOutOfLine(*vm, exec-&gt;codeBlock(), nonOptimizeVariant);
</del><ins>+    mulIC-&gt;generateOutOfLine(exec-&gt;codeBlock(), nonOptimizeVariant);
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(MATH_IC_STATS)
</span><span class="cx">     exec-&gt;codeBlock()-&gt;dumpMathICStats();
</span><span class="lines">@@ -2583,7 +2583,7 @@
</span><span class="cx">     ArithProfile* arithProfile = negIC-&gt;arithProfile();
</span><span class="cx">     ASSERT(arithProfile);
</span><span class="cx">     arithProfile-&gt;observeLHS(operand);
</span><del>-    negIC-&gt;generateOutOfLine(vm, exec-&gt;codeBlock(), operationArithNegateProfiled);
</del><ins>+    negIC-&gt;generateOutOfLine(exec-&gt;codeBlock(), operationArithNegateProfiled);
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(MATH_IC_STATS)
</span><span class="cx">     exec-&gt;codeBlock()-&gt;dumpMathICStats();
</span><span class="lines">@@ -2607,7 +2607,7 @@
</span><span class="cx"> 
</span><span class="cx">     if (ArithProfile* arithProfile = negIC-&gt;arithProfile())
</span><span class="cx">         arithProfile-&gt;observeLHS(operand);
</span><del>-    negIC-&gt;generateOutOfLine(vm, exec-&gt;codeBlock(), operationArithNegate);
</del><ins>+    negIC-&gt;generateOutOfLine(exec-&gt;codeBlock(), operationArithNegate);
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(MATH_IC_STATS)
</span><span class="cx">     exec-&gt;codeBlock()-&gt;dumpMathICStats();
</span><span class="lines">@@ -2675,7 +2675,7 @@
</span><span class="cx">     auto nonOptimizeVariant = operationValueSubNoOptimize;
</span><span class="cx">     if (ArithProfile* arithProfile = subIC-&gt;arithProfile())
</span><span class="cx">         arithProfile-&gt;observeLHSAndRHS(JSValue::decode(encodedOp1), JSValue::decode(encodedOp2));
</span><del>-    subIC-&gt;generateOutOfLine(*vm, exec-&gt;codeBlock(), nonOptimizeVariant);
</del><ins>+    subIC-&gt;generateOutOfLine(exec-&gt;codeBlock(), nonOptimizeVariant);
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(MATH_IC_STATS)
</span><span class="cx">     exec-&gt;codeBlock()-&gt;dumpMathICStats();
</span><span class="lines">@@ -2701,7 +2701,7 @@
</span><span class="cx">     ASSERT(arithProfile);
</span><span class="cx">     arithProfile-&gt;observeLHSAndRHS(JSValue::decode(encodedOp1), JSValue::decode(encodedOp2));
</span><span class="cx">     auto nonOptimizeVariant = operationValueSubProfiledNoOptimize;
</span><del>-    subIC-&gt;generateOutOfLine(*vm, exec-&gt;codeBlock(), nonOptimizeVariant);
</del><ins>+    subIC-&gt;generateOutOfLine(exec-&gt;codeBlock(), nonOptimizeVariant);
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(MATH_IC_STATS)
</span><span class="cx">     exec-&gt;codeBlock()-&gt;dumpMathICStats();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.h (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.h        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.h        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -60,6 +60,7 @@
</span><span class="cx"> class StructureStubInfo;
</span><span class="cx"> class Symbol;
</span><span class="cx"> class SymbolTable;
</span><ins>+class VM;
</ins><span class="cx"> class WatchpointSet;
</span><span class="cx"> 
</span><span class="cx"> struct ByValInfo;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITPropertyAccesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -88,7 +88,7 @@
</span><span class="cx">     jit.move(TrustedImm32(0), regT0);
</span><span class="cx">     jit.ret();
</span><span class="cx">     
</span><del>-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;String get_by_val stub&quot;));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1336,7 +1336,7 @@
</span><span class="cx">     
</span><span class="cx">     Jump done = jump();
</span><span class="cx"> 
</span><del>-    LinkBuffer patchBuffer(*m_vm, *this, m_codeBlock);
</del><ins>+    LinkBuffer patchBuffer(*this, m_codeBlock);
</ins><span class="cx">     
</span><span class="cx">     patchBuffer.link(badType, CodeLocationLabel(MacroAssemblerCodePtr::createFromExecutableAddress(returnAddress.value())).labelAtOffset(byValInfo-&gt;returnAddressToSlowPath));
</span><span class="cx">     patchBuffer.link(slowCases, CodeLocationLabel(MacroAssemblerCodePtr::createFromExecutableAddress(returnAddress.value())).labelAtOffset(byValInfo-&gt;returnAddressToSlowPath));
</span><span class="lines">@@ -1362,7 +1362,7 @@
</span><span class="cx">     JITGetByIdGenerator gen = emitGetByValWithCachedId(byValInfo, currentInstruction, propertyName, fastDoneCase, slowDoneCase, slowCases);
</span><span class="cx"> 
</span><span class="cx">     ConcurrentJSLocker locker(m_codeBlock-&gt;m_lock);
</span><del>-    LinkBuffer patchBuffer(*m_vm, *this, m_codeBlock);
</del><ins>+    LinkBuffer patchBuffer(*this, m_codeBlock);
</ins><span class="cx">     patchBuffer.link(slowCases, CodeLocationLabel(MacroAssemblerCodePtr::createFromExecutableAddress(returnAddress.value())).labelAtOffset(byValInfo-&gt;returnAddressToSlowPath));
</span><span class="cx">     patchBuffer.link(fastDoneCase, byValInfo-&gt;badTypeJump.labelAtOffset(byValInfo-&gt;badTypeJumpToDone));
</span><span class="cx">     patchBuffer.link(slowDoneCase, byValInfo-&gt;badTypeJump.labelAtOffset(byValInfo-&gt;badTypeJumpToNextHotPath));
</span><span class="lines">@@ -1419,7 +1419,7 @@
</span><span class="cx">     
</span><span class="cx">     Jump done = jump();
</span><span class="cx"> 
</span><del>-    LinkBuffer patchBuffer(*m_vm, *this, m_codeBlock);
</del><ins>+    LinkBuffer patchBuffer(*this, m_codeBlock);
</ins><span class="cx">     patchBuffer.link(badType, CodeLocationLabel(MacroAssemblerCodePtr::createFromExecutableAddress(returnAddress.value())).labelAtOffset(byValInfo-&gt;returnAddressToSlowPath));
</span><span class="cx">     patchBuffer.link(slowCases, CodeLocationLabel(MacroAssemblerCodePtr::createFromExecutableAddress(returnAddress.value())).labelAtOffset(byValInfo-&gt;returnAddressToSlowPath));
</span><span class="cx">     patchBuffer.link(done, byValInfo-&gt;badTypeJump.labelAtOffset(byValInfo-&gt;badTypeJumpToDone));
</span><span class="lines">@@ -1453,7 +1453,7 @@
</span><span class="cx">     JITPutByIdGenerator gen = emitPutByValWithCachedId(byValInfo, currentInstruction, putKind, propertyName, doneCases, slowCases);
</span><span class="cx"> 
</span><span class="cx">     ConcurrentJSLocker locker(m_codeBlock-&gt;m_lock);
</span><del>-    LinkBuffer patchBuffer(*m_vm, *this, m_codeBlock);
</del><ins>+    LinkBuffer patchBuffer(*this, m_codeBlock);
</ins><span class="cx">     patchBuffer.link(slowCases, CodeLocationLabel(MacroAssemblerCodePtr::createFromExecutableAddress(returnAddress.value())).labelAtOffset(byValInfo-&gt;returnAddressToSlowPath));
</span><span class="cx">     patchBuffer.link(doneCases, byValInfo-&gt;badTypeJump.labelAtOffset(byValInfo-&gt;badTypeJumpToDone));
</span><span class="cx">     if (!m_exceptionChecks.empty())
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITPropertyAccess32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -177,7 +177,7 @@
</span><span class="cx">     jit.move(TrustedImm32(0), regT0);
</span><span class="cx">     jit.ret();
</span><span class="cx">     
</span><del>-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;String get_by_val stub&quot;));
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITStubRoutineh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITStubRoutine.h (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITStubRoutine.h        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/JITStubRoutine.h        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><span class="cx"> class JITStubRoutineSet;
</span><ins>+class VM;
</ins><span class="cx"> 
</span><span class="cx"> // This is a base-class for JIT stub routines, and also the class you want
</span><span class="cx"> // to instantiate directly if you have a routine that does not need any
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitRepatchcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/Repatch.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/Repatch.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/Repatch.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -91,7 +91,7 @@
</span><span class="cx">                 MacroAssembler::readCallTarget(call).executableAddress()));
</span><span class="cx">         key = key.withCallTarget(newCalleeFunction.executableAddress());
</span><span class="cx">         newCalleeFunction = FunctionPtr(
</span><del>-            thunks.getSlowPathCallThunk(vm, key).code().executableAddress());
</del><ins>+            thunks.getSlowPathCallThunk(key).code().executableAddress());
</ins><span class="cx">     }
</span><span class="cx"> #else // ENABLE(FTL_JIT)
</span><span class="cx">     UNUSED_PARAM(codeBlock);
</span><span class="lines">@@ -931,7 +931,7 @@
</span><span class="cx">     stubJit.restoreReturnAddressBeforeReturn(GPRInfo::regT4);
</span><span class="cx">     AssemblyHelpers::Jump slow = stubJit.jump();
</span><span class="cx">         
</span><del>-    LinkBuffer patchBuffer(vm, stubJit, owner, JITCompilationCanFail);
</del><ins>+    LinkBuffer patchBuffer(stubJit, owner, JITCompilationCanFail);
</ins><span class="cx">     if (patchBuffer.didFailToAllocate()) {
</span><span class="cx">         linkVirtualFor(exec, callLinkInfo);
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitSpecializedThunkJITh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/SpecializedThunkJIT.h (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/SpecializedThunkJIT.h        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/SpecializedThunkJIT.h        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -166,7 +166,7 @@
</span><span class="cx">         
</span><span class="cx">         MacroAssemblerCodeRef finalize(MacroAssemblerCodePtr fallback, const char* thunkKind)
</span><span class="cx">         {
</span><del>-            LinkBuffer patchBuffer(*m_vm, *this, GLOBAL_THUNK_ID);
</del><ins>+            LinkBuffer patchBuffer(*this, GLOBAL_THUNK_ID);
</ins><span class="cx">             patchBuffer.link(m_failures, CodeLocationLabel(fallback));
</span><span class="cx">             for (unsigned i = 0; i &lt; m_calls.size(); i++)
</span><span class="cx">                 patchBuffer.link(m_calls[i].first, m_calls[i].second);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitThunkGeneratorscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx">     jit.call(GPRInfo::nonArgGPR0);
</span><span class="cx">     jit.jumpToExceptionHandler(*vm);
</span><span class="cx"> 
</span><del>-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;Throw exception from call slow path thunk&quot;));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -142,7 +142,7 @@
</span><span class="cx">     
</span><span class="cx">     slowPathFor(jit, vm, operationLinkCall);
</span><span class="cx">     
</span><del>-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;Link call slow path thunk&quot;));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -154,7 +154,7 @@
</span><span class="cx">     
</span><span class="cx">     slowPathFor(jit, vm, operationLinkPolymorphicCall);
</span><span class="cx">     
</span><del>-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;Link polymorphic call slow path thunk&quot;));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -223,7 +223,7 @@
</span><span class="cx">     
</span><span class="cx">     slowPathFor(jit, vm, operationVirtualCall);
</span><span class="cx">     
</span><del>-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     return FINALIZE_CODE(
</span><span class="cx">         patchBuffer,
</span><span class="cx">         (&quot;Virtual %s slow path thunk&quot;,
</span><span class="lines">@@ -382,7 +382,7 @@
</span><span class="cx"> 
</span><span class="cx">     jit.jumpToExceptionHandler(*vm);
</span><span class="cx"> 
</span><del>-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;native %s%s trampoline&quot;, entryType == EnterViaJumpWithSavedTags ? &quot;Tail With Saved Tags &quot; : entryType == EnterViaJumpWithoutSavedTags ? &quot;Tail Without Saved Tags &quot; : &quot;&quot;, toCString(kind).data()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -529,7 +529,7 @@
</span><span class="cx">     jit.ret();
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;fixup arity&quot;));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -539,7 +539,7 @@
</span><span class="cx"> 
</span><span class="cx">     jit.breakpoint();
</span><span class="cx"> 
</span><del>-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;unreachable thunk&quot;));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1127,7 +1127,7 @@
</span><span class="cx">     jit.emitFunctionEpilogue();
</span><span class="cx">     jit.ret();
</span><span class="cx">     
</span><del>-    LinkBuffer linkBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     linkBuffer.link(noCode, CodeLocationLabel(vm-&gt;jitStubs-&gt;ctiNativeTailCallWithoutSavedTags(vm)));
</span><span class="cx">     return FINALIZE_CODE(
</span><span class="cx">         linkBuffer, (&quot;Specialized thunk for bound function calls with no arguments&quot;));
</span><span class="lines">@@ -1167,7 +1167,7 @@
</span><span class="cx">         ASSERT(!!vm-&gt;callFrameForCatch);
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    LinkBuffer linkBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     linkBuffer.link(call, throwWasmException);
</span><span class="cx">     return FINALIZE_CODE(
</span><span class="cx">         linkBuffer, (&quot;Throw exception from Wasm&quot;));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLLIntThunkscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LLIntThunks.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LLIntThunks.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/llint/LLIntThunks.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx">     jit.move(JSInterfaceJIT::TrustedImmPtr(bitwise_cast&lt;void*&gt;(target)), JSInterfaceJIT::regT0);
</span><span class="cx">     jit.jump(JSInterfaceJIT::regT0);
</span><span class="cx">     
</span><del>-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;LLInt %s prologue thunk&quot;, thunkKind));
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeSamplingProfilercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/SamplingProfiler.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/SamplingProfiler.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/runtime/SamplingProfiler.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -342,7 +342,7 @@
</span><span class="cx"> 
</span><span class="cx">         LockHolder machineThreadsLocker(m_vm.heap.machineThreads().getLock());
</span><span class="cx">         LockHolder codeBlockSetLocker(m_vm.heap.codeBlockSet().getLock());
</span><del>-        LockHolder executableAllocatorLocker(m_vm.executableAllocator.getLock());
</del><ins>+        LockHolder executableAllocatorLocker(ExecutableAllocator::singleton().getLock());
</ins><span class="cx"> 
</span><span class="cx">         bool didSuspend = m_jscExecutionThread-&gt;suspend();
</span><span class="cx">         if (didSuspend) {
</span><span class="lines">@@ -364,7 +364,7 @@
</span><span class="cx">             }
</span><span class="cx">             // FIXME: Lets have a way of detecting when we're parsing code.
</span><span class="cx">             // https://bugs.webkit.org/show_bug.cgi?id=152761
</span><del>-            if (m_vm.executableAllocator.isValidExecutableMemory(executableAllocatorLocker, machinePC)) {
</del><ins>+            if (ExecutableAllocator::singleton().isValidExecutableMemory(executableAllocatorLocker, machinePC)) {
</ins><span class="cx">                 if (m_vm.isExecutingInRegExpJIT) {
</span><span class="cx">                     // FIXME: We're executing a regexp. Lets gather more intersting data.
</span><span class="cx">                     // https://bugs.webkit.org/show_bug.cgi?id=152729
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeVMcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/VM.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/VM.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/runtime/VM.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -165,9 +165,6 @@
</span><span class="cx"> 
</span><span class="cx"> VM::VM(VMType vmType, HeapType heapType)
</span><span class="cx">     : m_apiLock(adoptRef(new JSLock(this)))
</span><del>-#if ENABLE(ASSEMBLER)
-    , executableAllocator(*this)
-#endif
</del><span class="cx">     , heap(this, heapType)
</span><span class="cx">     , auxiliarySpace(&quot;Auxiliary&quot;, heap, AllocatorAttributes(DoesNotNeedDestruction, HeapCell::Auxiliary))
</span><span class="cx">     , cellSpace(&quot;JSCell&quot;, heap, AllocatorAttributes(DoesNotNeedDestruction, HeapCell::JSCell))
</span><span class="lines">@@ -198,7 +195,7 @@
</span><span class="cx">     , m_rtTraceList(new RTTraceList())
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(ASSEMBLER)
</span><del>-    , m_canUseAssembler(enableAssembler(executableAllocator))
</del><ins>+    , m_canUseAssembler(enableAssembler(ExecutableAllocator::singleton()))
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(JIT)
</span><span class="cx">     , m_canUseJIT(m_canUseAssembler &amp;&amp; Options::useJIT())
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeVMh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/VM.h (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/VM.h        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/runtime/VM.h        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -285,14 +285,6 @@
</span><span class="cx">     RefPtr&lt;JSLock&gt; m_apiLock;
</span><span class="cx"> 
</span><span class="cx"> public:
</span><del>-#if ENABLE(ASSEMBLER)
-    // executableAllocator should be destructed after the heap, as the heap can call executableAllocator
-    // in its destructor.
-    ExecutableAllocator executableAllocator;
-#endif
-
-    // The heap should be just after executableAllocator and before other members to ensure that it's
-    // destructed after all the objects that reference it.
</del><span class="cx">     Heap heap;
</span><span class="cx">     
</span><span class="cx">     Subspace auxiliarySpace;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeVMTrapscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/VMTraps.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/VMTraps.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/runtime/VMTraps.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -250,7 +250,7 @@
</span><span class="cx">         return; // Let the SignalSender try again later.
</span><span class="cx"> 
</span><span class="cx">     {
</span><del>-        auto allocator = vm.executableAllocator;
</del><ins>+        auto&amp; allocator = ExecutableAllocator::singleton();
</ins><span class="cx">         auto allocatorLocker = tryHoldLock(allocator.getLock());
</span><span class="cx">         if (!allocatorLocker)
</span><span class="cx">             return; // Let the SignalSender try again later.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoretoolsVMInspectorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/tools/VMInspector.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/tools/VMInspector.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/tools/VMInspector.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -107,8 +107,8 @@
</span><span class="cx"> #if ENABLE(JIT)
</span><span class="cx">     bool found = false;
</span><span class="cx">     bool hasTimeout = false;
</span><del>-    iterate([&amp;] (VM&amp; vm) -&gt; FunctorStatus {
-        auto allocator = vm.executableAllocator;
</del><ins>+    iterate([&amp;] (VM&amp;) -&gt; FunctorStatus {
+        auto&amp; allocator = ExecutableAllocator::singleton();
</ins><span class="cx">         auto&amp; lock = allocator.getLock();
</span><span class="cx"> 
</span><span class="cx">         bool isSafeToLock = ensureIsSafeToLock(lock);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmBindingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmBinding.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmBinding.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/wasm/WasmBinding.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -114,7 +114,7 @@
</span><span class="cx">                 ASSERT(!!vm-&gt;callFrameForCatch);
</span><span class="cx">             };
</span><span class="cx"> 
</span><del>-            LinkBuffer linkBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+            LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">             linkBuffer.link(call, throwBadI64);
</span><span class="cx">             return FINALIZE_CODE(linkBuffer, (&quot;WebAssembly-&gt;JavaScript invalid i64 use in import[%i]&quot;, importIndex));
</span><span class="cx">         }
</span><span class="lines">@@ -412,7 +412,7 @@
</span><span class="cx">         });
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     patchBuffer.link(slowCall, FunctionPtr(vm-&gt;getCTIStub(linkCallThunkGenerator).code().executableAddress()));
</span><span class="cx">     CodeLocationLabel callReturnLocation(patchBuffer.locationOfNearCall(slowCall));
</span><span class="cx">     CodeLocationLabel hotPathBegin(patchBuffer.locationOf(targetToCheck));
</span><span class="lines">@@ -426,7 +426,7 @@
</span><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;WebAssembly-&gt;JavaScript import[%i] %s&quot;, importIndex, signatureDescription.ascii().data()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static MacroAssemblerCodeRef wasmToWasm(VM* vm, unsigned importIndex)
</del><ins>+static MacroAssemblerCodeRef wasmToWasm(unsigned importIndex)
</ins><span class="cx"> {
</span><span class="cx">     const PinnedRegisterInfo&amp; pinnedRegs = PinnedRegisterInfo::get();
</span><span class="cx">     JIT jit;
</span><span class="lines">@@ -462,7 +462,7 @@
</span><span class="cx">     jit.loadPtr(JIT::Address(scratch, WebAssemblyFunction::offsetOfWasmEntryPointCode()), scratch);
</span><span class="cx">     jit.jump(scratch);
</span><span class="cx"> 
</span><del>-    LinkBuffer patchBuffer(*vm, jit, GLOBAL_THUNK_ID);
</del><ins>+    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID);
</ins><span class="cx">     return FINALIZE_CODE(patchBuffer, (&quot;WebAssembly-&gt;WebAssembly import[%i]&quot;, importIndex));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -470,7 +470,7 @@
</span><span class="cx"> {
</span><span class="cx">     WasmExitStubs stubs;
</span><span class="cx">     stubs.wasmToJs = wasmToJs(vm, callLinkInfos, signatureIndex, importIndex);
</span><del>-    stubs.wasmToWasm = wasmToWasm(vm, importIndex);
</del><ins>+    stubs.wasmToWasm = wasmToWasm(importIndex);
</ins><span class="cx">     return stubs;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorewasmWasmPlancpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/wasm/WasmPlan.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/wasm/WasmPlan.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/wasm/WasmPlan.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -274,13 +274,13 @@
</span><span class="cx">                 SignatureIndex signatureIndex = m_moduleInformation-&gt;internalFunctionSignatureIndices[functionIndex];
</span><span class="cx">                 String signatureDescription = SignatureInformation::get(&amp;m_vm, signatureIndex)-&gt;toString();
</span><span class="cx">                 {
</span><del>-                    LinkBuffer linkBuffer(m_vm, *context.wasmEntrypointJIT, nullptr);
</del><ins>+                    LinkBuffer linkBuffer(*context.wasmEntrypointJIT, nullptr);
</ins><span class="cx">                     m_wasmInternalFunctions[functionIndex]-&gt;wasmEntrypoint.compilation =
</span><span class="cx">                     std::make_unique&lt;B3::Compilation&gt;(FINALIZE_CODE(linkBuffer, (&quot;WebAssembly function[%i] %s&quot;, functionIndex, signatureDescription.ascii().data())), WTFMove(context.wasmEntrypointByproducts));
</span><span class="cx">                 }
</span><span class="cx"> 
</span><span class="cx">                 {
</span><del>-                    LinkBuffer linkBuffer(m_vm, *context.jsEntrypointJIT, nullptr);
</del><ins>+                    LinkBuffer linkBuffer(*context.jsEntrypointJIT, nullptr);
</ins><span class="cx">                     linkBuffer.link(context.jsEntrypointToWasmEntrypointCall, FunctionPtr(m_wasmInternalFunctions[functionIndex]-&gt;wasmEntrypoint.compilation-&gt;code().executableAddress()));
</span><span class="cx"> 
</span><span class="cx">                     m_wasmInternalFunctions[functionIndex]-&gt;jsToWasmEntrypoint.compilation =
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreyarrYarrJITcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/yarr/YarrJIT.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/yarr/YarrJIT.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/JavaScriptCore/yarr/YarrJIT.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -2646,7 +2646,7 @@
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void compile(VM* vm, YarrCodeBlock&amp; jitObject)
</del><ins>+    void compile(YarrCodeBlock&amp; jitObject)
</ins><span class="cx">     {
</span><span class="cx">         generateEnter();
</span><span class="cx"> 
</span><span class="lines">@@ -2674,7 +2674,7 @@
</span><span class="cx">         generate();
</span><span class="cx">         backtrack();
</span><span class="cx"> 
</span><del>-        LinkBuffer linkBuffer(*vm, *this, REGEXP_CODE_ID, JITCompilationCanFail);
</del><ins>+        LinkBuffer linkBuffer(*this, REGEXP_CODE_ID, JITCompilationCanFail);
</ins><span class="cx">         if (linkBuffer.didFailToAllocate()) {
</span><span class="cx">             jitObject.setFallBack(true);
</span><span class="cx">             return;
</span><span class="lines">@@ -2729,9 +2729,9 @@
</span><span class="cx"> void jitCompile(YarrPattern&amp; pattern, YarrCharSize charSize, VM* vm, YarrCodeBlock&amp; jitObject, YarrJITCompileMode mode)
</span><span class="cx"> {
</span><span class="cx">     if (mode == MatchOnly)
</span><del>-        YarrGenerator&lt;MatchOnly&gt;(vm, pattern, charSize).compile(vm, jitObject);
</del><ins>+        YarrGenerator&lt;MatchOnly&gt;(vm, pattern, charSize).compile(jitObject);
</ins><span class="cx">     else
</span><del>-        YarrGenerator&lt;IncludeSubpatterns&gt;(vm, pattern, charSize).compile(vm, jitObject);
</del><ins>+        YarrGenerator&lt;IncludeSubpatterns&gt;(vm, pattern, charSize).compile(jitObject);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> }}
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/WebCore/ChangeLog        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2017-03-29  Saam Barati  &lt;sbarati@apple.com&gt;
+
+        LinkBuffer and ExecutableAllocator shouldn't have anything to do with VM
+        https://bugs.webkit.org/show_bug.cgi?id=170210
+
+        Reviewed by Mark Lam.
+
+        * cssjit/SelectorCompiler.cpp:
+        (WebCore::SelectorCompiler::compileSelector):
+        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):
+
</ins><span class="cx"> 2017-03-29  Javier Fernandez  &lt;jfernandez@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [css-align] Adapt self-alignment properties to the new baseline syntax
</span></span></pre></div>
<a id="trunkSourceWebCorecssjitSelectorCompilercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/cssjit/SelectorCompiler.cpp (214570 => 214571)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/cssjit/SelectorCompiler.cpp        2017-03-29 22:46:34 UTC (rev 214570)
+++ trunk/Source/WebCore/cssjit/SelectorCompiler.cpp        2017-03-29 22:55:53 UTC (rev 214571)
</span><span class="lines">@@ -256,7 +256,7 @@
</span><span class="cx"> class SelectorCodeGenerator {
</span><span class="cx"> public:
</span><span class="cx">     SelectorCodeGenerator(const CSSSelector*, SelectorContext);
</span><del>-    SelectorCompilationStatus compile(JSC::VM*, JSC::MacroAssemblerCodeRef&amp;);
</del><ins>+    SelectorCompilationStatus compile(JSC::MacroAssemblerCodeRef&amp;);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     static const Assembler::RegisterID returnRegister;
</span><span class="lines">@@ -395,7 +395,7 @@
</span><span class="cx">     if (!vm-&gt;canUseJIT())
</span><span class="cx">         return SelectorCompilationStatus::CannotCompile;
</span><span class="cx">     SelectorCodeGenerator codeGenerator(lastSelector, selectorContext);
</span><del>-    return codeGenerator.compile(vm, codeRef);
</del><ins>+    return codeGenerator.compile(codeRef);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static inline FragmentRelation fragmentRelationForSelectorRelation(CSSSelector::RelationType relation)
</span><span class="lines">@@ -1208,7 +1208,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline SelectorCompilationStatus SelectorCodeGenerator::compile(JSC::VM* vm, JSC::MacroAssemblerCodeRef&amp; codeRef)
</del><ins>+inline SelectorCompilationStatus SelectorCodeGenerator::compile(JSC::MacroAssemblerCodeRef&amp; codeRef)
</ins><span class="cx"> {
</span><span class="cx">     switch (m_functionType) {
</span><span class="cx">     case FunctionType::SimpleSelectorChecker:
</span><span class="lines">@@ -1223,7 +1223,7 @@
</span><span class="cx">         return SelectorCompilationStatus::CannotCompile;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JSC::LinkBuffer linkBuffer(*vm, m_assembler, CSS_CODE_ID, JSC::JITCompilationCanFail);
</del><ins>+    JSC::LinkBuffer linkBuffer(m_assembler, CSS_CODE_ID, JSC::JITCompilationCanFail);
</ins><span class="cx">     if (!linkBuffer.isValid()) {
</span><span class="cx">         // This could be SelectorCompilationStatus::NotCompiled but that would cause us to re-enter
</span><span class="cx">         // the CSS JIT every time we evaluate that selector.
</span></span></pre>
</div>
</div>

</body>
</html>