<!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>[163946] trunk/Source/JavaScriptCore</title>
</head>
<body>

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

<h3>Log Message</h3>
<pre>Inserting a node with a codeOrigin &quot;like&quot; another node should copy both the codeOrigin and codeOriginForExitTarget
https://bugs.webkit.org/show_bug.cgi?id=128635

Reviewed by Michael Saboff.
        
Originally nodes just had a codeOrigin. But then we started doing code motion, and we
needed to separate the codeOrigin that designated where to exit from the codeOrigin
that designated everything else. The &quot;everything else&quot; is actually pretty important:
it includes profiling, exception handling, and the actual semantics of the node. For
example some nodes use the origin's global object in some way.
        
This all sort of worked except for one quirk: the facilities for creating nodes all
assumed that there really was only one origin. LICM would work around this by setting
the codeOriginForExitTarget manually. But, that means that:
        
- If we did hoist a node twice, then the second time around, we would forget the node's
  original exit target.
        
- If we did an insertNode() to insert a node before a hoisted node, the inserted node
  would have the wrong exit target.
        
Most of the time, if we copy the code origin, we actually want to copy both origins.
So, this patch introduces the notion of a NodeOrigin which has two CodeOrigins: a
forExit code origin that says where to exit, and a semantic code origin for everything
else.
        
This also (annoyingly?) means that we are always more explicit about which code origin
we refer to. That means that a lot of &quot;node-&gt;codeOrigin&quot; expressions had to change to
&quot;node-&gt;origin.semantic&quot;. This was partly a ploy on my part to ensure that this
refactoring was complete: to get the code to compile I really had to audit all uses of
CodeOrigin. If, in the future, we find that &quot;node-&gt;origin.semantic&quot; is too cumbersome
then we can reintroduce the Node::codeOrigin field. For now I kinda like it though.

* GNUmakefile.list.am:
* JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
* JavaScriptCore.xcodeproj/project.pbxproj:
* dfg/DFGAbstractInterpreterInlines.h:
(JSC::DFG::AbstractInterpreter&lt;AbstractStateType&gt;::booleanResult):
(JSC::DFG::AbstractInterpreter&lt;AbstractStateType&gt;::executeEffects):
* dfg/DFGArgumentsSimplificationPhase.cpp:
(JSC::DFG::ArgumentsSimplificationPhase::run):
(JSC::DFG::ArgumentsSimplificationPhase::observeBadArgumentsUse):
(JSC::DFG::ArgumentsSimplificationPhase::observeProperArgumentsUse):
(JSC::DFG::ArgumentsSimplificationPhase::isOKToOptimize):
* dfg/DFGArrayMode.cpp:
(JSC::DFG::ArrayMode::originalArrayStructure):
(JSC::DFG::ArrayMode::alreadyChecked):
* dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::addToGraph):
* dfg/DFGCFGSimplificationPhase.cpp:
(JSC::DFG::CFGSimplificationPhase::run):
(JSC::DFG::CFGSimplificationPhase::convertToJump):
(JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
(JSC::DFG::CFGSimplificationPhase::jettisonBlock):
(JSC::DFG::CFGSimplificationPhase::mergeBlocks):
* dfg/DFGCPSRethreadingPhase.cpp:
(JSC::DFG::CPSRethreadingPhase::addPhiSilently):
(JSC::DFG::CPSRethreadingPhase::addPhi):
(JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
(JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
(JSC::DFG::CPSRethreadingPhase::propagatePhis):
* dfg/DFGCSEPhase.cpp:
(JSC::DFG::CSEPhase::setLocalStoreElimination):
* dfg/DFGClobberize.h:
(JSC::DFG::clobberize):
* dfg/DFGCommonData.cpp:
(JSC::DFG::CommonData::notifyCompilingStructureTransition):
* dfg/DFGConstantFoldingPhase.cpp:
(JSC::DFG::ConstantFoldingPhase::foldConstants):
(JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck):
* dfg/DFGCriticalEdgeBreakingPhase.cpp:
(JSC::DFG::CriticalEdgeBreakingPhase::breakCriticalEdge):
* dfg/DFGDCEPhase.cpp:
(JSC::DFG::DCEPhase::fixupBlock):
* dfg/DFGDisassembler.cpp:
(JSC::DFG::Disassembler::createDumpList):
* dfg/DFGFixupPhase.cpp:
(JSC::DFG::FixupPhase::fixupNode):
(JSC::DFG::FixupPhase::createToString):
(JSC::DFG::FixupPhase::attemptToForceStringArrayModeByToStringConversion):
(JSC::DFG::FixupPhase::convertStringAddUse):
(JSC::DFG::FixupPhase::fixupToPrimitive):
(JSC::DFG::FixupPhase::fixupToString):
(JSC::DFG::FixupPhase::attemptToMakeFastStringAdd):
(JSC::DFG::FixupPhase::checkArray):
(JSC::DFG::FixupPhase::blessArrayOperation):
(JSC::DFG::FixupPhase::fixEdge):
(JSC::DFG::FixupPhase::insertStoreBarrier):
(JSC::DFG::FixupPhase::fixIntEdge):
(JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
(JSC::DFG::FixupPhase::truncateConstantToInt32):
(JSC::DFG::FixupPhase::attemptToMakeGetArrayLength):
(JSC::DFG::FixupPhase::attemptToMakeGetTypedArrayByteLength):
(JSC::DFG::FixupPhase::convertToGetArrayLength):
(JSC::DFG::FixupPhase::prependGetArrayLength):
(JSC::DFG::FixupPhase::attemptToMakeGetTypedArrayByteOffset):
(JSC::DFG::FixupPhase::addPhantomsIfNecessary):
* dfg/DFGGraph.cpp:
(JSC::DFG::Graph::dumpCodeOrigin):
(JSC::DFG::Graph::amountOfNodeWhiteSpace):
(JSC::DFG::Graph::dump):
(JSC::DFG::Graph::dumpBlockHeader):
* dfg/DFGGraph.h:
(JSC::DFG::Graph::hasExitSite):
(JSC::DFG::Graph::valueProfileFor):
(JSC::DFG::Graph::methodOfGettingAValueProfileFor):
* dfg/DFGInvalidationPointInjectionPhase.cpp:
(JSC::DFG::InvalidationPointInjectionPhase::handle):
(JSC::DFG::InvalidationPointInjectionPhase::insertInvalidationCheck):
* dfg/DFGLICMPhase.cpp:
(JSC::DFG::LICMPhase::attemptHoist):
* dfg/DFGLoopPreHeaderCreationPhase.cpp:
(JSC::DFG::createPreHeader):
* dfg/DFGNode.h:
(JSC::DFG::Node::Node):
(JSC::DFG::Node::isStronglyProvedConstantIn):
* dfg/DFGNodeOrigin.h: Added.
(JSC::DFG::NodeOrigin::NodeOrigin):
(JSC::DFG::NodeOrigin::isSet):
* dfg/DFGOSREntrypointCreationPhase.cpp:
(JSC::DFG::OSREntrypointCreationPhase::run):
* dfg/DFGResurrectionForValidationPhase.cpp:
(JSC::DFG::ResurrectionForValidationPhase::run):
* dfg/DFGSSAConversionPhase.cpp:
(JSC::DFG::SSAConversionPhase::run):
* dfg/DFGSSALoweringPhase.cpp:
(JSC::DFG::SSALoweringPhase::handleNode):
(JSC::DFG::SSALoweringPhase::lowerBoundsCheck):
* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileIn):
(JSC::DFG::SpeculativeJIT::compileCurrentBlock):
(JSC::DFG::SpeculativeJIT::compileGetByValOnString):
(JSC::DFG::SpeculativeJIT::compileNewTypedArray):
* dfg/DFGSpeculativeJIT.h:
(JSC::DFG::SpeculativeJIT::masqueradesAsUndefinedWatchpointIsStillValid):
(JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
(JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnException):
(JSC::DFG::SpeculativeJIT::appendCallSetResult):
(JSC::DFG::SpeculativeJIT::appendCall):
(JSC::DFG::SpeculativeJIT::speculateStringObjectForStructure):
* dfg/DFGSpeculativeJIT32_64.cpp:
(JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
(JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
(JSC::DFG::SpeculativeJIT::emitCall):
(JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
(JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
(JSC::DFG::SpeculativeJIT::compile):
* dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
(JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
(JSC::DFG::SpeculativeJIT::emitCall):
(JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
(JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
(JSC::DFG::SpeculativeJIT::compile):
* dfg/DFGStrengthReductionPhase.cpp:
(JSC::DFG::StrengthReductionPhase::convertToIdentityOverChild):
(JSC::DFG::StrengthReductionPhase::prepareToFoldTypedArray):
* dfg/DFGTierUpCheckInjectionPhase.cpp:
(JSC::DFG::TierUpCheckInjectionPhase::run):
* dfg/DFGTypeCheckHoistingPhase.cpp:
(JSC::DFG::TypeCheckHoistingPhase::run):
* dfg/DFGValidate.cpp:
(JSC::DFG::Validate::validateSSA):
* dfg/DFGWatchpointCollectionPhase.cpp:
(JSC::DFG::WatchpointCollectionPhase::handle):
(JSC::DFG::WatchpointCollectionPhase::handleEdge):
(JSC::DFG::WatchpointCollectionPhase::handleMasqueradesAsUndefined):
(JSC::DFG::WatchpointCollectionPhase::globalObject):
* ftl/FTLJSCall.cpp:
(JSC::FTL::JSCall::link):
* ftl/FTLLink.cpp:
(JSC::FTL::link):
* ftl/FTLLowerDFGToLLVM.cpp:
(JSC::FTL::LowerDFGToLLVM::compileNode):
(JSC::FTL::LowerDFGToLLVM::compileToThis):
(JSC::FTL::LowerDFGToLLVM::compilePutById):
(JSC::FTL::LowerDFGToLLVM::compilePutByVal):
(JSC::FTL::LowerDFGToLLVM::compileNewArray):
(JSC::FTL::LowerDFGToLLVM::compileNewArrayBuffer):
(JSC::FTL::LowerDFGToLLVM::compileNewArrayWithSize):
(JSC::FTL::LowerDFGToLLVM::compileStringCharAt):
(JSC::FTL::LowerDFGToLLVM::compileGetMyScope):
(JSC::FTL::LowerDFGToLLVM::compileCheckArgumentsNotCreated):
(JSC::FTL::LowerDFGToLLVM::getById):
(JSC::FTL::LowerDFGToLLVM::equalNullOrUndefined):
(JSC::FTL::LowerDFGToLLVM::speculateStringObjectForStructure):
(JSC::FTL::LowerDFGToLLVM::masqueradesAsUndefinedWatchpointIsStillValid):
(JSC::FTL::LowerDFGToLLVM::callPreflight):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreGNUmakefilelistam">trunk/Source/JavaScriptCore/GNUmakefile.list.am</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxproj">trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj">trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGAbstractInterpreterInlinesh">trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGArgumentsSimplificationPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGArrayModecpp">trunk/Source/JavaScriptCore/dfg/DFGArrayMode.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGByteCodeParsercpp">trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGCFGSimplificationPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGCPSRethreadingPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGCSEPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGClobberizeh">trunk/Source/JavaScriptCore/dfg/DFGClobberize.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGCommonDatacpp">trunk/Source/JavaScriptCore/dfg/DFGCommonData.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGConstantFoldingPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGCriticalEdgeBreakingPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGCriticalEdgeBreakingPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGDCEPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGDCEPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGDisassemblercpp">trunk/Source/JavaScriptCore/dfg/DFGDisassembler.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGFixupPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGGraphcpp">trunk/Source/JavaScriptCore/dfg/DFGGraph.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGGraphh">trunk/Source/JavaScriptCore/dfg/DFGGraph.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGInvalidationPointInjectionPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGInvalidationPointInjectionPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGLICMPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGLICMPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGLoopPreHeaderCreationPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGLoopPreHeaderCreationPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGNodeh">trunk/Source/JavaScriptCore/dfg/DFGNode.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGOSREntrypointCreationPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGResurrectionForValidationPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGResurrectionForValidationPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSSAConversionPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSSALoweringPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGSSALoweringPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJITcpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJITh">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJIT32_64cpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJIT64cpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGStrengthReductionPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGTierUpCheckInjectionPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGTypeCheckHoistingPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGTypeCheckHoistingPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGValidatecpp">trunk/Source/JavaScriptCore/dfg/DFGValidate.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGWatchpointCollectionPhasecpp">trunk/Source/JavaScriptCore/dfg/DFGWatchpointCollectionPhase.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLJSCallcpp">trunk/Source/JavaScriptCore/ftl/FTLJSCall.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLLinkcpp">trunk/Source/JavaScriptCore/ftl/FTLLink.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreftlFTLLowerDFGToLLVMcpp">trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoredfgDFGNodeOriginh">trunk/Source/JavaScriptCore/dfg/DFGNodeOrigin.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -1,5 +1,196 @@
</span><span class="cx"> 2014-02-11  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Inserting a node with a codeOrigin &quot;like&quot; another node should copy both the codeOrigin and codeOriginForExitTarget
+        https://bugs.webkit.org/show_bug.cgi?id=128635
+
+        Reviewed by Michael Saboff.
+        
+        Originally nodes just had a codeOrigin. But then we started doing code motion, and we
+        needed to separate the codeOrigin that designated where to exit from the codeOrigin
+        that designated everything else. The &quot;everything else&quot; is actually pretty important:
+        it includes profiling, exception handling, and the actual semantics of the node. For
+        example some nodes use the origin's global object in some way.
+        
+        This all sort of worked except for one quirk: the facilities for creating nodes all
+        assumed that there really was only one origin. LICM would work around this by setting
+        the codeOriginForExitTarget manually. But, that means that:
+        
+        - If we did hoist a node twice, then the second time around, we would forget the node's
+          original exit target.
+        
+        - If we did an insertNode() to insert a node before a hoisted node, the inserted node
+          would have the wrong exit target.
+        
+        Most of the time, if we copy the code origin, we actually want to copy both origins.
+        So, this patch introduces the notion of a NodeOrigin which has two CodeOrigins: a
+        forExit code origin that says where to exit, and a semantic code origin for everything
+        else.
+        
+        This also (annoyingly?) means that we are always more explicit about which code origin
+        we refer to. That means that a lot of &quot;node-&gt;codeOrigin&quot; expressions had to change to
+        &quot;node-&gt;origin.semantic&quot;. This was partly a ploy on my part to ensure that this
+        refactoring was complete: to get the code to compile I really had to audit all uses of
+        CodeOrigin. If, in the future, we find that &quot;node-&gt;origin.semantic&quot; is too cumbersome
+        then we can reintroduce the Node::codeOrigin field. For now I kinda like it though.
+
+        * GNUmakefile.list.am:
+        * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * dfg/DFGAbstractInterpreterInlines.h:
+        (JSC::DFG::AbstractInterpreter&lt;AbstractStateType&gt;::booleanResult):
+        (JSC::DFG::AbstractInterpreter&lt;AbstractStateType&gt;::executeEffects):
+        * dfg/DFGArgumentsSimplificationPhase.cpp:
+        (JSC::DFG::ArgumentsSimplificationPhase::run):
+        (JSC::DFG::ArgumentsSimplificationPhase::observeBadArgumentsUse):
+        (JSC::DFG::ArgumentsSimplificationPhase::observeProperArgumentsUse):
+        (JSC::DFG::ArgumentsSimplificationPhase::isOKToOptimize):
+        * dfg/DFGArrayMode.cpp:
+        (JSC::DFG::ArrayMode::originalArrayStructure):
+        (JSC::DFG::ArrayMode::alreadyChecked):
+        * dfg/DFGByteCodeParser.cpp:
+        (JSC::DFG::ByteCodeParser::addToGraph):
+        * dfg/DFGCFGSimplificationPhase.cpp:
+        (JSC::DFG::CFGSimplificationPhase::run):
+        (JSC::DFG::CFGSimplificationPhase::convertToJump):
+        (JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
+        (JSC::DFG::CFGSimplificationPhase::jettisonBlock):
+        (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
+        * dfg/DFGCPSRethreadingPhase.cpp:
+        (JSC::DFG::CPSRethreadingPhase::addPhiSilently):
+        (JSC::DFG::CPSRethreadingPhase::addPhi):
+        (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
+        (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
+        (JSC::DFG::CPSRethreadingPhase::propagatePhis):
+        * dfg/DFGCSEPhase.cpp:
+        (JSC::DFG::CSEPhase::setLocalStoreElimination):
+        * dfg/DFGClobberize.h:
+        (JSC::DFG::clobberize):
+        * dfg/DFGCommonData.cpp:
+        (JSC::DFG::CommonData::notifyCompilingStructureTransition):
+        * dfg/DFGConstantFoldingPhase.cpp:
+        (JSC::DFG::ConstantFoldingPhase::foldConstants):
+        (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck):
+        * dfg/DFGCriticalEdgeBreakingPhase.cpp:
+        (JSC::DFG::CriticalEdgeBreakingPhase::breakCriticalEdge):
+        * dfg/DFGDCEPhase.cpp:
+        (JSC::DFG::DCEPhase::fixupBlock):
+        * dfg/DFGDisassembler.cpp:
+        (JSC::DFG::Disassembler::createDumpList):
+        * dfg/DFGFixupPhase.cpp:
+        (JSC::DFG::FixupPhase::fixupNode):
+        (JSC::DFG::FixupPhase::createToString):
+        (JSC::DFG::FixupPhase::attemptToForceStringArrayModeByToStringConversion):
+        (JSC::DFG::FixupPhase::convertStringAddUse):
+        (JSC::DFG::FixupPhase::fixupToPrimitive):
+        (JSC::DFG::FixupPhase::fixupToString):
+        (JSC::DFG::FixupPhase::attemptToMakeFastStringAdd):
+        (JSC::DFG::FixupPhase::checkArray):
+        (JSC::DFG::FixupPhase::blessArrayOperation):
+        (JSC::DFG::FixupPhase::fixEdge):
+        (JSC::DFG::FixupPhase::insertStoreBarrier):
+        (JSC::DFG::FixupPhase::fixIntEdge):
+        (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
+        (JSC::DFG::FixupPhase::truncateConstantToInt32):
+        (JSC::DFG::FixupPhase::attemptToMakeGetArrayLength):
+        (JSC::DFG::FixupPhase::attemptToMakeGetTypedArrayByteLength):
+        (JSC::DFG::FixupPhase::convertToGetArrayLength):
+        (JSC::DFG::FixupPhase::prependGetArrayLength):
+        (JSC::DFG::FixupPhase::attemptToMakeGetTypedArrayByteOffset):
+        (JSC::DFG::FixupPhase::addPhantomsIfNecessary):
+        * dfg/DFGGraph.cpp:
+        (JSC::DFG::Graph::dumpCodeOrigin):
+        (JSC::DFG::Graph::amountOfNodeWhiteSpace):
+        (JSC::DFG::Graph::dump):
+        (JSC::DFG::Graph::dumpBlockHeader):
+        * dfg/DFGGraph.h:
+        (JSC::DFG::Graph::hasExitSite):
+        (JSC::DFG::Graph::valueProfileFor):
+        (JSC::DFG::Graph::methodOfGettingAValueProfileFor):
+        * dfg/DFGInvalidationPointInjectionPhase.cpp:
+        (JSC::DFG::InvalidationPointInjectionPhase::handle):
+        (JSC::DFG::InvalidationPointInjectionPhase::insertInvalidationCheck):
+        * dfg/DFGLICMPhase.cpp:
+        (JSC::DFG::LICMPhase::attemptHoist):
+        * dfg/DFGLoopPreHeaderCreationPhase.cpp:
+        (JSC::DFG::createPreHeader):
+        * dfg/DFGNode.h:
+        (JSC::DFG::Node::Node):
+        (JSC::DFG::Node::isStronglyProvedConstantIn):
+        * dfg/DFGNodeOrigin.h: Added.
+        (JSC::DFG::NodeOrigin::NodeOrigin):
+        (JSC::DFG::NodeOrigin::isSet):
+        * dfg/DFGOSREntrypointCreationPhase.cpp:
+        (JSC::DFG::OSREntrypointCreationPhase::run):
+        * dfg/DFGResurrectionForValidationPhase.cpp:
+        (JSC::DFG::ResurrectionForValidationPhase::run):
+        * dfg/DFGSSAConversionPhase.cpp:
+        (JSC::DFG::SSAConversionPhase::run):
+        * dfg/DFGSSALoweringPhase.cpp:
+        (JSC::DFG::SSALoweringPhase::handleNode):
+        (JSC::DFG::SSALoweringPhase::lowerBoundsCheck):
+        * dfg/DFGSpeculativeJIT.cpp:
+        (JSC::DFG::SpeculativeJIT::compileIn):
+        (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
+        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
+        (JSC::DFG::SpeculativeJIT::compileNewTypedArray):
+        * dfg/DFGSpeculativeJIT.h:
+        (JSC::DFG::SpeculativeJIT::masqueradesAsUndefinedWatchpointIsStillValid):
+        (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
+        (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnException):
+        (JSC::DFG::SpeculativeJIT::appendCallSetResult):
+        (JSC::DFG::SpeculativeJIT::appendCall):
+        (JSC::DFG::SpeculativeJIT::speculateStringObjectForStructure):
+        * dfg/DFGSpeculativeJIT32_64.cpp:
+        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
+        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
+        (JSC::DFG::SpeculativeJIT::emitCall):
+        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
+        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
+        (JSC::DFG::SpeculativeJIT::compile):
+        * dfg/DFGSpeculativeJIT64.cpp:
+        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
+        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
+        (JSC::DFG::SpeculativeJIT::emitCall):
+        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
+        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
+        (JSC::DFG::SpeculativeJIT::compile):
+        * dfg/DFGStrengthReductionPhase.cpp:
+        (JSC::DFG::StrengthReductionPhase::convertToIdentityOverChild):
+        (JSC::DFG::StrengthReductionPhase::prepareToFoldTypedArray):
+        * dfg/DFGTierUpCheckInjectionPhase.cpp:
+        (JSC::DFG::TierUpCheckInjectionPhase::run):
+        * dfg/DFGTypeCheckHoistingPhase.cpp:
+        (JSC::DFG::TypeCheckHoistingPhase::run):
+        * dfg/DFGValidate.cpp:
+        (JSC::DFG::Validate::validateSSA):
+        * dfg/DFGWatchpointCollectionPhase.cpp:
+        (JSC::DFG::WatchpointCollectionPhase::handle):
+        (JSC::DFG::WatchpointCollectionPhase::handleEdge):
+        (JSC::DFG::WatchpointCollectionPhase::handleMasqueradesAsUndefined):
+        (JSC::DFG::WatchpointCollectionPhase::globalObject):
+        * ftl/FTLJSCall.cpp:
+        (JSC::FTL::JSCall::link):
+        * ftl/FTLLink.cpp:
+        (JSC::FTL::link):
+        * ftl/FTLLowerDFGToLLVM.cpp:
+        (JSC::FTL::LowerDFGToLLVM::compileNode):
+        (JSC::FTL::LowerDFGToLLVM::compileToThis):
+        (JSC::FTL::LowerDFGToLLVM::compilePutById):
+        (JSC::FTL::LowerDFGToLLVM::compilePutByVal):
+        (JSC::FTL::LowerDFGToLLVM::compileNewArray):
+        (JSC::FTL::LowerDFGToLLVM::compileNewArrayBuffer):
+        (JSC::FTL::LowerDFGToLLVM::compileNewArrayWithSize):
+        (JSC::FTL::LowerDFGToLLVM::compileStringCharAt):
+        (JSC::FTL::LowerDFGToLLVM::compileGetMyScope):
+        (JSC::FTL::LowerDFGToLLVM::compileCheckArgumentsNotCreated):
+        (JSC::FTL::LowerDFGToLLVM::getById):
+        (JSC::FTL::LowerDFGToLLVM::equalNullOrUndefined):
+        (JSC::FTL::LowerDFGToLLVM::speculateStringObjectForStructure):
+        (JSC::FTL::LowerDFGToLLVM::masqueradesAsUndefinedWatchpointIsStillValid):
+        (JSC::FTL::LowerDFGToLLVM::callPreflight):
+
+2014-02-11  Filip Pizlo  &lt;fpizlo@apple.com&gt;
+
</ins><span class="cx">         Fix assertions and incorrect codegen for CompareEq(ObjectOrOther:, Object:)
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=128648
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreGNUmakefilelistam"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/GNUmakefile.list.am (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/GNUmakefile.list.am        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/GNUmakefile.list.am        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -343,6 +343,7 @@
</span><span class="cx">         Source/JavaScriptCore/dfg/DFGNodeAllocator.h \
</span><span class="cx">         Source/JavaScriptCore/dfg/DFGNodeFlags.cpp \
</span><span class="cx">         Source/JavaScriptCore/dfg/DFGNodeFlags.h \
</span><ins>+        Source/JavaScriptCore/dfg/DFGNodeOrigin.h \
</ins><span class="cx">         Source/JavaScriptCore/dfg/DFGNodeType.h \
</span><span class="cx">         Source/JavaScriptCore/dfg/DFGOperations.cpp \
</span><span class="cx">         Source/JavaScriptCore/dfg/DFGOperations.h \
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorevcxprojJavaScriptCorevcxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -953,6 +953,7 @@
</span><span class="cx">     &lt;ClInclude Include=&quot;..\dfg\DFGNode.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\dfg\DFGNodeAllocator.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\dfg\DFGNodeFlags.h&quot; /&gt;
</span><ins>+    &lt;ClInclude Include=&quot;..\dfg\DFGNodeOrigin.h&quot; /&gt;
</ins><span class="cx">     &lt;ClInclude Include=&quot;..\dfg\DFGNodeType.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\dfg\DFGOperations.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\dfg\DFGOSRAvailabilityAnalysisPhase.h&quot; /&gt;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -210,6 +210,7 @@
</span><span class="cx">                 0F2FCCFD18A60070001A27F8 /* DFGScannable.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2FCCF618A60070001A27F8 /* DFGScannable.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 0F2FCCFE18A60070001A27F8 /* DFGThreadData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2FCCF718A60070001A27F8 /* DFGThreadData.cpp */; };
</span><span class="cx">                 0F2FCCFF18A60070001A27F8 /* DFGThreadData.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2FCCF818A60070001A27F8 /* DFGThreadData.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                0F300B7818AB051100A6D72E /* DFGNodeOrigin.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F300B7718AB051100A6D72E /* DFGNodeOrigin.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 0F34B14916D42010001CDA5A /* DFGUseKind.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F34B14716D4200E001CDA5A /* DFGUseKind.cpp */; };
</span><span class="cx">                 0F34B14A16D42013001CDA5A /* DFGUseKind.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F34B14816D4200E001CDA5A /* DFGUseKind.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 0F34B14C16D43E0D001CDA5A /* PolymorphicAccessStructureList.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F34B14B16D43E0C001CDA5A /* PolymorphicAccessStructureList.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -1664,6 +1665,7 @@
</span><span class="cx">                 0F2FCCF618A60070001A27F8 /* DFGScannable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGScannable.h; path = dfg/DFGScannable.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0F2FCCF718A60070001A27F8 /* DFGThreadData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGThreadData.cpp; path = dfg/DFGThreadData.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0F2FCCF818A60070001A27F8 /* DFGThreadData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGThreadData.h; path = dfg/DFGThreadData.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                0F300B7718AB051100A6D72E /* DFGNodeOrigin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGNodeOrigin.h; path = dfg/DFGNodeOrigin.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 0F34B14716D4200E001CDA5A /* DFGUseKind.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGUseKind.cpp; path = dfg/DFGUseKind.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0F34B14816D4200E001CDA5A /* DFGUseKind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGUseKind.h; path = dfg/DFGUseKind.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0F34B14B16D43E0C001CDA5A /* PolymorphicAccessStructureList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolymorphicAccessStructureList.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -4260,6 +4262,7 @@
</span><span class="cx">                                 0FB4B51F16B62772003F696B /* DFGNodeAllocator.h */,
</span><span class="cx">                                 0FA581B7150E952A00B9A2D9 /* DFGNodeFlags.cpp */,
</span><span class="cx">                                 0FA581B8150E952A00B9A2D9 /* DFGNodeFlags.h */,
</span><ins>+                                0F300B7718AB051100A6D72E /* DFGNodeOrigin.h */,
</ins><span class="cx">                                 0FA581B9150E952A00B9A2D9 /* DFGNodeType.h */,
</span><span class="cx">                                 86EC9DBF1328DF82002B2AD7 /* DFGOperations.cpp */,
</span><span class="cx">                                 86EC9DC01328DF82002B2AD7 /* DFGOperations.h */,
</span><span class="lines">@@ -4801,6 +4804,7 @@
</span><span class="cx">                                 95E3BC050E1AE68200B2D1C1 /* CallIdentifier.h in Headers */,
</span><span class="cx">                                 0F0B83B114BCF71800885B4F /* CallLinkInfo.h in Headers */,
</span><span class="cx">                                 0F93329E14CA7DC50085F3C6 /* CallLinkStatus.h in Headers */,
</span><ins>+                                0F300B7818AB051100A6D72E /* DFGNodeOrigin.h in Headers */,
</ins><span class="cx">                                 0F0B83B914BCF95F00885B4F /* CallReturnOffsetToBytecodeOffset.h in Headers */,
</span><span class="cx">                                 0F24E54217EA9F5900ABB217 /* CCallHelpers.h in Headers */,
</span><span class="cx">                                 BC6AAAE50E1F426500AD87D8 /* ClassInfo.h in Headers */,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGAbstractInterpreterInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx"> {
</span><span class="cx">     JSValue childConst = value.value();
</span><span class="cx">     if (childConst) {
</span><del>-        if (childConst.toBoolean(m_codeBlock-&gt;globalObjectFor(node-&gt;codeOrigin)-&gt;globalExec()))
</del><ins>+        if (childConst.toBoolean(m_codeBlock-&gt;globalObjectFor(node-&gt;origin.semantic)-&gt;globalExec()))
</ins><span class="cx">             return DefinitelyTrue;
</span><span class="cx">         return DefinitelyFalse;
</span><span class="cx">     }
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx">     if (isCellSpeculation(value.m_type)
</span><span class="cx">         &amp;&amp; value.m_currentKnownStructure.hasSingleton()) {
</span><span class="cx">         Structure* structure = value.m_currentKnownStructure.singleton();
</span><del>-        if (!structure-&gt;masqueradesAsUndefined(m_codeBlock-&gt;globalObjectFor(node-&gt;codeOrigin))
</del><ins>+        if (!structure-&gt;masqueradesAsUndefined(m_codeBlock-&gt;globalObjectFor(node-&gt;origin.semantic))
</ins><span class="cx">             &amp;&amp; structure-&gt;typeInfo().type() != StringType)
</span><span class="cx">             return DefinitelyTrue;
</span><span class="cx">     }
</span><span class="lines">@@ -343,7 +343,7 @@
</span><span class="cx">         
</span><span class="cx">     case ValueAdd: {
</span><span class="cx">         ASSERT(node-&gt;binaryUseKind() == UntypedUse);
</span><del>-        clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+        clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">         forNode(node).setType(SpecString | SpecBytecodeNumber);
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="lines">@@ -782,7 +782,7 @@
</span><span class="cx">     case IsFunction: {
</span><span class="cx">         node-&gt;setCanExit(
</span><span class="cx">             node-&gt;op() == IsUndefined
</span><del>-            &amp;&amp; m_graph.masqueradesAsUndefinedWatchpointIsStillValid(node-&gt;codeOrigin));
</del><ins>+            &amp;&amp; m_graph.masqueradesAsUndefinedWatchpointIsStillValid(node-&gt;origin.semantic));
</ins><span class="cx">         JSValue child = forNode(node-&gt;child1()).value();
</span><span class="cx">         if (child) {
</span><span class="cx">             bool constantWasSet = true;
</span><span class="lines">@@ -790,7 +790,7 @@
</span><span class="cx">             case IsUndefined:
</span><span class="cx">                 setConstant(node, jsBoolean(
</span><span class="cx">                     child.isCell()
</span><del>-                    ? child.asCell()-&gt;structure()-&gt;masqueradesAsUndefined(m_codeBlock-&gt;globalObjectFor(node-&gt;codeOrigin))
</del><ins>+                    ? child.asCell()-&gt;structure()-&gt;masqueradesAsUndefined(m_codeBlock-&gt;globalObjectFor(node-&gt;origin.semantic))
</ins><span class="cx">                     : child.isUndefined()));
</span><span class="cx">                 break;
</span><span class="cx">             case IsBoolean:
</span><span class="lines">@@ -826,7 +826,7 @@
</span><span class="cx">         JSValue child = forNode(node-&gt;child1()).value();
</span><span class="cx">         AbstractValue&amp; abstractChild = forNode(node-&gt;child1());
</span><span class="cx">         if (child) {
</span><del>-            JSValue typeString = jsTypeStringForValue(*vm, m_codeBlock-&gt;globalObjectFor(node-&gt;codeOrigin), child);
</del><ins>+            JSValue typeString = jsTypeStringForValue(*vm, m_codeBlock-&gt;globalObjectFor(node-&gt;origin.semantic), child);
</ins><span class="cx">             setConstant(node, typeString);
</span><span class="cx">             break;
</span><span class="cx">         }
</span><span class="lines">@@ -989,7 +989,7 @@
</span><span class="cx">             m_state.setIsValid(false);
</span><span class="cx">             break;
</span><span class="cx">         case Array::Generic:
</span><del>-            clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+            clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">             forNode(node).makeHeapTop();
</span><span class="cx">             break;
</span><span class="cx">         case Array::String:
</span><span class="lines">@@ -1004,7 +1004,7 @@
</span><span class="cx">                 // implies an in-bounds access). None of this feels like it's worth it,
</span><span class="cx">                 // so we're going with TOP for now. The same thing applies to
</span><span class="cx">                 // clobbering the world.
</span><del>-                clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+                clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">                 forNode(node).makeHeapTop();
</span><span class="cx">             } else
</span><span class="cx">                 forNode(node).set(m_graph, m_graph.m_vm.stringStructure.get());
</span><span class="lines">@@ -1014,14 +1014,14 @@
</span><span class="cx">             break;
</span><span class="cx">         case Array::Int32:
</span><span class="cx">             if (node-&gt;arrayMode().isOutOfBounds()) {
</span><del>-                clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+                clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">                 forNode(node).makeHeapTop();
</span><span class="cx">             } else
</span><span class="cx">                 forNode(node).setType(SpecInt32);
</span><span class="cx">             break;
</span><span class="cx">         case Array::Double:
</span><span class="cx">             if (node-&gt;arrayMode().isOutOfBounds()) {
</span><del>-                clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+                clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">                 forNode(node).makeHeapTop();
</span><span class="cx">             } else if (node-&gt;arrayMode().isSaneChain())
</span><span class="cx">                 forNode(node).setType(SpecDouble);
</span><span class="lines">@@ -1032,7 +1032,7 @@
</span><span class="cx">         case Array::ArrayStorage:
</span><span class="cx">         case Array::SlowPutArrayStorage:
</span><span class="cx">             if (node-&gt;arrayMode().isOutOfBounds())
</span><del>-                clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+                clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">             forNode(node).makeHeapTop();
</span><span class="cx">             break;
</span><span class="cx">         case Array::Int8Array:
</span><span class="lines">@@ -1083,24 +1083,24 @@
</span><span class="cx">             m_state.setIsValid(false);
</span><span class="cx">             break;
</span><span class="cx">         case Array::Generic:
</span><del>-            clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+            clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">             break;
</span><span class="cx">         case Array::Int32:
</span><span class="cx">             if (node-&gt;arrayMode().isOutOfBounds())
</span><del>-                clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+                clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">             break;
</span><span class="cx">         case Array::Double:
</span><span class="cx">             if (node-&gt;arrayMode().isOutOfBounds())
</span><del>-                clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+                clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">             break;
</span><span class="cx">         case Array::Contiguous:
</span><span class="cx">         case Array::ArrayStorage:
</span><span class="cx">             if (node-&gt;arrayMode().isOutOfBounds())
</span><del>-                clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+                clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">             break;
</span><span class="cx">         case Array::SlowPutArrayStorage:
</span><span class="cx">             if (node-&gt;arrayMode().mayStoreToHole())
</span><del>-                clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+                clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">             break;
</span><span class="cx">         default:
</span><span class="cx">             break;
</span><span class="lines">@@ -1110,13 +1110,13 @@
</span><span class="cx">             
</span><span class="cx">     case ArrayPush:
</span><span class="cx">         node-&gt;setCanExit(true);
</span><del>-        clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+        clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">         forNode(node).setType(SpecBytecodeNumber);
</span><span class="cx">         break;
</span><span class="cx">             
</span><span class="cx">     case ArrayPop:
</span><span class="cx">         node-&gt;setCanExit(true);
</span><del>-        clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+        clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">         forNode(node).makeHeapTop();
</span><span class="cx">         break;
</span><span class="cx">             
</span><span class="lines">@@ -1200,7 +1200,7 @@
</span><span class="cx">         // ToPrimitive will currently forget string constants. But that's not a big
</span><span class="cx">         // deal since we don't do any optimization on those currently.
</span><span class="cx">         
</span><del>-        clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+        clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">         
</span><span class="cx">         SpeculatedType type = source.m_type;
</span><span class="cx">         if (type &amp; ~(SpecFullNumber | SpecString | SpecBoolean))
</span><span class="lines">@@ -1219,7 +1219,7 @@
</span><span class="cx">             // structure.
</span><span class="cx">             filter(
</span><span class="cx">                 node-&gt;child1(),
</span><del>-                m_graph.globalObjectFor(node-&gt;codeOrigin)-&gt;stringObjectStructure());
</del><ins>+                m_graph.globalObjectFor(node-&gt;origin.semantic)-&gt;stringObjectStructure());
</ins><span class="cx">             node-&gt;setCanExit(true); // We could be more precise but it's likely not worth it.
</span><span class="cx">             break;
</span><span class="cx">         case StringOrStringObjectUse:
</span><span class="lines">@@ -1227,7 +1227,7 @@
</span><span class="cx">             break;
</span><span class="cx">         case CellUse:
</span><span class="cx">         case UntypedUse:
</span><del>-            clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+            clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">             break;
</span><span class="cx">         default:
</span><span class="cx">             RELEASE_ASSERT_NOT_REACHED();
</span><span class="lines">@@ -1247,7 +1247,7 @@
</span><span class="cx">         node-&gt;setCanExit(true);
</span><span class="cx">         forNode(node).set(
</span><span class="cx">             m_graph,
</span><del>-            m_graph.globalObjectFor(node-&gt;codeOrigin)-&gt;arrayStructureForIndexingTypeDuringAllocation(node-&gt;indexingType()));
</del><ins>+            m_graph.globalObjectFor(node-&gt;origin.semantic)-&gt;arrayStructureForIndexingTypeDuringAllocation(node-&gt;indexingType()));
</ins><span class="cx">         m_state.setHaveStructures(true);
</span><span class="cx">         break;
</span><span class="cx">         
</span><span class="lines">@@ -1255,7 +1255,7 @@
</span><span class="cx">         node-&gt;setCanExit(true);
</span><span class="cx">         forNode(node).set(
</span><span class="cx">             m_graph,
</span><del>-            m_graph.globalObjectFor(node-&gt;codeOrigin)-&gt;arrayStructureForIndexingTypeDuringAllocation(node-&gt;indexingType()));
</del><ins>+            m_graph.globalObjectFor(node-&gt;origin.semantic)-&gt;arrayStructureForIndexingTypeDuringAllocation(node-&gt;indexingType()));
</ins><span class="cx">         m_state.setHaveStructures(true);
</span><span class="cx">         break;
</span><span class="cx"> 
</span><span class="lines">@@ -1270,7 +1270,7 @@
</span><span class="cx">         case Int32Use:
</span><span class="cx">             break;
</span><span class="cx">         case UntypedUse:
</span><del>-            clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+            clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">             break;
</span><span class="cx">         default:
</span><span class="cx">             RELEASE_ASSERT_NOT_REACHED();
</span><span class="lines">@@ -1278,13 +1278,13 @@
</span><span class="cx">         }
</span><span class="cx">         forNode(node).set(
</span><span class="cx">             m_graph,
</span><del>-            m_graph.globalObjectFor(node-&gt;codeOrigin)-&gt;typedArrayStructure(
</del><ins>+            m_graph.globalObjectFor(node-&gt;origin.semantic)-&gt;typedArrayStructure(
</ins><span class="cx">                 node-&gt;typedArrayType()));
</span><span class="cx">         m_state.setHaveStructures(true);
</span><span class="cx">         break;
</span><span class="cx">             
</span><span class="cx">     case NewRegexp:
</span><del>-        forNode(node).set(m_graph, m_graph.globalObjectFor(node-&gt;codeOrigin)-&gt;regExpStructure());
</del><ins>+        forNode(node).set(m_graph, m_graph.globalObjectFor(node-&gt;origin.semantic)-&gt;regExpStructure());
</ins><span class="cx">         m_state.setHaveStructures(true);
</span><span class="cx">         break;
</span><span class="cx">             
</span><span class="lines">@@ -1292,7 +1292,7 @@
</span><span class="cx">         AbstractValue&amp; source = forNode(node-&gt;child1());
</span><span class="cx">         AbstractValue&amp; destination = forNode(node);
</span><span class="cx">             
</span><del>-        if (m_graph.executableFor(node-&gt;codeOrigin)-&gt;isStrictMode())
</del><ins>+        if (m_graph.executableFor(node-&gt;origin.semantic)-&gt;isStrictMode())
</ins><span class="cx">             destination.makeHeapTop();
</span><span class="cx">         else {
</span><span class="cx">             destination = source;
</span><span class="lines">@@ -1318,7 +1318,7 @@
</span><span class="cx">         
</span><span class="cx">     case CreateActivation:
</span><span class="cx">         forNode(node).set(
</span><del>-            m_graph, m_codeBlock-&gt;globalObjectFor(node-&gt;codeOrigin)-&gt;activationStructure());
</del><ins>+            m_graph, m_codeBlock-&gt;globalObjectFor(node-&gt;origin.semantic)-&gt;activationStructure());
</ins><span class="cx">         m_state.setHaveStructures(true);
</span><span class="cx">         break;
</span><span class="cx">         
</span><span class="lines">@@ -1340,7 +1340,7 @@
</span><span class="cx">     case CheckArgumentsNotCreated:
</span><span class="cx">         if (isEmptySpeculation(
</span><span class="cx">                 m_state.variables().operand(
</span><del>-                    m_graph.argumentsRegisterFor(node-&gt;codeOrigin).offset()).m_type))
</del><ins>+                    m_graph.argumentsRegisterFor(node-&gt;origin.semantic).offset()).m_type))
</ins><span class="cx">             m_state.setFoundConstants(true);
</span><span class="cx">         else
</span><span class="cx">             node-&gt;setCanExit(true);
</span><span class="lines">@@ -1351,21 +1351,21 @@
</span><span class="cx">         // the arguments a bit. Note that this is not sufficient to force constant folding
</span><span class="cx">         // of GetMyArgumentsLength, because GetMyArgumentsLength is a clobbering operation.
</span><span class="cx">         // We perform further optimizations on this later on.
</span><del>-        if (node-&gt;codeOrigin.inlineCallFrame) {
</del><ins>+        if (node-&gt;origin.semantic.inlineCallFrame) {
</ins><span class="cx">             forNode(node).set(
</span><del>-                m_graph, jsNumber(node-&gt;codeOrigin.inlineCallFrame-&gt;arguments.size() - 1));
</del><ins>+                m_graph, jsNumber(node-&gt;origin.semantic.inlineCallFrame-&gt;arguments.size() - 1));
</ins><span class="cx">         } else
</span><span class="cx">             forNode(node).setType(SpecInt32);
</span><span class="cx">         node-&gt;setCanExit(
</span><span class="cx">             !isEmptySpeculation(
</span><span class="cx">                 m_state.variables().operand(
</span><del>-                    m_graph.argumentsRegisterFor(node-&gt;codeOrigin)).m_type));
</del><ins>+                    m_graph.argumentsRegisterFor(node-&gt;origin.semantic)).m_type));
</ins><span class="cx">         break;
</span><span class="cx">         
</span><span class="cx">     case GetMyArgumentsLengthSafe:
</span><span class="cx">         // This potentially clobbers all structures if the arguments object had a getter
</span><span class="cx">         // installed on the length property.
</span><del>-        clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+        clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">         // We currently make no guarantee about what this returns because it does not
</span><span class="cx">         // speculate that the length property is actually a length.
</span><span class="cx">         forNode(node).makeHeapTop();
</span><span class="lines">@@ -1383,7 +1383,7 @@
</span><span class="cx">         node-&gt;setCanExit(true);
</span><span class="cx">         // This potentially clobbers all structures if the property we're accessing has
</span><span class="cx">         // a getter. We don't speculate against this.
</span><del>-        clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+        clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">         // And the result is unknown.
</span><span class="cx">         forNode(node).makeHeapTop();
</span><span class="cx">         break;
</span><span class="lines">@@ -1404,7 +1404,7 @@
</span><span class="cx">     case NewFunctionExpression:
</span><span class="cx">     case NewFunctionNoCheck:
</span><span class="cx">         forNode(node).set(
</span><del>-            m_graph, m_codeBlock-&gt;globalObjectFor(node-&gt;codeOrigin)-&gt;functionStructure());
</del><ins>+            m_graph, m_codeBlock-&gt;globalObjectFor(node-&gt;origin.semantic)-&gt;functionStructure());
</ins><span class="cx">         break;
</span><span class="cx">         
</span><span class="cx">     case GetCallee:
</span><span class="lines">@@ -1436,7 +1436,7 @@
</span><span class="cx">         break;
</span><span class="cx">             
</span><span class="cx">     case PutClosureVar:
</span><del>-        clobberCapturedVars(node-&gt;codeOrigin);
</del><ins>+        clobberCapturedVars(node-&gt;origin.semantic);
</ins><span class="cx">         break;
</span><span class="cx">             
</span><span class="cx">     case GetById:
</span><span class="lines">@@ -1469,7 +1469,7 @@
</span><span class="cx">                 }
</span><span class="cx">             }
</span><span class="cx">         }
</span><del>-        clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+        clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">         forNode(node).makeHeapTop();
</span><span class="cx">         break;
</span><span class="cx">             
</span><span class="lines">@@ -1669,7 +1669,7 @@
</span><span class="cx">         if (Structure* structure = forNode(node-&gt;child1()).bestProvenStructure()) {
</span><span class="cx">             PutByIdStatus status = PutByIdStatus::computeFor(
</span><span class="cx">                 m_graph.m_vm,
</span><del>-                m_graph.globalObjectFor(node-&gt;codeOrigin),
</del><ins>+                m_graph.globalObjectFor(node-&gt;origin.semantic),
</ins><span class="cx">                 structure,
</span><span class="cx">                 m_graph.identifiers()[node-&gt;identifierNumber()],
</span><span class="cx">                 node-&gt;op() == PutByIdDirect);
</span><span class="lines">@@ -1687,13 +1687,13 @@
</span><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="cx">         }
</span><del>-        clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+        clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">         break;
</span><span class="cx">         
</span><span class="cx">     case In:
</span><span class="cx">         // FIXME: We can determine when the property definitely exists based on abstract
</span><span class="cx">         // value information.
</span><del>-        clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+        clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">         forNode(node).setType(SpecBoolean);
</span><span class="cx">         break;
</span><span class="cx">             
</span><span class="lines">@@ -1741,7 +1741,7 @@
</span><span class="cx">     case Call:
</span><span class="cx">     case Construct:
</span><span class="cx">         node-&gt;setCanExit(true);
</span><del>-        clobberWorld(node-&gt;codeOrigin, clobberLimit);
</del><ins>+        clobberWorld(node-&gt;origin.semantic, clobberLimit);
</ins><span class="cx">         forNode(node).makeHeapTop();
</span><span class="cx">         break;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGArgumentsSimplificationPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -190,7 +190,7 @@
</span><span class="cx">                     Node* source = node-&gt;child1().node();
</span><span class="cx">                     VariableAccessData* variableAccessData = node-&gt;variableAccessData();
</span><span class="cx">                     VirtualRegister argumentsRegister =
</span><del>-                        m_graph.uncheckedArgumentsRegisterFor(node-&gt;codeOrigin);
</del><ins>+                        m_graph.uncheckedArgumentsRegisterFor(node-&gt;origin.semantic);
</ins><span class="cx">                     if (source-&gt;op() != CreateArguments &amp;&amp; source-&gt;op() != PhantomArguments) {
</span><span class="cx">                         // Make sure that the source of the SetLocal knows that if it's
</span><span class="cx">                         // a variable that we think is aliased to the arguments, then it
</span><span class="lines">@@ -220,7 +220,7 @@
</span><span class="cx">                         if (argumentsRegister.isValid()
</span><span class="cx">                             &amp;&amp; (variableAccessData-&gt;local() == argumentsRegister
</span><span class="cx">                                 || variableAccessData-&gt;local() == unmodifiedArgumentsRegister(argumentsRegister))) {
</span><del>-                            m_createsArguments.add(node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+                            m_createsArguments.add(node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">                             break;
</span><span class="cx">                         }
</span><span class="cx"> 
</span><span class="lines">@@ -232,19 +232,19 @@
</span><span class="cx">                         ArgumentsAliasingData&amp; data =
</span><span class="cx">                             m_argumentsAliasing.find(variableAccessData)-&gt;value;
</span><span class="cx">                         data.mergeNonArgumentsAssignment();
</span><del>-                        data.mergeCallContext(node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+                        data.mergeCallContext(node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">                         break;
</span><span class="cx">                     }
</span><span class="cx">                     if (argumentsRegister.isValid()
</span><span class="cx">                         &amp;&amp; (variableAccessData-&gt;local() == argumentsRegister
</span><span class="cx">                             || variableAccessData-&gt;local() == unmodifiedArgumentsRegister(argumentsRegister))) {
</span><del>-                        if (node-&gt;codeOrigin.inlineCallFrame == source-&gt;codeOrigin.inlineCallFrame)
</del><ins>+                        if (node-&gt;origin.semantic.inlineCallFrame == source-&gt;origin.semantic.inlineCallFrame)
</ins><span class="cx">                             break;
</span><del>-                        m_createsArguments.add(source-&gt;codeOrigin.inlineCallFrame);
</del><ins>+                        m_createsArguments.add(source-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">                         break;
</span><span class="cx">                     }
</span><span class="cx">                     if (variableAccessData-&gt;isCaptured()) {
</span><del>-                        m_createsArguments.add(source-&gt;codeOrigin.inlineCallFrame);
</del><ins>+                        m_createsArguments.add(source-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">                         break;
</span><span class="cx">                     }
</span><span class="cx">                     ArgumentsAliasingData&amp; data =
</span><span class="lines">@@ -252,8 +252,8 @@
</span><span class="cx">                     data.mergeArgumentsAssignment();
</span><span class="cx">                     // This ensures that the variable's uses are in the same context as
</span><span class="cx">                     // the arguments it is aliasing.
</span><del>-                    data.mergeCallContext(node-&gt;codeOrigin.inlineCallFrame);
-                    data.mergeCallContext(source-&gt;codeOrigin.inlineCallFrame);
</del><ins>+                    data.mergeCallContext(node-&gt;origin.semantic.inlineCallFrame);
+                    data.mergeCallContext(source-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">                     break;
</span><span class="cx">                 }
</span><span class="cx">                     
</span><span class="lines">@@ -264,7 +264,7 @@
</span><span class="cx">                         break;
</span><span class="cx">                     ArgumentsAliasingData&amp; data =
</span><span class="cx">                         m_argumentsAliasing.find(variableAccessData)-&gt;value;
</span><del>-                    data.mergeCallContext(node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+                    data.mergeCallContext(node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">                     break;
</span><span class="cx">                 }
</span><span class="cx">                     
</span><span class="lines">@@ -274,7 +274,7 @@
</span><span class="cx">                         break;
</span><span class="cx">                     ArgumentsAliasingData&amp; data =
</span><span class="cx">                         m_argumentsAliasing.find(variableAccessData)-&gt;value;
</span><del>-                    data.mergeCallContext(node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+                    data.mergeCallContext(node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">                     
</span><span class="cx">                     // If a variable is used in a flush then by definition it escapes.
</span><span class="cx">                     data.escapes = true;
</span><span class="lines">@@ -288,7 +288,7 @@
</span><span class="cx">                     ArgumentsAliasingData&amp; data =
</span><span class="cx">                         m_argumentsAliasing.find(variableAccessData)-&gt;value;
</span><span class="cx">                     data.mergeNonArgumentsAssignment();
</span><del>-                    data.mergeCallContext(node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+                    data.mergeCallContext(node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">                     break;
</span><span class="cx">                 }
</span><span class="cx">                     
</span><span class="lines">@@ -374,7 +374,7 @@
</span><span class="cx">                 if (data.isValid())
</span><span class="cx">                     continue;
</span><span class="cx">                 
</span><del>-                m_createsArguments.add(source-&gt;codeOrigin.inlineCallFrame);
</del><ins>+                m_createsArguments.add(source-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="lines">@@ -392,13 +392,13 @@
</span><span class="cx">                     if (source-&gt;op() != CreateArguments)
</span><span class="cx">                         break;
</span><span class="cx">                     
</span><del>-                    if (m_createsArguments.contains(source-&gt;codeOrigin.inlineCallFrame))
</del><ins>+                    if (m_createsArguments.contains(source-&gt;origin.semantic.inlineCallFrame))
</ins><span class="cx">                         break;
</span><span class="cx">                     
</span><span class="cx">                     VariableAccessData* variableAccessData = node-&gt;variableAccessData();
</span><span class="cx">                     
</span><del>-                    if (m_graph.argumentsRegisterFor(node-&gt;codeOrigin) == variableAccessData-&gt;local()
-                        || unmodifiedArgumentsRegister(m_graph.argumentsRegisterFor(node-&gt;codeOrigin)) == variableAccessData-&gt;local())
</del><ins>+                    if (m_graph.argumentsRegisterFor(node-&gt;origin.semantic) == variableAccessData-&gt;local()
+                        || unmodifiedArgumentsRegister(m_graph.argumentsRegisterFor(node-&gt;origin.semantic)) == variableAccessData-&gt;local())
</ins><span class="cx">                         break;
</span><span class="cx"> 
</span><span class="cx">                     if (variableAccessData-&gt;mergeIsArgumentsAlias(true)) {
</span><span class="lines">@@ -421,7 +421,7 @@
</span><span class="cx">                     
</span><span class="cx">                     if (variableAccessData-&gt;isCaptured()
</span><span class="cx">                         || !m_argumentsAliasing.find(variableAccessData)-&gt;value.isValid()
</span><del>-                        || m_createsArguments.contains(node-&gt;codeOrigin.inlineCallFrame))
</del><ins>+                        || m_createsArguments.contains(node-&gt;origin.semantic.inlineCallFrame))
</ins><span class="cx">                         break;
</span><span class="cx">                     
</span><span class="cx">                     RELEASE_ASSERT_NOT_REACHED();
</span><span class="lines">@@ -468,7 +468,7 @@
</span><span class="cx">                         break;
</span><span class="cx">                     
</span><span class="cx">                     insertionSet.insertNode(
</span><del>-                        indexInBlock, SpecNone, Phantom, node-&gt;codeOrigin, node-&gt;child1());
</del><ins>+                        indexInBlock, SpecNone, Phantom, node-&gt;origin, node-&gt;child1());
</ins><span class="cx">                     
</span><span class="cx">                     node-&gt;child1() = node-&gt;child2();
</span><span class="cx">                     node-&gt;child2() = Edge();
</span><span class="lines">@@ -486,7 +486,7 @@
</span><span class="cx">                         break;
</span><span class="cx">                     
</span><span class="cx">                     insertionSet.insertNode(
</span><del>-                        indexInBlock, SpecNone, Phantom, node-&gt;codeOrigin, node-&gt;child1());
</del><ins>+                        indexInBlock, SpecNone, Phantom, node-&gt;origin, node-&gt;child1());
</ins><span class="cx">                     
</span><span class="cx">                     node-&gt;child1() = Edge();
</span><span class="cx">                     node-&gt;setOpAndDefaultFlags(GetMyArgumentsLength);
</span><span class="lines">@@ -497,7 +497,7 @@
</span><span class="cx">                     
</span><span class="cx">                 case GetMyArgumentsLength:
</span><span class="cx">                 case GetMyArgumentsLengthSafe: {
</span><del>-                    if (m_createsArguments.contains(node-&gt;codeOrigin.inlineCallFrame)) {
</del><ins>+                    if (m_createsArguments.contains(node-&gt;origin.semantic.inlineCallFrame)) {
</ins><span class="cx">                         ASSERT(node-&gt;op() == GetMyArgumentsLengthSafe);
</span><span class="cx">                         break;
</span><span class="cx">                     }
</span><span class="lines">@@ -506,24 +506,24 @@
</span><span class="cx">                         changed = true;
</span><span class="cx">                     }
</span><span class="cx">                     
</span><del>-                    CodeOrigin codeOrigin = node-&gt;codeOrigin;
-                    if (!codeOrigin.inlineCallFrame)
</del><ins>+                    NodeOrigin origin = node-&gt;origin;
+                    if (!origin.semantic.inlineCallFrame)
</ins><span class="cx">                         break;
</span><span class="cx">                     
</span><span class="cx">                     // We know exactly what this will return. But only after we have checked
</span><span class="cx">                     // that nobody has escaped our arguments.
</span><span class="cx">                     insertionSet.insertNode(
</span><del>-                        indexInBlock, SpecNone, CheckArgumentsNotCreated, codeOrigin);
</del><ins>+                        indexInBlock, SpecNone, CheckArgumentsNotCreated, origin);
</ins><span class="cx">                     
</span><span class="cx">                     m_graph.convertToConstant(
</span><del>-                        node, jsNumber(codeOrigin.inlineCallFrame-&gt;arguments.size() - 1));
</del><ins>+                        node, jsNumber(origin.semantic.inlineCallFrame-&gt;arguments.size() - 1));
</ins><span class="cx">                     changed = true;
</span><span class="cx">                     break;
</span><span class="cx">                 }
</span><span class="cx">                     
</span><span class="cx">                 case GetMyArgumentByVal:
</span><span class="cx">                 case GetMyArgumentByValSafe: {
</span><del>-                    if (m_createsArguments.contains(node-&gt;codeOrigin.inlineCallFrame)) {
</del><ins>+                    if (m_createsArguments.contains(node-&gt;origin.semantic.inlineCallFrame)) {
</ins><span class="cx">                         ASSERT(node-&gt;op() == GetMyArgumentByValSafe);
</span><span class="cx">                         break;
</span><span class="cx">                     }
</span><span class="lines">@@ -531,7 +531,7 @@
</span><span class="cx">                         node-&gt;setOp(GetMyArgumentByVal);
</span><span class="cx">                         changed = true;
</span><span class="cx">                     }
</span><del>-                    if (!node-&gt;codeOrigin.inlineCallFrame)
</del><ins>+                    if (!node-&gt;origin.semantic.inlineCallFrame)
</ins><span class="cx">                         break;
</span><span class="cx">                     if (!node-&gt;child1()-&gt;hasConstant())
</span><span class="cx">                         break;
</span><span class="lines">@@ -541,7 +541,7 @@
</span><span class="cx">                     int32_t index = value.asInt32();
</span><span class="cx">                     if (index &lt; 0
</span><span class="cx">                         || static_cast&lt;size_t&gt;(index + 1) &gt;=
</span><del>-                            node-&gt;codeOrigin.inlineCallFrame-&gt;arguments.size())
</del><ins>+                            node-&gt;origin.semantic.inlineCallFrame-&gt;arguments.size())
</ins><span class="cx">                         break;
</span><span class="cx">                     
</span><span class="cx">                     // We know which argument this is accessing. But only after we have checked
</span><span class="lines">@@ -553,26 +553,25 @@
</span><span class="cx">                     // has run - therefore it makes little sense to link the GetLocal operation
</span><span class="cx">                     // into the VariableAccessData and Phi graphs.
</span><span class="cx"> 
</span><del>-                    CodeOrigin codeOrigin = node-&gt;codeOrigin;
</del><ins>+                    NodeOrigin origin = node-&gt;origin;
</ins><span class="cx">                     AdjacencyList children = node-&gt;children;
</span><span class="cx">                     
</span><span class="cx">                     node-&gt;convertToGetLocalUnlinked(
</span><span class="cx">                         VirtualRegister(
</span><del>-                            node-&gt;codeOrigin.inlineCallFrame-&gt;stackOffset +
-                            m_graph.baselineCodeBlockFor(node-&gt;codeOrigin)-&gt;argumentIndexAfterCapture(index)));
</del><ins>+                            origin.semantic.inlineCallFrame-&gt;stackOffset +
+                            m_graph.baselineCodeBlockFor(origin.semantic)-&gt;argumentIndexAfterCapture(index)));
</ins><span class="cx"> 
</span><span class="cx">                     insertionSet.insertNode(
</span><del>-                        indexInBlock, SpecNone, CheckArgumentsNotCreated,
-                        codeOrigin);
</del><ins>+                        indexInBlock, SpecNone, CheckArgumentsNotCreated, origin);
</ins><span class="cx">                     insertionSet.insertNode(
</span><del>-                        indexInBlock, SpecNone, Phantom, codeOrigin, children);
</del><ins>+                        indexInBlock, SpecNone, Phantom, origin, children);
</ins><span class="cx">                     
</span><span class="cx">                     changed = true;
</span><span class="cx">                     break;
</span><span class="cx">                 }
</span><span class="cx">                     
</span><span class="cx">                 case TearOffArguments: {
</span><del>-                    if (m_createsArguments.contains(node-&gt;codeOrigin.inlineCallFrame))
</del><ins>+                    if (m_createsArguments.contains(node-&gt;origin.semantic.inlineCallFrame))
</ins><span class="cx">                         continue;
</span><span class="cx">                     
</span><span class="cx">                     node-&gt;convertToPhantom();
</span><span class="lines">@@ -599,10 +598,10 @@
</span><span class="cx">                 // PhantomArguments is a non-executing node that just indicates
</span><span class="cx">                 // that the node should be reified as an arguments object on OSR
</span><span class="cx">                 // exit.
</span><del>-                if (m_createsArguments.contains(node-&gt;codeOrigin.inlineCallFrame))
</del><ins>+                if (m_createsArguments.contains(node-&gt;origin.semantic.inlineCallFrame))
</ins><span class="cx">                     continue;
</span><span class="cx">                 insertionSet.insertNode(
</span><del>-                    indexInBlock, SpecNone, Phantom, node-&gt;codeOrigin, node-&gt;children);
</del><ins>+                    indexInBlock, SpecNone, Phantom, node-&gt;origin, node-&gt;children);
</ins><span class="cx">                 node-&gt;setOpAndDefaultFlags(PhantomArguments);
</span><span class="cx">                 node-&gt;children.reset();
</span><span class="cx">                 changed = true;
</span><span class="lines">@@ -655,16 +654,17 @@
</span><span class="cx">         
</span><span class="cx">         switch (node-&gt;op()) {
</span><span class="cx">         case CreateArguments: {
</span><del>-            m_createsArguments.add(node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+            m_createsArguments.add(node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx">             
</span><span class="cx">         case GetLocal: {
</span><del>-            VirtualRegister argumentsRegister = m_graph.uncheckedArgumentsRegisterFor(node-&gt;codeOrigin);
</del><ins>+            VirtualRegister argumentsRegister =
+                m_graph.uncheckedArgumentsRegisterFor(node-&gt;origin.semantic);
</ins><span class="cx">             if (argumentsRegister.isValid()
</span><span class="cx">                 &amp;&amp; (node-&gt;local() == argumentsRegister
</span><span class="cx">                     || node-&gt;local() == unmodifiedArgumentsRegister(argumentsRegister))) {
</span><del>-                m_createsArguments.add(node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+                m_createsArguments.add(node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="cx">             
</span><span class="lines">@@ -703,17 +703,17 @@
</span><span class="cx">             // 2) If we're accessing arguments we got from the heap!
</span><span class="cx">                             
</span><span class="cx">             if (edge-&gt;op() == CreateArguments
</span><del>-                &amp;&amp; node-&gt;codeOrigin.inlineCallFrame
-                    != edge-&gt;codeOrigin.inlineCallFrame)
-                m_createsArguments.add(edge-&gt;codeOrigin.inlineCallFrame);
</del><ins>+                &amp;&amp; node-&gt;origin.semantic.inlineCallFrame
+                    != edge-&gt;origin.semantic.inlineCallFrame)
+                m_createsArguments.add(edge-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">             
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">                         
</span><span class="cx">         VariableAccessData* variableAccessData = edge-&gt;variableAccessData();
</span><del>-        if (edge-&gt;local() == m_graph.uncheckedArgumentsRegisterFor(edge-&gt;codeOrigin)
-            &amp;&amp; node-&gt;codeOrigin.inlineCallFrame != edge-&gt;codeOrigin.inlineCallFrame) {
-            m_createsArguments.add(edge-&gt;codeOrigin.inlineCallFrame);
</del><ins>+        if (edge-&gt;local() == m_graph.uncheckedArgumentsRegisterFor(edge-&gt;origin.semantic)
+            &amp;&amp; node-&gt;origin.semantic.inlineCallFrame != edge-&gt;origin.semantic.inlineCallFrame) {
+            m_createsArguments.add(edge-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -721,18 +721,19 @@
</span><span class="cx">             return;
</span><span class="cx">         
</span><span class="cx">         ArgumentsAliasingData&amp; data = m_argumentsAliasing.find(variableAccessData)-&gt;value;
</span><del>-        data.mergeCallContext(node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+        data.mergeCallContext(node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     bool isOKToOptimize(Node* source)
</span><span class="cx">     {
</span><del>-        if (m_createsArguments.contains(source-&gt;codeOrigin.inlineCallFrame))
</del><ins>+        if (m_createsArguments.contains(source-&gt;origin.semantic.inlineCallFrame))
</ins><span class="cx">             return false;
</span><span class="cx">         
</span><span class="cx">         switch (source-&gt;op()) {
</span><span class="cx">         case GetLocal: {
</span><span class="cx">             VariableAccessData* variableAccessData = source-&gt;variableAccessData();
</span><del>-            VirtualRegister argumentsRegister = m_graph.uncheckedArgumentsRegisterFor(source-&gt;codeOrigin);
</del><ins>+            VirtualRegister argumentsRegister =
+                m_graph.uncheckedArgumentsRegisterFor(source-&gt;origin.semantic);
</ins><span class="cx">             if (!argumentsRegister.isValid())
</span><span class="cx">                 break;
</span><span class="cx">             if (argumentsRegister == variableAccessData-&gt;local())
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGArrayModecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGArrayMode.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGArrayMode.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGArrayMode.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -276,7 +276,7 @@
</span><span class="cx"> 
</span><span class="cx"> Structure* ArrayMode::originalArrayStructure(Graph&amp; graph, Node* node) const
</span><span class="cx"> {
</span><del>-    return originalArrayStructure(graph, node-&gt;codeOrigin);
</del><ins>+    return originalArrayStructure(graph, node-&gt;origin.semantic);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool ArrayMode::alreadyChecked(Graph&amp; graph, Node* node, AbstractValue&amp; value, IndexingType shape) const
</span><span class="lines">@@ -286,7 +286,7 @@
</span><span class="cx">         return value.m_currentKnownStructure.hasSingleton()
</span><span class="cx">             &amp;&amp; (value.m_currentKnownStructure.singleton()-&gt;indexingType() &amp; IndexingShapeMask) == shape
</span><span class="cx">             &amp;&amp; (value.m_currentKnownStructure.singleton()-&gt;indexingType() &amp; IsArray)
</span><del>-            &amp;&amp; graph.globalObjectFor(node-&gt;codeOrigin)-&gt;isOriginalArrayStructure(value.m_currentKnownStructure.singleton());
</del><ins>+            &amp;&amp; graph.globalObjectFor(node-&gt;origin.semantic)-&gt;isOriginalArrayStructure(value.m_currentKnownStructure.singleton());
</ins><span class="cx">         
</span><span class="cx">     case Array::Array:
</span><span class="cx">         if (arrayModesAlreadyChecked(value.m_arrayModes, asArrayModes(shape | IsArray)))
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGByteCodeParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -726,7 +726,8 @@
</span><span class="cx">     Node* addToGraph(NodeType op, Node* child1 = 0, Node* child2 = 0, Node* child3 = 0)
</span><span class="cx">     {
</span><span class="cx">         Node* result = m_graph.addNode(
</span><del>-            SpecNone, op, currentCodeOrigin(), Edge(child1), Edge(child2), Edge(child3));
</del><ins>+            SpecNone, op, NodeOrigin(currentCodeOrigin()), Edge(child1), Edge(child2),
+            Edge(child3));
</ins><span class="cx">         ASSERT(op != Phi);
</span><span class="cx">         m_currentBlock-&gt;append(result);
</span><span class="cx">         return result;
</span><span class="lines">@@ -734,7 +735,7 @@
</span><span class="cx">     Node* addToGraph(NodeType op, Edge child1, Edge child2 = Edge(), Edge child3 = Edge())
</span><span class="cx">     {
</span><span class="cx">         Node* result = m_graph.addNode(
</span><del>-            SpecNone, op, currentCodeOrigin(), child1, child2, child3);
</del><ins>+            SpecNone, op, NodeOrigin(currentCodeOrigin()), child1, child2, child3);
</ins><span class="cx">         ASSERT(op != Phi);
</span><span class="cx">         m_currentBlock-&gt;append(result);
</span><span class="cx">         return result;
</span><span class="lines">@@ -742,7 +743,8 @@
</span><span class="cx">     Node* addToGraph(NodeType op, OpInfo info, Node* child1 = 0, Node* child2 = 0, Node* child3 = 0)
</span><span class="cx">     {
</span><span class="cx">         Node* result = m_graph.addNode(
</span><del>-            SpecNone, op, currentCodeOrigin(), info, Edge(child1), Edge(child2), Edge(child3));
</del><ins>+            SpecNone, op, NodeOrigin(currentCodeOrigin()), info, Edge(child1), Edge(child2),
+            Edge(child3));
</ins><span class="cx">         ASSERT(op != Phi);
</span><span class="cx">         m_currentBlock-&gt;append(result);
</span><span class="cx">         return result;
</span><span class="lines">@@ -750,7 +752,7 @@
</span><span class="cx">     Node* addToGraph(NodeType op, OpInfo info1, OpInfo info2, Node* child1 = 0, Node* child2 = 0, Node* child3 = 0)
</span><span class="cx">     {
</span><span class="cx">         Node* result = m_graph.addNode(
</span><del>-            SpecNone, op, currentCodeOrigin(), info1, info2,
</del><ins>+            SpecNone, op, NodeOrigin(currentCodeOrigin()), info1, info2,
</ins><span class="cx">             Edge(child1), Edge(child2), Edge(child3));
</span><span class="cx">         ASSERT(op != Phi);
</span><span class="cx">         m_currentBlock-&gt;append(result);
</span><span class="lines">@@ -760,7 +762,7 @@
</span><span class="cx">     Node* addToGraph(Node::VarArgTag, NodeType op, OpInfo info1, OpInfo info2)
</span><span class="cx">     {
</span><span class="cx">         Node* result = m_graph.addNode(
</span><del>-            SpecNone, Node::VarArg, op, currentCodeOrigin(), info1, info2,
</del><ins>+            SpecNone, Node::VarArg, op, NodeOrigin(currentCodeOrigin()), info1, info2,
</ins><span class="cx">             m_graph.m_varArgChildren.size() - m_numPassedVarArgs, m_numPassedVarArgs);
</span><span class="cx">         ASSERT(op != Phi);
</span><span class="cx">         m_currentBlock-&gt;append(result);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGCFGSimplificationPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -102,14 +102,14 @@
</span><span class="cx">                             m_graph.dethread();
</span><span class="cx">                         
</span><span class="cx">                             ASSERT(block-&gt;last()-&gt;isTerminal());
</span><del>-                            CodeOrigin boundaryCodeOrigin = block-&gt;last()-&gt;codeOrigin;
</del><ins>+                            NodeOrigin boundaryNodeOrigin = block-&gt;last()-&gt;origin;
</ins><span class="cx">                             block-&gt;last()-&gt;convertToPhantom();
</span><span class="cx">                             ASSERT(block-&gt;last()-&gt;refCount() == 1);
</span><span class="cx">                         
</span><del>-                            jettisonBlock(block, jettisonedBlock, boundaryCodeOrigin);
</del><ins>+                            jettisonBlock(block, jettisonedBlock, boundaryNodeOrigin);
</ins><span class="cx">                         
</span><span class="cx">                             block-&gt;appendNode(
</span><del>-                                m_graph, SpecNone, Jump, boundaryCodeOrigin,
</del><ins>+                                m_graph, SpecNone, Jump, boundaryNodeOrigin,
</ins><span class="cx">                                 OpInfo(targetBlock));
</span><span class="cx">                         }
</span><span class="cx">                         innerChanged = outerChanged = true;
</span><span class="lines">@@ -181,12 +181,12 @@
</span><span class="cx">                                 m_graph.dump();
</span><span class="cx">                             m_graph.dethread();
</span><span class="cx">                             
</span><del>-                            CodeOrigin boundaryCodeOrigin = block-&gt;last()-&gt;codeOrigin;
</del><ins>+                            NodeOrigin boundaryNodeOrigin = block-&gt;last()-&gt;origin;
</ins><span class="cx">                             block-&gt;last()-&gt;convertToPhantom();
</span><span class="cx">                             for (unsigned i = jettisonedBlocks.size(); i--;)
</span><del>-                                jettisonBlock(block, jettisonedBlocks[i], boundaryCodeOrigin);
</del><ins>+                                jettisonBlock(block, jettisonedBlocks[i], boundaryNodeOrigin);
</ins><span class="cx">                             block-&gt;appendNode(
</span><del>-                                m_graph, SpecNone, Jump, boundaryCodeOrigin, OpInfo(targetBlock));
</del><ins>+                                m_graph, SpecNone, Jump, boundaryNodeOrigin, OpInfo(targetBlock));
</ins><span class="cx">                         }
</span><span class="cx">                         innerChanged = outerChanged = true;
</span><span class="cx">                         break;
</span><span class="lines">@@ -258,12 +258,11 @@
</span><span class="cx">             ASSERT(branch-&gt;refCount() == 1);
</span><span class="cx">             
</span><span class="cx">             block-&gt;appendNode(
</span><del>-                m_graph, SpecNone, Jump, branch-&gt;codeOrigin,
-                OpInfo(targetBlock));
</del><ins>+                m_graph, SpecNone, Jump, branch-&gt;origin, OpInfo(targetBlock));
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void keepOperandAlive(BasicBlock* block, BasicBlock* jettisonedBlock, CodeOrigin codeOrigin, VirtualRegister operand)
</del><ins>+    void keepOperandAlive(BasicBlock* block, BasicBlock* jettisonedBlock, NodeOrigin nodeOrigin, VirtualRegister operand)
</ins><span class="cx">     {
</span><span class="cx">         Node* livenessNode = jettisonedBlock-&gt;variablesAtHead.operand(operand);
</span><span class="cx">         if (!livenessNode)
</span><span class="lines">@@ -271,16 +270,16 @@
</span><span class="cx">         if (livenessNode-&gt;variableAccessData()-&gt;isCaptured())
</span><span class="cx">             return;
</span><span class="cx">         block-&gt;appendNode(
</span><del>-            m_graph, SpecNone, PhantomLocal, codeOrigin, 
</del><ins>+            m_graph, SpecNone, PhantomLocal, nodeOrigin, 
</ins><span class="cx">             OpInfo(livenessNode-&gt;variableAccessData()));
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    void jettisonBlock(BasicBlock* block, BasicBlock* jettisonedBlock, CodeOrigin boundaryCodeOrigin)
</del><ins>+    void jettisonBlock(BasicBlock* block, BasicBlock* jettisonedBlock, NodeOrigin boundaryNodeOrigin)
</ins><span class="cx">     {
</span><span class="cx">         for (size_t i = 0; i &lt; jettisonedBlock-&gt;variablesAtHead.numberOfArguments(); ++i)
</span><del>-            keepOperandAlive(block, jettisonedBlock, boundaryCodeOrigin, virtualRegisterForArgument(i));
</del><ins>+            keepOperandAlive(block, jettisonedBlock, boundaryNodeOrigin, virtualRegisterForArgument(i));
</ins><span class="cx">         for (size_t i = 0; i &lt; jettisonedBlock-&gt;variablesAtHead.numberOfLocals(); ++i)
</span><del>-            keepOperandAlive(block, jettisonedBlock, boundaryCodeOrigin, virtualRegisterForLocal(i));
</del><ins>+            keepOperandAlive(block, jettisonedBlock, boundaryNodeOrigin, virtualRegisterForLocal(i));
</ins><span class="cx">         
</span><span class="cx">         fixJettisonedPredecessors(block, jettisonedBlock);
</span><span class="cx">     }
</span><span class="lines">@@ -315,7 +314,7 @@
</span><span class="cx">         // Remove the terminal of firstBlock since we don't need it anymore. Well, we don't
</span><span class="cx">         // really remove it; we actually turn it into a Phantom.
</span><span class="cx">         ASSERT(firstBlock-&gt;last()-&gt;isTerminal());
</span><del>-        CodeOrigin boundaryCodeOrigin = firstBlock-&gt;last()-&gt;codeOrigin;
</del><ins>+        NodeOrigin boundaryNodeOrigin = firstBlock-&gt;last()-&gt;origin;
</ins><span class="cx">         firstBlock-&gt;last()-&gt;convertToPhantom();
</span><span class="cx">         ASSERT(firstBlock-&gt;last()-&gt;refCount() == 1);
</span><span class="cx">         
</span><span class="lines">@@ -327,9 +326,9 @@
</span><span class="cx">             // different path than secondBlock.
</span><span class="cx">             
</span><span class="cx">             for (size_t i = 0; i &lt; jettisonedBlock-&gt;variablesAtHead.numberOfArguments(); ++i)
</span><del>-                keepOperandAlive(firstBlock, jettisonedBlock, boundaryCodeOrigin, virtualRegisterForArgument(i));
</del><ins>+                keepOperandAlive(firstBlock, jettisonedBlock, boundaryNodeOrigin, virtualRegisterForArgument(i));
</ins><span class="cx">             for (size_t i = 0; i &lt; jettisonedBlock-&gt;variablesAtHead.numberOfLocals(); ++i)
</span><del>-                keepOperandAlive(firstBlock, jettisonedBlock, boundaryCodeOrigin, virtualRegisterForLocal(i));
</del><ins>+                keepOperandAlive(firstBlock, jettisonedBlock, boundaryNodeOrigin, virtualRegisterForLocal(i));
</ins><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         for (size_t i = 0; i &lt; secondBlock-&gt;phis.size(); ++i)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGCPSRethreadingPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -127,25 +127,25 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    ALWAYS_INLINE Node* addPhiSilently(BasicBlock* block, const CodeOrigin&amp; codeOrigin, VariableAccessData* variable)
</del><ins>+    ALWAYS_INLINE Node* addPhiSilently(BasicBlock* block, const NodeOrigin&amp; origin, VariableAccessData* variable)
</ins><span class="cx">     {
</span><del>-        Node* result = m_graph.addNode(SpecNone, Phi, codeOrigin, OpInfo(variable));
</del><ins>+        Node* result = m_graph.addNode(SpecNone, Phi, origin, OpInfo(variable));
</ins><span class="cx">         block-&gt;phis.append(result);
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     template&lt;OperandKind operandKind&gt;
</span><del>-    ALWAYS_INLINE Node* addPhi(BasicBlock* block, const CodeOrigin&amp; codeOrigin, VariableAccessData* variable, size_t index)
</del><ins>+    ALWAYS_INLINE Node* addPhi(BasicBlock* block, const NodeOrigin&amp; origin, VariableAccessData* variable, size_t index)
</ins><span class="cx">     {
</span><del>-        Node* result = addPhiSilently(block, codeOrigin, variable);
</del><ins>+        Node* result = addPhiSilently(block, origin, variable);
</ins><span class="cx">         phiStackFor&lt;operandKind&gt;().append(PhiStackEntry(block, index, result));
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     template&lt;OperandKind operandKind&gt;
</span><del>-    ALWAYS_INLINE Node* addPhi(const CodeOrigin&amp; codeOrigin, VariableAccessData* variable, size_t index)
</del><ins>+    ALWAYS_INLINE Node* addPhi(const NodeOrigin&amp; origin, VariableAccessData* variable, size_t index)
</ins><span class="cx">     {
</span><del>-        return addPhi&lt;operandKind&gt;(m_block, codeOrigin, variable, index);
</del><ins>+        return addPhi&lt;operandKind&gt;(m_block, origin, variable, index);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     template&lt;OperandKind operandKind&gt;
</span><span class="lines">@@ -209,7 +209,7 @@
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         variable-&gt;setIsLoadedFrom(true);
</span><del>-        Node* phi = addPhi&lt;operandKind&gt;(node-&gt;codeOrigin, variable, idx);
</del><ins>+        Node* phi = addPhi&lt;operandKind&gt;(node-&gt;origin, variable, idx);
</ins><span class="cx">         node-&gt;children.setChild1(Edge(phi));
</span><span class="cx">         m_block-&gt;variablesAtHead.atFor&lt;operandKind&gt;(idx) = phi;
</span><span class="cx">         m_block-&gt;variablesAtTail.atFor&lt;operandKind&gt;(idx) = node;
</span><span class="lines">@@ -277,7 +277,7 @@
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         variable-&gt;setIsLoadedFrom(true);
</span><del>-        node-&gt;children.setChild1(Edge(addPhi&lt;operandKind&gt;(node-&gt;codeOrigin, variable, idx)));
</del><ins>+        node-&gt;children.setChild1(Edge(addPhi&lt;operandKind&gt;(node-&gt;origin, variable, idx)));
</ins><span class="cx">         m_block-&gt;variablesAtHead.atFor&lt;operandKind&gt;(idx) = node;
</span><span class="cx">         m_block-&gt;variablesAtTail.atFor&lt;operandKind&gt;(idx) = node;
</span><span class="cx">     }
</span><span class="lines">@@ -419,7 +419,7 @@
</span><span class="cx">                 
</span><span class="cx">                 Node* variableInPrevious = predecessorBlock-&gt;variablesAtTail.atFor&lt;operandKind&gt;(index);
</span><span class="cx">                 if (!variableInPrevious) {
</span><del>-                    variableInPrevious = addPhi&lt;operandKind&gt;(predecessorBlock, currentPhi-&gt;codeOrigin, variable, index);
</del><ins>+                    variableInPrevious = addPhi&lt;operandKind&gt;(predecessorBlock, currentPhi-&gt;origin, variable, index);
</ins><span class="cx">                     predecessorBlock-&gt;variablesAtTail.atFor&lt;operandKind&gt;(index) = variableInPrevious;
</span><span class="cx">                     predecessorBlock-&gt;variablesAtHead.atFor&lt;operandKind&gt;(index) = variableInPrevious;
</span><span class="cx">                 } else {
</span><span class="lines">@@ -453,7 +453,7 @@
</span><span class="cx">                     continue;
</span><span class="cx">                 }
</span><span class="cx">                 
</span><del>-                Node* newPhi = addPhiSilently(block, currentPhi-&gt;codeOrigin, variable);
</del><ins>+                Node* newPhi = addPhiSilently(block, currentPhi-&gt;origin, variable);
</ins><span class="cx">                 newPhi-&gt;children = currentPhi-&gt;children;
</span><span class="cx">                 currentPhi-&gt;children.initialize(newPhi, variableInPrevious, 0);
</span><span class="cx">             }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGCSEPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -963,7 +963,7 @@
</span><span class="cx">                 
</span><span class="cx">             case GetMyScope:
</span><span class="cx">             case SkipTopScope:
</span><del>-                if (node-&gt;codeOrigin.inlineCallFrame)
</del><ins>+                if (node-&gt;origin.semantic.inlineCallFrame)
</ins><span class="cx">                     break;
</span><span class="cx">                 if (m_graph.uncheckedActivationRegister() == local)
</span><span class="cx">                     result.mayBeAccessed = true;
</span><span class="lines">@@ -972,7 +972,7 @@
</span><span class="cx">             case CheckArgumentsNotCreated:
</span><span class="cx">             case GetMyArgumentsLength:
</span><span class="cx">             case GetMyArgumentsLengthSafe:
</span><del>-                if (m_graph.uncheckedArgumentsRegisterFor(node-&gt;codeOrigin) == local)
</del><ins>+                if (m_graph.uncheckedArgumentsRegisterFor(node-&gt;origin.semantic) == local)
</ins><span class="cx">                     result.mayBeAccessed = true;
</span><span class="cx">                 break;
</span><span class="cx">                 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGClobberizeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGClobberize.h (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGClobberize.h        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGClobberize.h        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -604,7 +604,7 @@
</span><span class="cx">         return;
</span><span class="cx">         
</span><span class="cx">     case GetMyArgumentsLength:
</span><del>-        read(AbstractHeap(Variables, graph.argumentsRegisterFor(node-&gt;codeOrigin)));
</del><ins>+        read(AbstractHeap(Variables, graph.argumentsRegisterFor(node-&gt;origin.semantic)));
</ins><span class="cx">         read(AbstractHeap(Variables, JSStack::ArgumentCount));
</span><span class="cx">         return;
</span><span class="cx">         
</span><span class="lines">@@ -613,7 +613,7 @@
</span><span class="cx">         return;
</span><span class="cx">         
</span><span class="cx">     case CheckArgumentsNotCreated:
</span><del>-        read(AbstractHeap(Variables, graph.argumentsRegisterFor(node-&gt;codeOrigin)));
</del><ins>+        read(AbstractHeap(Variables, graph.argumentsRegisterFor(node-&gt;origin.semantic)));
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     case ThrowReferenceError:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGCommonDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGCommonData.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGCommonData.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGCommonData.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -41,7 +41,7 @@
</span><span class="cx"> {
</span><span class="cx">     plan.transitions.addLazily(
</span><span class="cx">         codeBlock,
</span><del>-        node-&gt;codeOrigin.codeOriginOwner(),
</del><ins>+        node-&gt;origin.semantic.codeOriginOwner(),
</ins><span class="cx">         node-&gt;structureTransitionData().previousStructure,
</span><span class="cx">         node-&gt;structureTransitionData().newStructure);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGConstantFoldingPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -83,7 +83,7 @@
</span><span class="cx">             case CheckArgumentsNotCreated: {
</span><span class="cx">                 if (!isEmptySpeculation(
</span><span class="cx">                         m_state.variables().operand(
</span><del>-                            m_graph.argumentsRegisterFor(node-&gt;codeOrigin)).m_type))
</del><ins>+                            m_graph.argumentsRegisterFor(node-&gt;origin.semantic)).m_type))
</ins><span class="cx">                     break;
</span><span class="cx">                 node-&gt;convertToPhantom();
</span><span class="cx">                 eliminated = true;
</span><span class="lines">@@ -112,7 +112,7 @@
</span><span class="cx">                     AdjacencyList children = node-&gt;children;
</span><span class="cx">                     children.removeEdge(0);
</span><span class="cx">                     if (!!children.child1())
</span><del>-                        m_insertionSet.insertNode(indexInBlock, SpecNone, Phantom, node-&gt;codeOrigin, children);
</del><ins>+                        m_insertionSet.insertNode(indexInBlock, SpecNone, Phantom, node-&gt;origin, children);
</ins><span class="cx">                     node-&gt;children.setChild2(Edge());
</span><span class="cx">                     node-&gt;children.setChild3(Edge());
</span><span class="cx">                     node-&gt;convertToStructureTransitionWatchpoint(structure);
</span><span class="lines">@@ -154,7 +154,7 @@
</span><span class="cx">         
</span><span class="cx">             case GetById:
</span><span class="cx">             case GetByIdFlush: {
</span><del>-                CodeOrigin codeOrigin = node-&gt;codeOrigin;
</del><ins>+                NodeOrigin origin = node-&gt;origin;
</ins><span class="cx">                 Edge childEdge = node-&gt;child1();
</span><span class="cx">                 Node* child = childEdge.node();
</span><span class="cx">                 unsigned identifierNumber = node-&gt;identifierNumber();
</span><span class="lines">@@ -190,11 +190,11 @@
</span><span class="cx">                 
</span><span class="cx">                 if (needsWatchpoint) {
</span><span class="cx">                     m_insertionSet.insertNode(
</span><del>-                        indexInBlock, SpecNone, StructureTransitionWatchpoint, codeOrigin,
</del><ins>+                        indexInBlock, SpecNone, StructureTransitionWatchpoint, origin,
</ins><span class="cx">                         OpInfo(structure), childEdge);
</span><span class="cx">                 } else if (needsCellCheck) {
</span><span class="cx">                     m_insertionSet.insertNode(
</span><del>-                        indexInBlock, SpecNone, Phantom, codeOrigin, childEdge);
</del><ins>+                        indexInBlock, SpecNone, Phantom, origin, childEdge);
</ins><span class="cx">                 }
</span><span class="cx">                 
</span><span class="cx">                 childEdge.setUseKind(KnownCellUse);
</span><span class="lines">@@ -205,7 +205,7 @@
</span><span class="cx">                     propertyStorage = childEdge;
</span><span class="cx">                 else {
</span><span class="cx">                     propertyStorage = Edge(m_insertionSet.insertNode(
</span><del>-                        indexInBlock, SpecNone, GetButterfly, codeOrigin, childEdge));
</del><ins>+                        indexInBlock, SpecNone, GetButterfly, origin, childEdge));
</ins><span class="cx">                 }
</span><span class="cx">                 
</span><span class="cx">                 node-&gt;convertToGetByOffset(m_graph.m_storageAccessData.size(), propertyStorage);
</span><span class="lines">@@ -219,7 +219,7 @@
</span><span class="cx">                 
</span><span class="cx">             case PutById:
</span><span class="cx">             case PutByIdDirect: {
</span><del>-                CodeOrigin codeOrigin = node-&gt;codeOrigin;
</del><ins>+                NodeOrigin origin = node-&gt;origin;
</ins><span class="cx">                 Edge childEdge = node-&gt;child1();
</span><span class="cx">                 Node* child = childEdge.node();
</span><span class="cx">                 unsigned identifierNumber = node-&gt;identifierNumber();
</span><span class="lines">@@ -235,7 +235,7 @@
</span><span class="cx">                 
</span><span class="cx">                 PutByIdStatus status = PutByIdStatus::computeFor(
</span><span class="cx">                     vm(),
</span><del>-                    m_graph.globalObjectFor(codeOrigin),
</del><ins>+                    m_graph.globalObjectFor(origin.semantic),
</ins><span class="cx">                     structure,
</span><span class="cx">                     m_graph.identifiers()[identifierNumber],
</span><span class="cx">                     node-&gt;op() == PutByIdDirect);
</span><span class="lines">@@ -253,11 +253,11 @@
</span><span class="cx">                 
</span><span class="cx">                 if (needsWatchpoint) {
</span><span class="cx">                     m_insertionSet.insertNode(
</span><del>-                        indexInBlock, SpecNone, StructureTransitionWatchpoint, codeOrigin,
</del><ins>+                        indexInBlock, SpecNone, StructureTransitionWatchpoint, origin,
</ins><span class="cx">                         OpInfo(structure), childEdge);
</span><span class="cx">                 } else if (needsCellCheck) {
</span><span class="cx">                     m_insertionSet.insertNode(
</span><del>-                        indexInBlock, SpecNone, Phantom, codeOrigin, childEdge);
</del><ins>+                        indexInBlock, SpecNone, Phantom, origin, childEdge);
</ins><span class="cx">                 }
</span><span class="cx">                 
</span><span class="cx">                 childEdge.setUseKind(KnownCellUse);
</span><span class="lines">@@ -270,7 +270,7 @@
</span><span class="cx">                     if (node-&gt;op() == PutById) {
</span><span class="cx">                         if (!structure-&gt;storedPrototype().isNull()) {
</span><span class="cx">                             addStructureTransitionCheck(
</span><del>-                                codeOrigin, indexInBlock,
</del><ins>+                                origin, indexInBlock,
</ins><span class="cx">                                 structure-&gt;storedPrototype().asCell());
</span><span class="cx">                         }
</span><span class="cx">                         
</span><span class="lines">@@ -282,7 +282,7 @@
</span><span class="cx">                                 continue;
</span><span class="cx">                             ASSERT(prototype.isCell());
</span><span class="cx">                             addStructureTransitionCheck(
</span><del>-                                codeOrigin, indexInBlock, prototype.asCell());
</del><ins>+                                origin, indexInBlock, prototype.asCell());
</ins><span class="cx">                         }
</span><span class="cx">                     }
</span><span class="cx">                 }
</span><span class="lines">@@ -293,14 +293,14 @@
</span><span class="cx">                     propertyStorage = childEdge;
</span><span class="cx">                 else if (status.isSimpleReplace() || structure-&gt;outOfLineCapacity() == status.newStructure()-&gt;outOfLineCapacity()) {
</span><span class="cx">                     propertyStorage = Edge(m_insertionSet.insertNode(
</span><del>-                        indexInBlock, SpecNone, GetButterfly, codeOrigin, childEdge));
</del><ins>+                        indexInBlock, SpecNone, GetButterfly, origin, childEdge));
</ins><span class="cx">                 } else if (!structure-&gt;outOfLineCapacity()) {
</span><span class="cx">                     ASSERT(status.newStructure()-&gt;outOfLineCapacity());
</span><span class="cx">                     ASSERT(!isInlineOffset(status.offset()));
</span><span class="cx">                     Node* allocatePropertyStorage = m_insertionSet.insertNode(
</span><span class="cx">                         indexInBlock, SpecNone, AllocatePropertyStorage,
</span><del>-                        codeOrigin, OpInfo(transitionData), childEdge);
-                    m_insertionSet.insertNode(indexInBlock, SpecNone, StoreBarrier, codeOrigin, Edge(node-&gt;child1().node(), KnownCellUse));
</del><ins>+                        origin, OpInfo(transitionData), childEdge);
+                    m_insertionSet.insertNode(indexInBlock, SpecNone, StoreBarrier, origin, Edge(node-&gt;child1().node(), KnownCellUse));
</ins><span class="cx">                     propertyStorage = Edge(allocatePropertyStorage);
</span><span class="cx">                 } else {
</span><span class="cx">                     ASSERT(structure-&gt;outOfLineCapacity());
</span><span class="lines">@@ -308,22 +308,22 @@
</span><span class="cx">                     ASSERT(!isInlineOffset(status.offset()));
</span><span class="cx">                     
</span><span class="cx">                     Node* reallocatePropertyStorage = m_insertionSet.insertNode(
</span><del>-                        indexInBlock, SpecNone, ReallocatePropertyStorage, codeOrigin,
</del><ins>+                        indexInBlock, SpecNone, ReallocatePropertyStorage, origin,
</ins><span class="cx">                         OpInfo(transitionData), childEdge,
</span><span class="cx">                         Edge(m_insertionSet.insertNode(
</span><del>-                            indexInBlock, SpecNone, GetButterfly, codeOrigin, childEdge)));
-                    m_insertionSet.insertNode(indexInBlock, SpecNone, StoreBarrier, codeOrigin, Edge(node-&gt;child1().node(), KnownCellUse));
</del><ins>+                            indexInBlock, SpecNone, GetButterfly, origin, childEdge)));
+                    m_insertionSet.insertNode(indexInBlock, SpecNone, StoreBarrier, origin, Edge(node-&gt;child1().node(), KnownCellUse));
</ins><span class="cx">                     propertyStorage = Edge(reallocatePropertyStorage);
</span><span class="cx">                 }
</span><span class="cx">                 
</span><span class="cx">                 if (status.isSimpleTransition()) {
</span><del>-                    Node* putStructure = m_graph.addNode(SpecNone, PutStructure, codeOrigin, OpInfo(transitionData), childEdge);
-                    m_insertionSet.insertNode(indexInBlock, SpecNone, StoreBarrier, codeOrigin, Edge(node-&gt;child1().node(), KnownCellUse));
</del><ins>+                    Node* putStructure = m_graph.addNode(SpecNone, PutStructure, origin, OpInfo(transitionData), childEdge);
+                    m_insertionSet.insertNode(indexInBlock, SpecNone, StoreBarrier, origin, Edge(node-&gt;child1().node(), KnownCellUse));
</ins><span class="cx">                     m_insertionSet.insert(indexInBlock, putStructure);
</span><span class="cx">                 }
</span><span class="cx"> 
</span><span class="cx">                 node-&gt;convertToPutByOffset(m_graph.m_storageAccessData.size(), propertyStorage);
</span><del>-                m_insertionSet.insertNode(indexInBlock, SpecNone, ConditionalStoreBarrier, codeOrigin, 
</del><ins>+                m_insertionSet.insertNode(indexInBlock, SpecNone, ConditionalStoreBarrier, origin, 
</ins><span class="cx">                     Edge(node-&gt;child2().node(), KnownCellUse), Edge(node-&gt;child3().node(), UntypedUse));
</span><span class="cx">                 
</span><span class="cx">                 StorageAccessData storageAccessData;
</span><span class="lines">@@ -387,7 +387,7 @@
</span><span class="cx">             if (oldValue.merge(constantValue))
</span><span class="cx">                 continue;
</span><span class="cx">                 
</span><del>-            CodeOrigin codeOrigin = node-&gt;codeOrigin;
</del><ins>+            NodeOrigin origin = node-&gt;origin;
</ins><span class="cx">             AdjacencyList children = node-&gt;children;
</span><span class="cx">             
</span><span class="cx">             if (node-&gt;op() == GetLocal)
</span><span class="lines">@@ -397,7 +397,7 @@
</span><span class="cx">             
</span><span class="cx">             m_graph.convertToConstant(node, value);
</span><span class="cx">             m_insertionSet.insertNode(
</span><del>-                indexInBlock, SpecNone, Phantom, codeOrigin, children);
</del><ins>+                indexInBlock, SpecNone, Phantom, origin, children);
</ins><span class="cx">             
</span><span class="cx">             changed = true;
</span><span class="cx">         }
</span><span class="lines">@@ -407,20 +407,20 @@
</span><span class="cx">         return changed;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void addStructureTransitionCheck(CodeOrigin codeOrigin, unsigned indexInBlock, JSCell* cell)
</del><ins>+    void addStructureTransitionCheck(NodeOrigin origin, unsigned indexInBlock, JSCell* cell)
</ins><span class="cx">     {
</span><span class="cx">         Node* weakConstant = m_insertionSet.insertNode(
</span><del>-            indexInBlock, speculationFromValue(cell), WeakJSConstant, codeOrigin, OpInfo(cell));
</del><ins>+            indexInBlock, speculationFromValue(cell), WeakJSConstant, origin, OpInfo(cell));
</ins><span class="cx">         
</span><span class="cx">         if (m_graph.watchpoints().isStillValid(cell-&gt;structure()-&gt;transitionWatchpointSet())) {
</span><span class="cx">             m_insertionSet.insertNode(
</span><del>-                indexInBlock, SpecNone, StructureTransitionWatchpoint, codeOrigin,
</del><ins>+                indexInBlock, SpecNone, StructureTransitionWatchpoint, origin,
</ins><span class="cx">                 OpInfo(cell-&gt;structure()), Edge(weakConstant, CellUse));
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         m_insertionSet.insertNode(
</span><del>-            indexInBlock, SpecNone, CheckStructure, codeOrigin,
</del><ins>+            indexInBlock, SpecNone, CheckStructure, origin,
</ins><span class="cx">             OpInfo(m_graph.addStructureSet(cell-&gt;structure())), Edge(weakConstant, CellUse));
</span><span class="cx">     }
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGCriticalEdgeBreakingPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGCriticalEdgeBreakingPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGCriticalEdgeBreakingPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGCriticalEdgeBreakingPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx">     {
</span><span class="cx">         BasicBlock* pad = m_insertionSet.insertBefore(*successor);
</span><span class="cx">         pad-&gt;appendNode(
</span><del>-            m_graph, SpecNone, Jump, (*successor)-&gt;at(0)-&gt;codeOrigin, OpInfo(*successor));
</del><ins>+            m_graph, SpecNone, Jump, (*successor)-&gt;at(0)-&gt;origin, OpInfo(*successor));
</ins><span class="cx">         pad-&gt;predecessors.append(predecessor);
</span><span class="cx">         (*successor)-&gt;replacePredecessor(predecessor, pad);
</span><span class="cx">         
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGDCEPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGDCEPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGDCEPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGDCEPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -219,7 +219,7 @@
</span><span class="cx">                         if (!edge || edge.willNotHaveCheck())
</span><span class="cx">                             continue;
</span><span class="cx"> 
</span><del>-                        m_insertionSet.insertNode(indexInBlock, SpecNone, Phantom, node-&gt;codeOrigin, edge);
</del><ins>+                        m_insertionSet.insertNode(indexInBlock, SpecNone, Phantom, node-&gt;origin, edge);
</ins><span class="cx">                     }
</span><span class="cx"> 
</span><span class="cx">                     node-&gt;convertToPhantomUnchecked();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGDisassemblercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGDisassembler.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGDisassembler.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGDisassembler.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -129,10 +129,10 @@
</span><span class="cx">             }
</span><span class="cx">             dumpDisassembly(out, disassemblyPrefix, linkBuffer, previousLabel, currentLabel, lastNodeForDisassembly);
</span><span class="cx">             append(result, out, previousOrigin);
</span><del>-            previousOrigin = block-&gt;at(i)-&gt;codeOrigin;
</del><ins>+            previousOrigin = block-&gt;at(i)-&gt;origin.semantic;
</ins><span class="cx">             if (m_graph.dumpCodeOrigin(out, prefix, lastNode, block-&gt;at(i), &amp;m_dumpContext)) {
</span><span class="cx">                 append(result, out, previousOrigin);
</span><del>-                previousOrigin = block-&gt;at(i)-&gt;codeOrigin;
</del><ins>+                previousOrigin = block-&gt;at(i)-&gt;origin.semantic;
</ins><span class="cx">             }
</span><span class="cx">             m_graph.dump(out, prefix, block-&gt;at(i), &amp;m_dumpContext);
</span><span class="cx">             lastNode = block-&gt;at(i);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGFixupPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -263,7 +263,7 @@
</span><span class="cx">                 else
</span><span class="cx">                     node-&gt;setArithMode(Arith::CheckOverflowAndNegativeZero);
</span><span class="cx">                 
</span><del>-                m_insertionSet.insertNode(m_indexInBlock + 1, SpecNone, Phantom, node-&gt;codeOrigin, child1, child2);
</del><ins>+                m_insertionSet.insertNode(m_indexInBlock + 1, SpecNone, Phantom, node-&gt;origin, child1, child2);
</ins><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="cx">             fixEdge&lt;NumberUse&gt;(node-&gt;child1());
</span><span class="lines">@@ -453,7 +453,7 @@
</span><span class="cx">         case GetByVal: {
</span><span class="cx">             node-&gt;setArrayMode(
</span><span class="cx">                 node-&gt;arrayMode().refine(
</span><del>-                    m_graph, node-&gt;codeOrigin,
</del><ins>+                    m_graph, node-&gt;origin.semantic,
</ins><span class="cx">                     node-&gt;child1()-&gt;prediction(),
</span><span class="cx">                     node-&gt;child2()-&gt;prediction(),
</span><span class="cx">                     SpecNone, node-&gt;flags()));
</span><span class="lines">@@ -465,14 +465,14 @@
</span><span class="cx">             case Array::Double:
</span><span class="cx">                 if (arrayMode.arrayClass() == Array::OriginalArray
</span><span class="cx">                     &amp;&amp; arrayMode.speculation() == Array::InBounds
</span><del>-                    &amp;&amp; m_graph.globalObjectFor(node-&gt;codeOrigin)-&gt;arrayPrototypeChainIsSane()
</del><ins>+                    &amp;&amp; m_graph.globalObjectFor(node-&gt;origin.semantic)-&gt;arrayPrototypeChainIsSane()
</ins><span class="cx">                     &amp;&amp; !(node-&gt;flags() &amp; NodeBytecodeUsesAsOther))
</span><span class="cx">                     node-&gt;setArrayMode(arrayMode.withSpeculation(Array::SaneChain));
</span><span class="cx">                 break;
</span><span class="cx">                 
</span><span class="cx">             case Array::String:
</span><span class="cx">                 if ((node-&gt;prediction() &amp; ~SpecString)
</span><del>-                    || m_graph.hasExitSite(node-&gt;codeOrigin, OutOfBounds))
</del><ins>+                    || m_graph.hasExitSite(node-&gt;origin.semantic, OutOfBounds))
</ins><span class="cx">                     node-&gt;setArrayMode(arrayMode.withSpeculation(Array::OutOfBounds));
</span><span class="cx">                 break;
</span><span class="cx">                 
</span><span class="lines">@@ -511,7 +511,7 @@
</span><span class="cx"> 
</span><span class="cx">             node-&gt;setArrayMode(
</span><span class="cx">                 node-&gt;arrayMode().refine(
</span><del>-                    m_graph, node-&gt;codeOrigin,
</del><ins>+                    m_graph, node-&gt;origin.semantic,
</ins><span class="cx">                     child1-&gt;prediction(),
</span><span class="cx">                     child2-&gt;prediction(),
</span><span class="cx">                     child3-&gt;prediction()));
</span><span class="lines">@@ -597,7 +597,7 @@
</span><span class="cx">             // that would break things.
</span><span class="cx">             node-&gt;setArrayMode(
</span><span class="cx">                 node-&gt;arrayMode().refine(
</span><del>-                    m_graph, node-&gt;codeOrigin,
</del><ins>+                    m_graph, node-&gt;origin.semantic,
</ins><span class="cx">                     node-&gt;child1()-&gt;prediction() &amp; SpecCell,
</span><span class="cx">                     SpecInt32,
</span><span class="cx">                     node-&gt;child2()-&gt;prediction()));
</span><span class="lines">@@ -732,7 +732,7 @@
</span><span class="cx">                     // would have already exited by now, but insert a forced exit just to
</span><span class="cx">                     // be safe.
</span><span class="cx">                     m_insertionSet.insertNode(
</span><del>-                        m_indexInBlock, SpecNone, ForceOSRExit, node-&gt;codeOrigin);
</del><ins>+                        m_indexInBlock, SpecNone, ForceOSRExit, node-&gt;origin);
</ins><span class="cx">                 }
</span><span class="cx">                 break;
</span><span class="cx">             case ALL_INT32_INDEXING_TYPES:
</span><span class="lines">@@ -768,7 +768,7 @@
</span><span class="cx">         }
</span><span class="cx">             
</span><span class="cx">         case ToThis: {
</span><del>-            ECMAMode ecmaMode = m_graph.executableFor(node-&gt;codeOrigin)-&gt;isStrictMode() ? StrictMode : NotStrictMode;
</del><ins>+            ECMAMode ecmaMode = m_graph.executableFor(node-&gt;origin.semantic)-&gt;isStrictMode() ? StrictMode : NotStrictMode;
</ins><span class="cx"> 
</span><span class="cx">             if (isOtherSpeculation(node-&gt;child1()-&gt;prediction())) {
</span><span class="cx">                 if (ecmaMode == StrictMode) {
</span><span class="lines">@@ -778,10 +778,10 @@
</span><span class="cx">                 }
</span><span class="cx"> 
</span><span class="cx">                 m_insertionSet.insertNode(
</span><del>-                    m_indexInBlock, SpecNone, Phantom, node-&gt;codeOrigin,
</del><ins>+                    m_indexInBlock, SpecNone, Phantom, node-&gt;origin,
</ins><span class="cx">                     Edge(node-&gt;child1().node(), OtherUse));
</span><span class="cx">                 observeUseKindOnNode&lt;OtherUse&gt;(node-&gt;child1().node());
</span><del>-                node-&gt;convertToWeakConstant(m_graph.globalThisObjectFor(node-&gt;codeOrigin));
</del><ins>+                node-&gt;convertToWeakConstant(m_graph.globalThisObjectFor(node-&gt;origin.semantic));
</ins><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="cx">             
</span><span class="lines">@@ -948,16 +948,19 @@
</span><span class="cx">             break;
</span><span class="cx">         
</span><span class="cx">         case PutGlobalVar: {
</span><del>-            Node* globalObjectNode = m_insertionSet.insertNode(m_indexInBlock, SpecNone, WeakJSConstant, node-&gt;codeOrigin, 
-                OpInfo(m_graph.globalObjectFor(node-&gt;codeOrigin)));
-            Node* barrierNode = m_graph.addNode(SpecNone, ConditionalStoreBarrier, m_currentNode-&gt;codeOrigin, 
</del><ins>+            Node* globalObjectNode = m_insertionSet.insertNode(
+                m_indexInBlock, SpecNone, WeakJSConstant, node-&gt;origin, 
+                OpInfo(m_graph.globalObjectFor(node-&gt;origin.semantic)));
+            Node* barrierNode = m_graph.addNode(
+                SpecNone, ConditionalStoreBarrier, m_currentNode-&gt;origin, 
</ins><span class="cx">                 Edge(globalObjectNode, KnownCellUse), Edge(node-&gt;child1().node(), UntypedUse));
</span><span class="cx">             m_insertionSet.insert(m_indexInBlock, barrierNode);
</span><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         case TearOffActivation: {
</span><del>-            Node* barrierNode = m_graph.addNode(SpecNone, StoreBarrierWithNullCheck, m_currentNode-&gt;codeOrigin, 
</del><ins>+            Node* barrierNode = m_graph.addNode(
+                SpecNone, StoreBarrierWithNullCheck, m_currentNode-&gt;origin, 
</ins><span class="cx">                 Edge(node-&gt;child1().node(), UntypedUse));
</span><span class="cx">             m_insertionSet.insert(m_indexInBlock, barrierNode);
</span><span class="cx">             break;
</span><span class="lines">@@ -965,7 +968,8 @@
</span><span class="cx"> 
</span><span class="cx">         case IsString:
</span><span class="cx">             if (node-&gt;child1()-&gt;shouldSpeculateString()) {
</span><del>-                m_insertionSet.insertNode(m_indexInBlock, SpecNone, Phantom, node-&gt;codeOrigin,
</del><ins>+                m_insertionSet.insertNode(
+                    m_indexInBlock, SpecNone, Phantom, node-&gt;origin,
</ins><span class="cx">                     Edge(node-&gt;child1().node(), StringUse));
</span><span class="cx">                 m_graph.convertToConstant(node, jsBoolean(true));
</span><span class="cx">                 observeUseKindOnNode&lt;StringUse&gt;(node);
</span><span class="lines">@@ -1069,7 +1073,7 @@
</span><span class="cx">     void createToString(Node* node, Edge&amp; edge)
</span><span class="cx">     {
</span><span class="cx">         edge.setNode(m_insertionSet.insertNode(
</span><del>-            m_indexInBlock, SpecString, ToString, node-&gt;codeOrigin,
</del><ins>+            m_indexInBlock, SpecString, ToString, node-&gt;origin,
</ins><span class="cx">             Edge(edge.node(), useKind)));
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -1078,7 +1082,7 @@
</span><span class="cx">     {
</span><span class="cx">         ASSERT(arrayMode == ArrayMode(Array::Generic));
</span><span class="cx">         
</span><del>-        if (!canOptimizeStringObjectAccess(node-&gt;codeOrigin))
</del><ins>+        if (!canOptimizeStringObjectAccess(node-&gt;origin.semantic))
</ins><span class="cx">             return;
</span><span class="cx">         
</span><span class="cx">         createToString&lt;useKind&gt;(node, node-&gt;child1());
</span><span class="lines">@@ -1106,7 +1110,7 @@
</span><span class="cx">             // decision process much easier.
</span><span class="cx">             observeUseKindOnNode&lt;StringUse&gt;(edge.node());
</span><span class="cx">             m_insertionSet.insertNode(
</span><del>-                m_indexInBlock, SpecNone, Phantom, node-&gt;codeOrigin,
</del><ins>+                m_indexInBlock, SpecNone, Phantom, node-&gt;origin,
</ins><span class="cx">                 Edge(edge.node(), StringUse));
</span><span class="cx">             edge.setUseKind(KnownStringUse);
</span><span class="cx">             return;
</span><span class="lines">@@ -1165,14 +1169,14 @@
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         if (node-&gt;child1()-&gt;shouldSpeculateStringObject()
</span><del>-            &amp;&amp; canOptimizeStringObjectAccess(node-&gt;codeOrigin)) {
</del><ins>+            &amp;&amp; canOptimizeStringObjectAccess(node-&gt;origin.semantic)) {
</ins><span class="cx">             fixEdge&lt;StringObjectUse&gt;(node-&gt;child1());
</span><span class="cx">             node-&gt;convertToToString();
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         if (node-&gt;child1()-&gt;shouldSpeculateStringOrStringObject()
</span><del>-            &amp;&amp; canOptimizeStringObjectAccess(node-&gt;codeOrigin)) {
</del><ins>+            &amp;&amp; canOptimizeStringObjectAccess(node-&gt;origin.semantic)) {
</ins><span class="cx">             fixEdge&lt;StringOrStringObjectUse&gt;(node-&gt;child1());
</span><span class="cx">             node-&gt;convertToToString();
</span><span class="cx">             return;
</span><span class="lines">@@ -1188,13 +1192,13 @@
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         if (node-&gt;child1()-&gt;shouldSpeculateStringObject()
</span><del>-            &amp;&amp; canOptimizeStringObjectAccess(node-&gt;codeOrigin)) {
</del><ins>+            &amp;&amp; canOptimizeStringObjectAccess(node-&gt;origin.semantic)) {
</ins><span class="cx">             fixEdge&lt;StringObjectUse&gt;(node-&gt;child1());
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         if (node-&gt;child1()-&gt;shouldSpeculateStringOrStringObject()
</span><del>-            &amp;&amp; canOptimizeStringObjectAccess(node-&gt;codeOrigin)) {
</del><ins>+            &amp;&amp; canOptimizeStringObjectAccess(node-&gt;origin.semantic)) {
</ins><span class="cx">             fixEdge&lt;StringOrStringObjectUse&gt;(node-&gt;child1());
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="lines">@@ -1213,16 +1217,16 @@
</span><span class="cx">         
</span><span class="cx">         ASSERT(leftUseKind == StringUse || leftUseKind == StringObjectUse || leftUseKind == StringOrStringObjectUse);
</span><span class="cx">         
</span><del>-        if (isStringObjectUse&lt;leftUseKind&gt;() &amp;&amp; !canOptimizeStringObjectAccess(node-&gt;codeOrigin))
</del><ins>+        if (isStringObjectUse&lt;leftUseKind&gt;() &amp;&amp; !canOptimizeStringObjectAccess(node-&gt;origin.semantic))
</ins><span class="cx">             return false;
</span><span class="cx">         
</span><span class="cx">         convertStringAddUse&lt;leftUseKind&gt;(node, left);
</span><span class="cx">         
</span><span class="cx">         if (right-&gt;shouldSpeculateString())
</span><span class="cx">             convertStringAddUse&lt;StringUse&gt;(node, right);
</span><del>-        else if (right-&gt;shouldSpeculateStringObject() &amp;&amp; canOptimizeStringObjectAccess(node-&gt;codeOrigin))
</del><ins>+        else if (right-&gt;shouldSpeculateStringObject() &amp;&amp; canOptimizeStringObjectAccess(node-&gt;origin.semantic))
</ins><span class="cx">             convertStringAddUse&lt;StringObjectUse&gt;(node, right);
</span><del>-        else if (right-&gt;shouldSpeculateStringOrStringObject() &amp;&amp; canOptimizeStringObjectAccess(node-&gt;codeOrigin))
</del><ins>+        else if (right-&gt;shouldSpeculateStringOrStringObject() &amp;&amp; canOptimizeStringObjectAccess(node-&gt;origin.semantic))
</ins><span class="cx">             convertStringAddUse&lt;StringOrStringObjectUse&gt;(node, right);
</span><span class="cx">         else {
</span><span class="cx">             // At this point we know that the other operand is something weird. The semantically correct
</span><span class="lines">@@ -1234,10 +1238,10 @@
</span><span class="cx">             // anything to @right, since ToPrimitive may be effectful.
</span><span class="cx">             
</span><span class="cx">             Node* toPrimitive = m_insertionSet.insertNode(
</span><del>-                m_indexInBlock, resultOfToPrimitive(right-&gt;prediction()), ToPrimitive, node-&gt;codeOrigin,
-                Edge(right.node()));
</del><ins>+                m_indexInBlock, resultOfToPrimitive(right-&gt;prediction()), ToPrimitive,
+                node-&gt;origin, Edge(right.node()));
</ins><span class="cx">             Node* toString = m_insertionSet.insertNode(
</span><del>-                m_indexInBlock, SpecString, ToString, node-&gt;codeOrigin, Edge(toPrimitive));
</del><ins>+                m_indexInBlock, SpecString, ToString, node-&gt;origin, Edge(toPrimitive));
</ins><span class="cx">             
</span><span class="cx">             fixupToPrimitive(toPrimitive);
</span><span class="cx">             fixupToString(toString);
</span><span class="lines">@@ -1248,7 +1252,7 @@
</span><span class="cx">         // We're doing checks up there, so we need to make sure that the
</span><span class="cx">         // *original* inputs to the addition are live up to here.
</span><span class="cx">         m_insertionSet.insertNode(
</span><del>-            m_indexInBlock, SpecNone, Phantom, node-&gt;codeOrigin,
</del><ins>+            m_indexInBlock, SpecNone, Phantom, node-&gt;origin,
</ins><span class="cx">             Edge(originalLeft), Edge(originalRight));
</span><span class="cx">         
</span><span class="cx">         convertToMakeRope(node);
</span><span class="lines">@@ -1365,37 +1369,36 @@
</span><span class="cx">         m_insertionSet.execute(block);
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    Node* checkArray(ArrayMode arrayMode, const CodeOrigin&amp; codeOrigin, Node* array, Node* index, bool (*storageCheck)(const ArrayMode&amp;) = canCSEStorage)
</del><ins>+    Node* checkArray(ArrayMode arrayMode, const NodeOrigin&amp; origin, Node* array, Node* index, bool (*storageCheck)(const ArrayMode&amp;) = canCSEStorage)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(arrayMode.isSpecific());
</span><span class="cx">         
</span><span class="cx">         if (arrayMode.type() == Array::String) {
</span><span class="cx">             m_insertionSet.insertNode(
</span><del>-                m_indexInBlock, SpecNone, Phantom, codeOrigin,
-                Edge(array, StringUse));
</del><ins>+                m_indexInBlock, SpecNone, Phantom, origin, Edge(array, StringUse));
</ins><span class="cx">         } else {
</span><del>-            Structure* structure = arrayMode.originalArrayStructure(m_graph, codeOrigin);
</del><ins>+            Structure* structure = arrayMode.originalArrayStructure(m_graph, origin.semantic);
</ins><span class="cx">         
</span><span class="cx">             Edge indexEdge = index ? Edge(index, Int32Use) : Edge();
</span><span class="cx">         
</span><span class="cx">             if (arrayMode.doesConversion()) {
</span><span class="cx">                 if (structure) {
</span><span class="cx">                     m_insertionSet.insertNode(
</span><del>-                        m_indexInBlock, SpecNone, ArrayifyToStructure, codeOrigin,
</del><ins>+                        m_indexInBlock, SpecNone, ArrayifyToStructure, origin,
</ins><span class="cx">                         OpInfo(structure), OpInfo(arrayMode.asWord()), Edge(array, CellUse), indexEdge);
</span><span class="cx">                 } else {
</span><span class="cx">                     m_insertionSet.insertNode(
</span><del>-                        m_indexInBlock, SpecNone, Arrayify, codeOrigin,
</del><ins>+                        m_indexInBlock, SpecNone, Arrayify, origin,
</ins><span class="cx">                         OpInfo(arrayMode.asWord()), Edge(array, CellUse), indexEdge);
</span><span class="cx">                 }
</span><span class="cx">             } else {
</span><span class="cx">                 if (structure) {
</span><span class="cx">                     m_insertionSet.insertNode(
</span><del>-                        m_indexInBlock, SpecNone, CheckStructure, codeOrigin,
</del><ins>+                        m_indexInBlock, SpecNone, CheckStructure, origin,
</ins><span class="cx">                         OpInfo(m_graph.addStructureSet(structure)), Edge(array, CellUse));
</span><span class="cx">                 } else {
</span><span class="cx">                     m_insertionSet.insertNode(
</span><del>-                        m_indexInBlock, SpecNone, CheckArray, codeOrigin,
</del><ins>+                        m_indexInBlock, SpecNone, CheckArray, origin,
</ins><span class="cx">                         OpInfo(arrayMode.asWord()), Edge(array, CellUse));
</span><span class="cx">                 }
</span><span class="cx">             }
</span><span class="lines">@@ -1406,11 +1409,11 @@
</span><span class="cx">         
</span><span class="cx">         if (arrayMode.usesButterfly()) {
</span><span class="cx">             return m_insertionSet.insertNode(
</span><del>-                m_indexInBlock, SpecNone, GetButterfly, codeOrigin, Edge(array, CellUse));
</del><ins>+                m_indexInBlock, SpecNone, GetButterfly, origin, Edge(array, CellUse));
</ins><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         return m_insertionSet.insertNode(
</span><del>-            m_indexInBlock, SpecNone, GetIndexedPropertyStorage, codeOrigin,
</del><ins>+            m_indexInBlock, SpecNone, GetIndexedPropertyStorage, origin,
</ins><span class="cx">             OpInfo(arrayMode.asWord()), Edge(array, KnownCellUse));
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -1421,7 +1424,7 @@
</span><span class="cx">         switch (node-&gt;arrayMode().type()) {
</span><span class="cx">         case Array::ForceExit: {
</span><span class="cx">             m_insertionSet.insertNode(
</span><del>-                m_indexInBlock, SpecNone, ForceOSRExit, node-&gt;codeOrigin);
</del><ins>+                m_indexInBlock, SpecNone, ForceOSRExit, node-&gt;origin);
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">             
</span><span class="lines">@@ -1434,7 +1437,7 @@
</span><span class="cx">             return;
</span><span class="cx">             
</span><span class="cx">         default: {
</span><del>-            Node* storage = checkArray(node-&gt;arrayMode(), node-&gt;codeOrigin, base.node(), index.node());
</del><ins>+            Node* storage = checkArray(node-&gt;arrayMode(), node-&gt;origin, base.node(), index.node());
</ins><span class="cx">             if (!storage)
</span><span class="cx">                 return;
</span><span class="cx">             
</span><span class="lines">@@ -1537,7 +1540,7 @@
</span><span class="cx">                 m_requiredPhantoms.append(edge.node());
</span><span class="cx">                 Node* result = m_insertionSet.insertNode(
</span><span class="cx">                     m_indexInBlock, SpecInt52AsDouble, Int52ToDouble,
</span><del>-                    m_currentNode-&gt;codeOrigin, Edge(edge.node(), NumberUse));
</del><ins>+                    m_currentNode-&gt;origin, Edge(edge.node(), NumberUse));
</ins><span class="cx">                 edge = Edge(result, useKind);
</span><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="lines">@@ -1591,7 +1594,7 @@
</span><span class="cx">             m_requiredPhantoms.append(edge.node());
</span><span class="cx">             Node* result = m_insertionSet.insertNode(
</span><span class="cx">                 m_indexInBlock, SpecInt52, Int52ToValue,
</span><del>-                m_currentNode-&gt;codeOrigin, Edge(edge.node(), UntypedUse));
</del><ins>+                m_currentNode-&gt;origin, Edge(edge.node(), UntypedUse));
</ins><span class="cx">             edge = Edge(result, useKind);
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="lines">@@ -1605,9 +1608,9 @@
</span><span class="cx">     {
</span><span class="cx">         Node* barrierNode;
</span><span class="cx">         if (!child2)
</span><del>-            barrierNode = m_graph.addNode(SpecNone, StoreBarrier, m_currentNode-&gt;codeOrigin, Edge(child1.node(), child1.useKind()));
</del><ins>+            barrierNode = m_graph.addNode(SpecNone, StoreBarrier, m_currentNode-&gt;origin, Edge(child1.node(), child1.useKind()));
</ins><span class="cx">         else {
</span><del>-            barrierNode = m_graph.addNode(SpecNone, ConditionalStoreBarrier, m_currentNode-&gt;codeOrigin, 
</del><ins>+            barrierNode = m_graph.addNode(SpecNone, ConditionalStoreBarrier, m_currentNode-&gt;origin, 
</ins><span class="cx">                 Edge(child1.node(), child1.useKind()), Edge(child2.node(), child2.useKind()));
</span><span class="cx">         }
</span><span class="cx">         m_insertionSet.insert(indexInBlock, barrierNode);
</span><span class="lines">@@ -1631,7 +1634,7 @@
</span><span class="cx">         else
</span><span class="cx">             useKind = NotCellUse;
</span><span class="cx">         Node* newNode = m_insertionSet.insertNode(
</span><del>-            m_indexInBlock, SpecInt32, ValueToInt32, m_currentNode-&gt;codeOrigin,
</del><ins>+            m_indexInBlock, SpecInt32, ValueToInt32, m_currentNode-&gt;origin,
</ins><span class="cx">             Edge(node, useKind));
</span><span class="cx">         observeUseKindOnNode(node, useKind);
</span><span class="cx">         
</span><span class="lines">@@ -1645,7 +1648,7 @@
</span><span class="cx">         
</span><span class="cx">         Node* result = m_insertionSet.insertNode(
</span><span class="cx">             m_indexInBlock, SpecInt52AsDouble, Int32ToDouble,
</span><del>-            m_currentNode-&gt;codeOrigin, Edge(edge.node(), NumberUse));
</del><ins>+            m_currentNode-&gt;origin, Edge(edge.node(), NumberUse));
</ins><span class="cx">         
</span><span class="cx">         edge = Edge(result, useKind);
</span><span class="cx">     }
</span><span class="lines">@@ -1673,7 +1676,7 @@
</span><span class="cx">                 value);
</span><span class="cx">         }
</span><span class="cx">         edge.setNode(m_insertionSet.insertNode(
</span><del>-            m_indexInBlock, SpecInt32, JSConstant, m_currentNode-&gt;codeOrigin,
</del><ins>+            m_indexInBlock, SpecInt32, JSConstant, m_currentNode-&gt;origin,
</ins><span class="cx">             OpInfo(constantRegister)));
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -1717,9 +1720,9 @@
</span><span class="cx">     {
</span><span class="cx">         if (!isInt32Speculation(node-&gt;prediction()))
</span><span class="cx">             return false;
</span><del>-        CodeBlock* profiledBlock = m_graph.baselineCodeBlockFor(node-&gt;codeOrigin);
</del><ins>+        CodeBlock* profiledBlock = m_graph.baselineCodeBlockFor(node-&gt;origin.semantic);
</ins><span class="cx">         ArrayProfile* arrayProfile = 
</span><del>-            profiledBlock-&gt;getArrayProfile(node-&gt;codeOrigin.bytecodeIndex);
</del><ins>+            profiledBlock-&gt;getArrayProfile(node-&gt;origin.semantic.bytecodeIndex);
</ins><span class="cx">         ArrayMode arrayMode = ArrayMode(Array::SelectUsingPredictions);
</span><span class="cx">         if (arrayProfile) {
</span><span class="cx">             ConcurrentJITLocker locker(profiledBlock-&gt;m_lock);
</span><span class="lines">@@ -1738,7 +1741,7 @@
</span><span class="cx">         }
</span><span class="cx">             
</span><span class="cx">         arrayMode = arrayMode.refine(
</span><del>-            m_graph, node-&gt;codeOrigin, node-&gt;child1()-&gt;prediction(), node-&gt;prediction());
</del><ins>+            m_graph, node-&gt;origin.semantic, node-&gt;child1()-&gt;prediction(), node-&gt;prediction());
</ins><span class="cx">             
</span><span class="cx">         if (arrayMode.type() == Array::Generic) {
</span><span class="cx">             // Check if the input is something that we can't get array length for, but for which we
</span><span class="lines">@@ -1772,10 +1775,10 @@
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         Node* length = prependGetArrayLength(
</span><del>-            node-&gt;codeOrigin, node-&gt;child1().node(), ArrayMode(toArrayType(type)));
</del><ins>+            node-&gt;origin, node-&gt;child1().node(), ArrayMode(toArrayType(type)));
</ins><span class="cx">         
</span><span class="cx">         Node* shiftAmount = m_insertionSet.insertNode(
</span><del>-            m_indexInBlock, SpecInt32, JSConstant, node-&gt;codeOrigin,
</del><ins>+            m_indexInBlock, SpecInt32, JSConstant, node-&gt;origin,
</ins><span class="cx">             OpInfo(m_graph.constantRegisterForConstant(jsNumber(logElementSize(type)))));
</span><span class="cx">         
</span><span class="cx">         // We can use a BitLShift here because typed arrays will never have a byteLength
</span><span class="lines">@@ -1796,18 +1799,18 @@
</span><span class="cx">         fixEdge&lt;KnownCellUse&gt;(node-&gt;child1());
</span><span class="cx">         node-&gt;setArrayMode(arrayMode);
</span><span class="cx">             
</span><del>-        Node* storage = checkArray(arrayMode, node-&gt;codeOrigin, node-&gt;child1().node(), 0, lengthNeedsStorage);
</del><ins>+        Node* storage = checkArray(arrayMode, node-&gt;origin, node-&gt;child1().node(), 0, lengthNeedsStorage);
</ins><span class="cx">         if (!storage)
</span><span class="cx">             return;
</span><span class="cx">             
</span><span class="cx">         node-&gt;child2() = Edge(storage);
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    Node* prependGetArrayLength(CodeOrigin codeOrigin, Node* child, ArrayMode arrayMode)
</del><ins>+    Node* prependGetArrayLength(NodeOrigin origin, Node* child, ArrayMode arrayMode)
</ins><span class="cx">     {
</span><del>-        Node* storage = checkArray(arrayMode, codeOrigin, child, 0, lengthNeedsStorage);
</del><ins>+        Node* storage = checkArray(arrayMode, origin, child, 0, lengthNeedsStorage);
</ins><span class="cx">         return m_insertionSet.insertNode(
</span><del>-            m_indexInBlock, SpecInt32, GetArrayLength, codeOrigin,
</del><ins>+            m_indexInBlock, SpecInt32, GetArrayLength, origin,
</ins><span class="cx">             OpInfo(arrayMode.asWord()), Edge(child, KnownCellUse), Edge(storage));
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -1821,7 +1824,7 @@
</span><span class="cx">             return false;
</span><span class="cx">         
</span><span class="cx">         checkArray(
</span><del>-            ArrayMode(toArrayType(type)), node-&gt;codeOrigin, node-&gt;child1().node(),
</del><ins>+            ArrayMode(toArrayType(type)), node-&gt;origin, node-&gt;child1().node(),
</ins><span class="cx">             0, neverNeedsStorage);
</span><span class="cx">         
</span><span class="cx">         node-&gt;setOp(GetTypedArrayByteOffset);
</span><span class="lines">@@ -1837,7 +1840,7 @@
</span><span class="cx">         
</span><span class="cx">         for (unsigned i = m_requiredPhantoms.size(); i--;) {
</span><span class="cx">             m_insertionSet.insertNode(
</span><del>-                m_indexInBlock + 1, SpecNone, Phantom, m_currentNode-&gt;codeOrigin,
</del><ins>+                m_indexInBlock + 1, SpecNone, Phantom, m_currentNode-&gt;origin,
</ins><span class="cx">                 Edge(m_requiredPhantoms[i], UntypedUse));
</span><span class="cx">         }
</span><span class="cx">         
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGGraphcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGGraph.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGGraph.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGGraph.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -98,11 +98,11 @@
</span><span class="cx">     if (!previousNode)
</span><span class="cx">         return false;
</span><span class="cx">     
</span><del>-    if (previousNode-&gt;codeOrigin.inlineCallFrame == currentNode-&gt;codeOrigin.inlineCallFrame)
</del><ins>+    if (previousNode-&gt;origin.semantic.inlineCallFrame == currentNode-&gt;origin.semantic.inlineCallFrame)
</ins><span class="cx">         return false;
</span><span class="cx">     
</span><del>-    Vector&lt;CodeOrigin&gt; previousInlineStack = previousNode-&gt;codeOrigin.inlineStack();
-    Vector&lt;CodeOrigin&gt; currentInlineStack = currentNode-&gt;codeOrigin.inlineStack();
</del><ins>+    Vector&lt;CodeOrigin&gt; previousInlineStack = previousNode-&gt;origin.semantic.inlineStack();
+    Vector&lt;CodeOrigin&gt; currentInlineStack = currentNode-&gt;origin.semantic.inlineStack();
</ins><span class="cx">     unsigned commonSize = std::min(previousInlineStack.size(), currentInlineStack.size());
</span><span class="cx">     unsigned indexOfDivergence = commonSize;
</span><span class="cx">     for (unsigned i = 0; i &lt; commonSize; ++i) {
</span><span class="lines">@@ -135,7 +135,7 @@
</span><span class="cx"> 
</span><span class="cx"> int Graph::amountOfNodeWhiteSpace(Node* node)
</span><span class="cx"> {
</span><del>-    return (node-&gt;codeOrigin.inlineDepth() - 1) * 2;
</del><ins>+    return (node-&gt;origin.semantic.inlineDepth() - 1) * 2;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Graph::printNodeWhiteSpace(PrintStream&amp; out, Node* node)
</span><span class="lines">@@ -206,7 +206,7 @@
</span><span class="cx">     if (node-&gt;hasVarNumber())
</span><span class="cx">         out.print(comma, node-&gt;varNumber());
</span><span class="cx">     if (node-&gt;hasRegisterPointer())
</span><del>-        out.print(comma, &quot;global&quot;, globalObjectFor(node-&gt;codeOrigin)-&gt;findRegisterIndex(node-&gt;registerPointer()), &quot;(&quot;, RawPointer(node-&gt;registerPointer()), &quot;)&quot;);
</del><ins>+        out.print(comma, &quot;global&quot;, globalObjectFor(node-&gt;origin.semantic)-&gt;findRegisterIndex(node-&gt;registerPointer()), &quot;(&quot;, RawPointer(node-&gt;registerPointer()), &quot;)&quot;);
</ins><span class="cx">     if (node-&gt;hasIdentifier())
</span><span class="cx">         out.print(comma, &quot;id&quot;, node-&gt;identifierNumber(), &quot;{&quot;, identifiers()[node-&gt;identifierNumber()], &quot;}&quot;);
</span><span class="cx">     if (node-&gt;hasStructureSet())
</span><span class="lines">@@ -328,7 +328,9 @@
</span><span class="cx">         out.print(comma, &quot;R:&quot;, sortedListDump(reads.direct(), &quot;,&quot;));
</span><span class="cx">     if (!writes.isEmpty())
</span><span class="cx">         out.print(comma, &quot;W:&quot;, sortedListDump(writes.direct(), &quot;,&quot;));
</span><del>-    out.print(comma, &quot;bc#&quot;, node-&gt;codeOrigin.bytecodeIndex);
</del><ins>+    out.print(comma, &quot;bc#&quot;, node-&gt;origin.semantic.bytecodeIndex);
+    if (node-&gt;origin.semantic != node-&gt;origin.forExit)
+        out.print(comma, &quot;exit: &quot;, node-&gt;origin.forExit);
</ins><span class="cx">     
</span><span class="cx">     out.print(&quot;)&quot;);
</span><span class="cx"> 
</span><span class="lines">@@ -344,7 +346,7 @@
</span><span class="cx"> 
</span><span class="cx"> void Graph::dumpBlockHeader(PrintStream&amp; out, const char* prefix, BasicBlock* block, PhiNodeDumpMode phiNodeDumpMode, DumpContext* context)
</span><span class="cx"> {
</span><del>-    out.print(prefix, &quot;Block &quot;, *block, &quot; (&quot;, inContext(block-&gt;at(0)-&gt;codeOrigin, context), &quot;): &quot;, block-&gt;isReachable ? &quot;&quot; : &quot;(skipped)&quot;, block-&gt;isOSRTarget ? &quot; (OSR target)&quot; : &quot;&quot;, &quot;\n&quot;);
</del><ins>+    out.print(prefix, &quot;Block &quot;, *block, &quot; (&quot;, inContext(block-&gt;at(0)-&gt;origin.semantic, context), &quot;): &quot;, block-&gt;isReachable ? &quot;&quot; : &quot;(skipped)&quot;, block-&gt;isOSRTarget ? &quot; (OSR target)&quot; : &quot;&quot;, &quot;\n&quot;);
</ins><span class="cx">     out.print(prefix, &quot;  Predecessors:&quot;);
</span><span class="cx">     for (size_t i = 0; i &lt; block-&gt;predecessors.size(); ++i)
</span><span class="cx">         out.print(&quot; &quot;, *block-&gt;predecessors[i]);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGGraphh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGGraph.h (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGGraph.h        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGGraph.h        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -459,7 +459,7 @@
</span><span class="cx">     
</span><span class="cx">     bool hasExitSite(Node* node, ExitKind exitKind)
</span><span class="cx">     {
</span><del>-        return hasExitSite(node-&gt;codeOrigin, exitKind);
</del><ins>+        return hasExitSite(node-&gt;origin.semantic, exitKind);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     VirtualRegister argumentsRegisterFor(InlineCallFrame* inlineCallFrame)
</span><span class="lines">@@ -533,7 +533,7 @@
</span><span class="cx">         if (!node)
</span><span class="cx">             return 0;
</span><span class="cx">         
</span><del>-        CodeBlock* profiledBlock = baselineCodeBlockFor(node-&gt;codeOrigin);
</del><ins>+        CodeBlock* profiledBlock = baselineCodeBlockFor(node-&gt;origin.semantic);
</ins><span class="cx">         
</span><span class="cx">         if (node-&gt;op() == GetArgument)
</span><span class="cx">             return profiledBlock-&gt;valueProfileForArgument(node-&gt;local().toArgument());
</span><span class="lines">@@ -550,7 +550,7 @@
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         if (node-&gt;hasHeapPrediction())
</span><del>-            return profiledBlock-&gt;valueProfileForBytecodeOffset(node-&gt;codeOrigin.bytecodeIndex);
</del><ins>+            return profiledBlock-&gt;valueProfileForBytecodeOffset(node-&gt;origin.semantic.bytecodeIndex);
</ins><span class="cx">         
</span><span class="cx">         return 0;
</span><span class="cx">     }
</span><span class="lines">@@ -560,13 +560,13 @@
</span><span class="cx">         if (!node)
</span><span class="cx">             return MethodOfGettingAValueProfile();
</span><span class="cx">         
</span><del>-        CodeBlock* profiledBlock = baselineCodeBlockFor(node-&gt;codeOrigin);
</del><ins>+        CodeBlock* profiledBlock = baselineCodeBlockFor(node-&gt;origin.semantic);
</ins><span class="cx">         
</span><span class="cx">         if (node-&gt;op() == GetLocal) {
</span><span class="cx">             return MethodOfGettingAValueProfile::fromLazyOperand(
</span><span class="cx">                 profiledBlock,
</span><span class="cx">                 LazyOperandValueProfileKey(
</span><del>-                    node-&gt;codeOrigin.bytecodeIndex, node-&gt;local()));
</del><ins>+                    node-&gt;origin.semantic.bytecodeIndex, node-&gt;local()));
</ins><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         return MethodOfGettingAValueProfile(valueProfileFor(node));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGInvalidationPointInjectionPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGInvalidationPointInjectionPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGInvalidationPointInjectionPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGInvalidationPointInjectionPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -85,18 +85,18 @@
</span><span class="cx"> private:
</span><span class="cx">     void handle(unsigned nodeIndex, Node* node)
</span><span class="cx">     {
</span><del>-        if (m_originThatHadFire.isSet() &amp;&amp; m_originThatHadFire != node-&gt;codeOrigin) {
</del><ins>+        if (m_originThatHadFire.isSet() &amp;&amp; m_originThatHadFire != node-&gt;origin.forExit) {
</ins><span class="cx">             insertInvalidationCheck(nodeIndex, node);
</span><span class="cx">             m_originThatHadFire = CodeOrigin();
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         if (writesOverlap(m_graph, node, Watchpoint_fire))
</span><del>-            m_originThatHadFire = node-&gt;codeOrigin;
</del><ins>+            m_originThatHadFire = node-&gt;origin.forExit;
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     void insertInvalidationCheck(unsigned nodeIndex, Node* node)
</span><span class="cx">     {
</span><del>-        m_insertionSet.insertNode(nodeIndex, SpecNone, InvalidationPoint, node-&gt;codeOrigin);
</del><ins>+        m_insertionSet.insertNode(nodeIndex, SpecNone, InvalidationPoint, node-&gt;origin);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     CodeOrigin m_originThatHadFire;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGLICMPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGLICMPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGLICMPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGLICMPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -246,7 +246,8 @@
</span><span class="cx">         
</span><span class="cx">         data.preHeader-&gt;insertBeforeLast(node);
</span><span class="cx">         node-&gt;misc.owner = data.preHeader;
</span><del>-        node-&gt;codeOriginForExitTarget = data.preHeader-&gt;last()-&gt;codeOriginForExitTarget;
</del><ins>+        NodeOrigin originalOrigin = node-&gt;origin;
+        node-&gt;origin.forExit = data.preHeader-&gt;last()-&gt;origin.forExit;
</ins><span class="cx">         
</span><span class="cx">         // Modify the states at the end of the preHeader of the loop we hoisted to,
</span><span class="cx">         // and all pre-headers inside the loop.
</span><span class="lines">@@ -269,7 +270,7 @@
</span><span class="cx">         // code. But for now we just assert that's the case.
</span><span class="cx">         RELEASE_ASSERT(!(node-&gt;flags() &amp; NodeHasVarArgs));
</span><span class="cx">         
</span><del>-        nodeRef = m_graph.addNode(SpecNone, Phantom, node-&gt;codeOrigin, node-&gt;children);
</del><ins>+        nodeRef = m_graph.addNode(SpecNone, Phantom, originalOrigin, node-&gt;children);
</ins><span class="cx">         
</span><span class="cx">         return true;
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGLoopPreHeaderCreationPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGLoopPreHeaderCreationPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGLoopPreHeaderCreationPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGLoopPreHeaderCreationPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx"> {
</span><span class="cx">     BasicBlock* preHeader = insertionSet.insertBefore(block);
</span><span class="cx">     preHeader-&gt;appendNode(
</span><del>-        graph, SpecNone, Jump, block-&gt;at(0)-&gt;codeOrigin, OpInfo(block));
</del><ins>+        graph, SpecNone, Jump, block-&gt;at(0)-&gt;origin, OpInfo(block));
</ins><span class="cx">     
</span><span class="cx">     for (unsigned predecessorIndex = 0; predecessorIndex &lt; block-&gt;predecessors.size(); predecessorIndex++) {
</span><span class="cx">         BasicBlock* predecessor = block-&gt;predecessors[predecessorIndex];
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGNode.h (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGNode.h        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGNode.h        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -31,7 +31,6 @@
</span><span class="cx"> #if ENABLE(DFG_JIT)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;CodeBlock.h&quot;
</span><del>-#include &quot;CodeOrigin.h&quot;
</del><span class="cx"> #include &quot;DFGAbstractValue.h&quot;
</span><span class="cx"> #include &quot;DFGAdjacencyList.h&quot;
</span><span class="cx"> #include &quot;DFGArithMode.h&quot;
</span><span class="lines">@@ -39,6 +38,7 @@
</span><span class="cx"> #include &quot;DFGCommon.h&quot;
</span><span class="cx"> #include &quot;DFGLazyJSValue.h&quot;
</span><span class="cx"> #include &quot;DFGNodeFlags.h&quot;
</span><ins>+#include &quot;DFGNodeOrigin.h&quot;
</ins><span class="cx"> #include &quot;DFGNodeType.h&quot;
</span><span class="cx"> #include &quot;DFGVariableAccessData.h&quot;
</span><span class="cx"> #include &quot;JSCJSValue.h&quot;
</span><span class="lines">@@ -161,9 +161,8 @@
</span><span class="cx">     
</span><span class="cx">     Node() { }
</span><span class="cx">     
</span><del>-    Node(NodeType op, CodeOrigin codeOrigin, const AdjacencyList&amp; children)
-        : codeOrigin(codeOrigin)
-        , codeOriginForExitTarget(codeOrigin)
</del><ins>+    Node(NodeType op, NodeOrigin nodeOrigin, const AdjacencyList&amp; children)
+        : origin(nodeOrigin)
</ins><span class="cx">         , children(children)
</span><span class="cx">         , m_virtualRegister(VirtualRegister())
</span><span class="cx">         , m_refCount(1)
</span><span class="lines">@@ -174,9 +173,8 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     // Construct a node with up to 3 children, no immediate value.
</span><del>-    Node(NodeType op, CodeOrigin codeOrigin, Edge child1 = Edge(), Edge child2 = Edge(), Edge child3 = Edge())
-        : codeOrigin(codeOrigin)
-        , codeOriginForExitTarget(codeOrigin)
</del><ins>+    Node(NodeType op, NodeOrigin nodeOrigin, Edge child1 = Edge(), Edge child2 = Edge(), Edge child3 = Edge())
+        : origin(nodeOrigin)
</ins><span class="cx">         , children(AdjacencyList::Fixed, child1, child2, child3)
</span><span class="cx">         , m_virtualRegister(VirtualRegister())
</span><span class="cx">         , m_refCount(1)
</span><span class="lines">@@ -190,9 +188,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Construct a node with up to 3 children and an immediate value.
</span><del>-    Node(NodeType op, CodeOrigin codeOrigin, OpInfo imm, Edge child1 = Edge(), Edge child2 = Edge(), Edge child3 = Edge())
-        : codeOrigin(codeOrigin)
-        , codeOriginForExitTarget(codeOrigin)
</del><ins>+    Node(NodeType op, NodeOrigin nodeOrigin, OpInfo imm, Edge child1 = Edge(), Edge child2 = Edge(), Edge child3 = Edge())
+        : origin(nodeOrigin)
</ins><span class="cx">         , children(AdjacencyList::Fixed, child1, child2, child3)
</span><span class="cx">         , m_virtualRegister(VirtualRegister())
</span><span class="cx">         , m_refCount(1)
</span><span class="lines">@@ -206,9 +203,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Construct a node with up to 3 children and two immediate values.
</span><del>-    Node(NodeType op, CodeOrigin codeOrigin, OpInfo imm1, OpInfo imm2, Edge child1 = Edge(), Edge child2 = Edge(), Edge child3 = Edge())
-        : codeOrigin(codeOrigin)
-        , codeOriginForExitTarget(codeOrigin)
</del><ins>+    Node(NodeType op, NodeOrigin nodeOrigin, OpInfo imm1, OpInfo imm2, Edge child1 = Edge(), Edge child2 = Edge(), Edge child3 = Edge())
+        : origin(nodeOrigin)
</ins><span class="cx">         , children(AdjacencyList::Fixed, child1, child2, child3)
</span><span class="cx">         , m_virtualRegister(VirtualRegister())
</span><span class="cx">         , m_refCount(1)
</span><span class="lines">@@ -222,9 +218,8 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     // Construct a node with a variable number of children and two immediate values.
</span><del>-    Node(VarArgTag, NodeType op, CodeOrigin codeOrigin, OpInfo imm1, OpInfo imm2, unsigned firstChild, unsigned numChildren)
-        : codeOrigin(codeOrigin)
-        , codeOriginForExitTarget(codeOrigin)
</del><ins>+    Node(VarArgTag, NodeType op, NodeOrigin nodeOrigin, OpInfo imm1, OpInfo imm2, unsigned firstChild, unsigned numChildren)
+        : origin(nodeOrigin)
</ins><span class="cx">         , children(AdjacencyList::Variable, firstChild, numChildren)
</span><span class="cx">         , m_virtualRegister(VirtualRegister())
</span><span class="cx">         , m_refCount(1)
</span><span class="lines">@@ -332,7 +327,7 @@
</span><span class="cx">     bool isStronglyProvedConstantIn(InlineCallFrame* inlineCallFrame)
</span><span class="cx">     {
</span><span class="cx">         return !!(flags() &amp; NodeIsStaticConstant)
</span><del>-            &amp;&amp; codeOrigin.inlineCallFrame == inlineCallFrame;
</del><ins>+            &amp;&amp; origin.semantic.inlineCallFrame == inlineCallFrame;
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     bool isStronglyProvedConstantIn(const CodeOrigin&amp; codeOrigin)
</span><span class="lines">@@ -1537,12 +1532,9 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     // NB. This class must have a trivial destructor.
</span><del>-    
-    // Used for determining what bytecode this came from. This is important for
-    // debugging, exceptions, and even basic execution semantics.
-    CodeOrigin codeOrigin;
-    // Code origin for where the node exits to.
-    CodeOrigin codeOriginForExitTarget;
</del><ins>+
+    NodeOrigin origin;
+
</ins><span class="cx">     // References to up to 3 children, or links to a variable length set of children.
</span><span class="cx">     AdjacencyList children;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGNodeOriginh"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/dfg/DFGNodeOrigin.h (0 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGNodeOrigin.h                                (rev 0)
+++ trunk/Source/JavaScriptCore/dfg/DFGNodeOrigin.h        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -0,0 +1,67 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef DFGNodeOrigin_h
+#define DFGNodeOrigin_h
+
+#if ENABLE(DFG_JIT)
+
+#include &quot;CodeOrigin.h&quot;
+
+namespace JSC { namespace DFG {
+
+struct NodeOrigin {
+    NodeOrigin() { }
+    
+    explicit NodeOrigin(CodeOrigin codeOrigin)
+        : semantic(codeOrigin)
+        , forExit(codeOrigin)
+    {
+    }
+    
+    NodeOrigin(CodeOrigin semantic, CodeOrigin forExit)
+        : semantic(semantic)
+        , forExit(forExit)
+    {
+    }
+    
+    bool isSet() const
+    {
+        return semantic.isSet();
+    }
+    
+    // Used for determining what bytecode this came from. This is important for
+    // debugging, exceptions, and even basic execution semantics.
+    CodeOrigin semantic;
+    // Code origin for where the node exits to.
+    CodeOrigin forExit;
+};
+
+} } // namespace JSC::DFG
+
+#endif // ENABLE(DFG_JIT)
+
+#endif // DFGNodeOrigin_h
+
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGOSREntrypointCreationPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx">             while (firstNode-&gt;isSemanticallySkippable())
</span><span class="cx">                 firstNode = block-&gt;at(++nodeIndex);
</span><span class="cx">             if (firstNode-&gt;op() == LoopHint
</span><del>-                &amp;&amp; firstNode-&gt;codeOrigin == CodeOrigin(bytecodeIndex)) {
</del><ins>+                &amp;&amp; firstNode-&gt;origin.semantic == CodeOrigin(bytecodeIndex)) {
</ins><span class="cx">                 target = block;
</span><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx">         BlockInsertionSet insertionSet(m_graph);
</span><span class="cx">         
</span><span class="cx">         BasicBlock* newRoot = insertionSet.insert(0);
</span><del>-        CodeOrigin codeOrigin = target-&gt;at(0)-&gt;codeOrigin;
</del><ins>+        NodeOrigin origin = target-&gt;at(0)-&gt;origin;
</ins><span class="cx">         
</span><span class="cx">         Vector&lt;Node*&gt; locals(baseline-&gt;m_numCalleeRegisters);
</span><span class="cx">         for (int local = 0; local &lt; baseline-&gt;m_numCalleeRegisters; ++local) {
</span><span class="lines">@@ -94,11 +94,11 @@
</span><span class="cx">                 continue;
</span><span class="cx">             VariableAccessData* variable = previousHead-&gt;variableAccessData();
</span><span class="cx">             locals[local] = newRoot-&gt;appendNode(
</span><del>-                m_graph, variable-&gt;prediction(), ExtractOSREntryLocal, codeOrigin,
</del><ins>+                m_graph, variable-&gt;prediction(), ExtractOSREntryLocal, origin,
</ins><span class="cx">                 OpInfo(variable-&gt;local().offset()));
</span><span class="cx">             
</span><span class="cx">             newRoot-&gt;appendNode(
</span><del>-                m_graph, SpecNone, MovHint, codeOrigin, OpInfo(variable-&gt;local().offset()),
</del><ins>+                m_graph, SpecNone, MovHint, origin, OpInfo(variable-&gt;local().offset()),
</ins><span class="cx">                 Edge(locals[local]));
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -109,7 +109,7 @@
</span><span class="cx">                 oldNode = m_graph.m_arguments[argument];
</span><span class="cx">             }
</span><span class="cx">             Node* node = newRoot-&gt;appendNode(
</span><del>-                m_graph, SpecNone, SetArgument, codeOrigin,
</del><ins>+                m_graph, SpecNone, SetArgument, origin,
</ins><span class="cx">                 OpInfo(oldNode-&gt;variableAccessData()));
</span><span class="cx">             m_graph.m_arguments[argument] = node;
</span><span class="cx">         }
</span><span class="lines">@@ -121,11 +121,11 @@
</span><span class="cx">             VariableAccessData* variable = previousHead-&gt;variableAccessData();
</span><span class="cx">             Node* node = locals[local];
</span><span class="cx">             newRoot-&gt;appendNode(
</span><del>-                m_graph, SpecNone, SetLocal, codeOrigin, OpInfo(variable), Edge(node));
</del><ins>+                m_graph, SpecNone, SetLocal, origin, OpInfo(variable), Edge(node));
</ins><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         newRoot-&gt;appendNode(
</span><del>-            m_graph, SpecNone, Jump, codeOrigin,
</del><ins>+            m_graph, SpecNone, Jump, origin,
</ins><span class="cx">             OpInfo(createPreHeader(m_graph, insertionSet, target)));
</span><span class="cx">         
</span><span class="cx">         insertionSet.execute();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGResurrectionForValidationPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGResurrectionForValidationPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGResurrectionForValidationPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGResurrectionForValidationPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx">                 if (!node-&gt;hasResult())
</span><span class="cx">                     continue;
</span><span class="cx">                 insertionSet.insertNode(
</span><del>-                    nodeIndex + 1, SpecNone, Phantom, node-&gt;codeOrigin, Edge(node));
</del><ins>+                    nodeIndex + 1, SpecNone, Phantom, node-&gt;origin, Edge(node));
</ins><span class="cx">             }
</span><span class="cx">             
</span><span class="cx">             insertionSet.execute(block);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSSAConversionPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -176,7 +176,7 @@
</span><span class="cx">                         NodeFlags result = resultFor(format);
</span><span class="cx">                         UseKind useKind = useKindFor(format);
</span><span class="cx">                         
</span><del>-                        node = m_insertionSet.insertNode(0, SpecNone, Phi, CodeOrigin());
</del><ins>+                        node = m_insertionSet.insertNode(0, SpecNone, Phi, NodeOrigin());
</ins><span class="cx">                         if (verbose)
</span><span class="cx">                             dataLog(&quot;    Inserted new node: &quot;, node, &quot;\n&quot;);
</span><span class="cx">                         node-&gt;mergeFlags(result);
</span><span class="lines">@@ -185,7 +185,7 @@
</span><span class="cx">                         for (unsigned j = block-&gt;predecessors.size(); j--;) {
</span><span class="cx">                             BasicBlock* predecessor = block-&gt;predecessors[j];
</span><span class="cx">                             predecessor-&gt;appendNonTerminal(
</span><del>-                                m_graph, SpecNone, Upsilon, predecessor-&gt;last()-&gt;codeOrigin,
</del><ins>+                                m_graph, SpecNone, Upsilon, predecessor-&gt;last()-&gt;origin,
</ins><span class="cx">                                 OpInfo(node), Edge(predecessor-&gt;variablesAtTail[i], useKind));
</span><span class="cx">                         }
</span><span class="cx">                         
</span><span class="lines">@@ -211,7 +211,7 @@
</span><span class="cx">                             // the value was already on the stack.
</span><span class="cx">                         } else {
</span><span class="cx">                             m_insertionSet.insertNode(
</span><del>-                                0, SpecNone, MovHint, CodeOrigin(),
</del><ins>+                                0, SpecNone, MovHint, NodeOrigin(),
</ins><span class="cx">                                 OpInfo(variable-&gt;local().offset()), Edge(node));
</span><span class="cx">                         }
</span><span class="cx">                     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSSALoweringPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSSALoweringPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSSALoweringPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGSSALoweringPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -83,7 +83,7 @@
</span><span class="cx">             
</span><span class="cx">             if (m_node-&gt;arrayMode().typedArrayType() != NotTypedArray &amp;&amp; m_node-&gt;arrayMode().isOutOfBounds()) {
</span><span class="cx">                 Node* length = m_insertionSet.insertNode(
</span><del>-                    m_nodeIndex, SpecInt32, GetArrayLength, m_node-&gt;codeOrigin,
</del><ins>+                    m_nodeIndex, SpecInt32, GetArrayLength, m_node-&gt;origin,
</ins><span class="cx">                     OpInfo(m_node-&gt;arrayMode().asWord()), base, storage);
</span><span class="cx">                 
</span><span class="cx">                 m_graph.varArgChild(m_node, 4) = Edge(length, KnownInt32Use);
</span><span class="lines">@@ -106,10 +106,10 @@
</span><span class="cx">             storage = Edge();
</span><span class="cx">         
</span><span class="cx">         Node* length = m_insertionSet.insertNode(
</span><del>-            m_nodeIndex, SpecInt32, GetArrayLength, m_node-&gt;codeOrigin,
</del><ins>+            m_nodeIndex, SpecInt32, GetArrayLength, m_node-&gt;origin,
</ins><span class="cx">             OpInfo(m_node-&gt;arrayMode().asWord()), base, storage);
</span><span class="cx">         m_insertionSet.insertNode(
</span><del>-            m_nodeIndex, SpecInt32, CheckInBounds, m_node-&gt;codeOrigin,
</del><ins>+            m_nodeIndex, SpecInt32, CheckInBounds, m_node-&gt;origin,
</ins><span class="cx">             index, Edge(length, KnownInt32Use));
</span><span class="cx">         return true;
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJITcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -871,7 +871,7 @@
</span><span class="cx">                 JSValueRegs::payloadOnly(resultGPR), stubInfo, baseGPR,
</span><span class="cx">                 string-&gt;tryGetValueImpl());
</span><span class="cx">             
</span><del>-            stubInfo-&gt;codeOrigin = node-&gt;codeOrigin;
</del><ins>+            stubInfo-&gt;codeOrigin = node-&gt;origin.semantic;
</ins><span class="cx">             stubInfo-&gt;patch.baseGPR = static_cast&lt;int8_t&gt;(baseGPR);
</span><span class="cx">             stubInfo-&gt;patch.valueGPR = static_cast&lt;int8_t&gt;(resultGPR);
</span><span class="cx">             stubInfo-&gt;patch.usedRegisters = usedRegisters();
</span><span class="lines">@@ -1390,8 +1390,8 @@
</span><span class="cx">         m_canExit = m_currentNode-&gt;canExit();
</span><span class="cx">         bool shouldExecuteEffects = m_interpreter.startExecuting(m_currentNode);
</span><span class="cx">         m_jit.setForNode(m_currentNode);
</span><del>-        m_codeOriginForExitTarget = m_currentNode-&gt;codeOriginForExitTarget;
-        m_codeOriginForExitProfile = m_currentNode-&gt;codeOrigin;
</del><ins>+        m_codeOriginForExitTarget = m_currentNode-&gt;origin.forExit;
+        m_codeOriginForExitProfile = m_currentNode-&gt;origin.semantic;
</ins><span class="cx">         if (!m_currentNode-&gt;shouldGenerate()) {
</span><span class="cx">             switch (m_currentNode-&gt;op()) {
</span><span class="cx">             case JSConstant:
</span><span class="lines">@@ -1427,7 +1427,7 @@
</span><span class="cx">                 dataLogF(
</span><span class="cx">                     &quot;SpeculativeJIT generating Node @%d (bc#%u) at JIT offset 0x%x&quot;,
</span><span class="cx">                     (int)m_currentNode-&gt;index(),
</span><del>-                    m_currentNode-&gt;codeOrigin.bytecodeIndex, m_jit.debugOffset());
</del><ins>+                    m_currentNode-&gt;origin.semantic.bytecodeIndex, m_jit.debugOffset());
</ins><span class="cx">                 dataLog(&quot;\n&quot;);
</span><span class="cx">             }
</span><span class="cx">             
</span><span class="lines">@@ -1780,7 +1780,7 @@
</span><span class="cx">         m_jit.move(TrustedImm32(JSValue::CellTag), resultTagReg);
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-        JSGlobalObject* globalObject = m_jit.globalObjectFor(node-&gt;codeOrigin);
</del><ins>+        JSGlobalObject* globalObject = m_jit.globalObjectFor(node-&gt;origin.semantic);
</ins><span class="cx">         if (globalObject-&gt;stringPrototypeChainIsSane()) {
</span><span class="cx"> #if USE(JSVALUE64)
</span><span class="cx">             addSlowPathGenerator(adoptPtr(new SaneStringGetByValSlowPathGenerator(
</span><span class="lines">@@ -4455,7 +4455,7 @@
</span><span class="cx"> 
</span><span class="cx"> void SpeculativeJIT::compileNewTypedArray(Node* node)
</span><span class="cx"> {
</span><del>-    JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;codeOrigin);
</del><ins>+    JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;origin.semantic);
</ins><span class="cx">     TypedArrayType type = node-&gt;typedArrayType();
</span><span class="cx">     Structure* structure = globalObject-&gt;typedArrayStructure(type);
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJITh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -289,7 +289,7 @@
</span><span class="cx">     }
</span><span class="cx">     bool masqueradesAsUndefinedWatchpointIsStillValid()
</span><span class="cx">     {
</span><del>-        return masqueradesAsUndefinedWatchpointIsStillValid(m_currentNode-&gt;codeOrigin);
</del><ins>+        return masqueradesAsUndefinedWatchpointIsStillValid(m_currentNode-&gt;origin.semantic);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(GGC)
</span><span class="lines">@@ -1757,7 +1757,7 @@
</span><span class="cx">     JITCompiler::Call appendCallWithExceptionCheck(const FunctionPtr&amp; function)
</span><span class="cx">     {
</span><span class="cx">         prepareForExternalCall();
</span><del>-        m_jit.emitStoreCodeOrigin(m_currentNode-&gt;codeOrigin);
</del><ins>+        m_jit.emitStoreCodeOrigin(m_currentNode-&gt;origin.semantic);
</ins><span class="cx">         JITCompiler::Call call = m_jit.appendCall(function);
</span><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx">         return call;
</span><span class="lines">@@ -1765,7 +1765,7 @@
</span><span class="cx">     JITCompiler::Call appendCallWithCallFrameRollbackOnException(const FunctionPtr&amp; function)
</span><span class="cx">     {
</span><span class="cx">         prepareForExternalCall();
</span><del>-        m_jit.emitStoreCodeOrigin(m_currentNode-&gt;codeOrigin);
</del><ins>+        m_jit.emitStoreCodeOrigin(m_currentNode-&gt;origin.semantic);
</ins><span class="cx">         JITCompiler::Call call = m_jit.appendCall(function);
</span><span class="cx">         m_jit.exceptionCheckWithCallFrameRollback();
</span><span class="cx">         return call;
</span><span class="lines">@@ -1787,7 +1787,7 @@
</span><span class="cx">     JITCompiler::Call appendCallSetResult(const FunctionPtr&amp; function, GPRReg result)
</span><span class="cx">     {
</span><span class="cx">         prepareForExternalCall();
</span><del>-        m_jit.emitStoreCodeOrigin(m_currentNode-&gt;codeOrigin);
</del><ins>+        m_jit.emitStoreCodeOrigin(m_currentNode-&gt;origin.semantic);
</ins><span class="cx">         JITCompiler::Call call = m_jit.appendCall(function);
</span><span class="cx">         if (result != InvalidGPRReg)
</span><span class="cx">             m_jit.move(GPRInfo::returnValueGPR, result);
</span><span class="lines">@@ -1796,7 +1796,7 @@
</span><span class="cx">     JITCompiler::Call appendCall(const FunctionPtr&amp; function)
</span><span class="cx">     {
</span><span class="cx">         prepareForExternalCall();
</span><del>-        m_jit.emitStoreCodeOrigin(m_currentNode-&gt;codeOrigin);
</del><ins>+        m_jit.emitStoreCodeOrigin(m_currentNode-&gt;origin.semantic);
</ins><span class="cx">         return m_jit.appendCall(function);
</span><span class="cx">     }
</span><span class="cx">     JITCompiler::Call appendCallWithExceptionCheckSetResult(const FunctionPtr&amp; function, GPRReg result1, GPRReg result2)
</span><span class="lines">@@ -3040,7 +3040,7 @@
</span><span class="cx"> void SpeculativeJIT::speculateStringObjectForStructure(Edge edge, StructureLocationType structureLocation)
</span><span class="cx"> {
</span><span class="cx">     Structure* stringObjectStructure =
</span><del>-        m_jit.globalObjectFor(m_currentNode-&gt;codeOrigin)-&gt;stringObjectStructure();
</del><ins>+        m_jit.globalObjectFor(m_currentNode-&gt;origin.semantic)-&gt;stringObjectStructure();
</ins><span class="cx">     
</span><span class="cx">     if (!m_state.forNode(edge).m_currentKnownStructure.isSubsetOf(StructureSet(stringObjectStructure))) {
</span><span class="cx">         speculationCheck(
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJIT32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -257,7 +257,7 @@
</span><span class="cx">         isMasqueradesAsUndefined.link(&amp;m_jit);
</span><span class="cx">         GPRReg localGlobalObjectGPR = localGlobalObject.gpr();
</span><span class="cx">         GPRReg remoteGlobalObjectGPR = remoteGlobalObject.gpr();
</span><del>-        m_jit.move(JITCompiler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode-&gt;codeOrigin)), localGlobalObjectGPR);
</del><ins>+        m_jit.move(JITCompiler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode-&gt;origin.semantic)), localGlobalObjectGPR);
</ins><span class="cx">         m_jit.loadPtr(JITCompiler::Address(resultPayloadGPR, Structure::globalObjectOffset()), remoteGlobalObjectGPR);
</span><span class="cx">         m_jit.compare32(invert ? JITCompiler::NotEqual : JITCompiler::Equal, localGlobalObjectGPR, remoteGlobalObjectGPR, resultPayloadGPR);
</span><span class="cx">     }
</span><span class="lines">@@ -318,7 +318,7 @@
</span><span class="cx">    
</span><span class="cx">         GPRReg localGlobalObjectGPR = localGlobalObject.gpr();
</span><span class="cx">         GPRReg remoteGlobalObjectGPR = remoteGlobalObject.gpr();
</span><del>-        m_jit.move(TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode-&gt;codeOrigin)), localGlobalObjectGPR);
</del><ins>+        m_jit.move(TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode-&gt;origin.semantic)), localGlobalObjectGPR);
</ins><span class="cx">         m_jit.loadPtr(JITCompiler::Address(resultGPR, Structure::globalObjectOffset()), remoteGlobalObjectGPR);
</span><span class="cx">         branchPtr(JITCompiler::Equal, localGlobalObjectGPR, remoteGlobalObjectGPR, invert ? notTaken : taken);
</span><span class="cx">     }
</span><span class="lines">@@ -657,7 +657,7 @@
</span><span class="cx">     JITCompiler::DataLabelPtr targetToCheck;
</span><span class="cx">     JITCompiler::JumpList slowPath;
</span><span class="cx"> 
</span><del>-    m_jit.emitStoreCodeOrigin(node-&gt;codeOrigin);
</del><ins>+    m_jit.emitStoreCodeOrigin(node-&gt;origin.semantic);
</ins><span class="cx">     
</span><span class="cx">     slowPath.append(m_jit.branch32(MacroAssembler::NotEqual, calleeTagGPR, TrustedImm32(JSValue::CellTag)));
</span><span class="cx">     slowPath.append(m_jit.branchPtrWithPatch(MacroAssembler::NotEqual, calleePayloadGPR, targetToCheck));
</span><span class="lines">@@ -691,7 +691,7 @@
</span><span class="cx"> 
</span><span class="cx">     jsValueResult(resultTagGPR, resultPayloadGPR, node, DataFormatJS, UseChildrenCalledExplicitly);
</span><span class="cx"> 
</span><del>-    m_jit.addJSCall(fastCall, slowCall, targetToCheck, callType, calleePayloadGPR, node-&gt;codeOrigin);
</del><ins>+    m_jit.addJSCall(fastCall, slowCall, targetToCheck, callType, calleePayloadGPR, node-&gt;origin.semantic);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;bool strict&gt;
</span><span class="lines">@@ -1466,7 +1466,7 @@
</span><span class="cx">             m_jit.branchPtr(
</span><span class="cx">                 MacroAssembler::Equal, 
</span><span class="cx">                 MacroAssembler::Address(structureGPR, Structure::globalObjectOffset()), 
</span><del>-                MacroAssembler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode-&gt;codeOrigin))));
</del><ins>+                MacroAssembler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode-&gt;origin.semantic))));
</ins><span class="cx"> 
</span><span class="cx">         isNotMasqueradesAsUndefined.link(&amp;m_jit);
</span><span class="cx">     }
</span><span class="lines">@@ -1592,7 +1592,7 @@
</span><span class="cx">             m_jit.branchPtr(
</span><span class="cx">                 MacroAssembler::Equal, 
</span><span class="cx">                 MacroAssembler::Address(scratchGPR, Structure::globalObjectOffset()), 
</span><del>-                MacroAssembler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode-&gt;codeOrigin))));
</del><ins>+                MacroAssembler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode-&gt;origin.semantic))));
</ins><span class="cx"> 
</span><span class="cx">         isNotMasqueradesAsUndefined.link(&amp;m_jit);
</span><span class="cx">     }
</span><span class="lines">@@ -3135,7 +3135,7 @@
</span><span class="cx">     }
</span><span class="cx">         
</span><span class="cx">     case NewArray: {
</span><del>-        JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;codeOrigin);
</del><ins>+        JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;origin.semantic);
</ins><span class="cx">         if (!globalObject-&gt;isHavingABadTime() &amp;&amp; !hasArrayStorage(node-&gt;indexingType())) {
</span><span class="cx">             Structure* structure = globalObject-&gt;arrayStructureForIndexingTypeDuringAllocation(node-&gt;indexingType());
</span><span class="cx">             ASSERT(structure-&gt;indexingType() == node-&gt;indexingType());
</span><span class="lines">@@ -3303,7 +3303,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     case NewArrayWithSize: {
</span><del>-        JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;codeOrigin);
</del><ins>+        JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;origin.semantic);
</ins><span class="cx">         if (!globalObject-&gt;isHavingABadTime() &amp;&amp; !hasArrayStorage(node-&gt;indexingType())) {
</span><span class="cx">             SpeculateStrictInt32Operand size(this, node-&gt;child1());
</span><span class="cx">             GPRTemporary result(this);
</span><span class="lines">@@ -3376,7 +3376,7 @@
</span><span class="cx">     }
</span><span class="cx">         
</span><span class="cx">     case NewArrayBuffer: {
</span><del>-        JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;codeOrigin);
</del><ins>+        JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;origin.semantic);
</ins><span class="cx">         IndexingType indexingType = node-&gt;indexingType();
</span><span class="cx">         if (!globalObject-&gt;isHavingABadTime() &amp;&amp; !hasArrayStorage(indexingType)) {
</span><span class="cx">             unsigned numElements = node-&gt;numConstants();
</span><span class="lines">@@ -3436,7 +3436,7 @@
</span><span class="cx">             GPRResult result(this);
</span><span class="cx">             GPRReg resultGPR = result.gpr();
</span><span class="cx">             
</span><del>-            JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;codeOrigin);
</del><ins>+            JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;origin.semantic);
</ins><span class="cx">             callOperation(
</span><span class="cx">                 operationNewTypedArrayWithOneArgumentForType(node-&gt;typedArrayType()),
</span><span class="cx">                 resultGPR, globalObject-&gt;typedArrayStructure(node-&gt;typedArrayType()),
</span><span class="lines">@@ -3486,7 +3486,7 @@
</span><span class="cx">         m_jit.move(thisValuePayloadGPR, tempGPR);
</span><span class="cx">         m_jit.move(thisValueTagGPR, tempTagGPR);
</span><span class="cx">         J_JITOperation_EJ function;
</span><del>-        if (m_jit.graph().executableFor(node-&gt;codeOrigin)-&gt;isStrictMode())
</del><ins>+        if (m_jit.graph().executableFor(node-&gt;origin.semantic)-&gt;isStrictMode())
</ins><span class="cx">             function = operationToThisStrict;
</span><span class="cx">         else
</span><span class="cx">             function = operationToThis;
</span><span class="lines">@@ -3671,7 +3671,7 @@
</span><span class="cx"> 
</span><span class="cx">             base.use();
</span><span class="cx">             
</span><del>-            cachedGetById(node-&gt;codeOrigin, InvalidGPRReg, baseGPR, resultTagGPR, resultPayloadGPR, node-&gt;identifierNumber());
</del><ins>+            cachedGetById(node-&gt;origin.semantic, InvalidGPRReg, baseGPR, resultTagGPR, resultPayloadGPR, node-&gt;identifierNumber());
</ins><span class="cx">             
</span><span class="cx">             jsValueResult(resultTagGPR, resultPayloadGPR, node, UseChildrenCalledExplicitly);
</span><span class="cx">             break;
</span><span class="lines">@@ -3691,7 +3691,7 @@
</span><span class="cx">         
</span><span class="cx">             JITCompiler::Jump notCell = m_jit.branch32(JITCompiler::NotEqual, baseTagGPR, TrustedImm32(JSValue::CellTag));
</span><span class="cx">         
</span><del>-            cachedGetById(node-&gt;codeOrigin, baseTagGPR, basePayloadGPR, resultTagGPR, resultPayloadGPR, node-&gt;identifierNumber(), notCell);
</del><ins>+            cachedGetById(node-&gt;origin.semantic, baseTagGPR, basePayloadGPR, resultTagGPR, resultPayloadGPR, node-&gt;identifierNumber(), notCell);
</ins><span class="cx">         
</span><span class="cx">             jsValueResult(resultTagGPR, resultPayloadGPR, node, UseChildrenCalledExplicitly);
</span><span class="cx">             break;
</span><span class="lines">@@ -3725,7 +3725,7 @@
</span><span class="cx">             
</span><span class="cx">             flushRegisters();
</span><span class="cx">             
</span><del>-            cachedGetById(node-&gt;codeOrigin, InvalidGPRReg, baseGPR, resultTagGPR, resultPayloadGPR, node-&gt;identifierNumber(), JITCompiler::Jump(), DontSpill);
</del><ins>+            cachedGetById(node-&gt;origin.semantic, InvalidGPRReg, baseGPR, resultTagGPR, resultPayloadGPR, node-&gt;identifierNumber(), JITCompiler::Jump(), DontSpill);
</ins><span class="cx">             
</span><span class="cx">             jsValueResult(resultTagGPR, resultPayloadGPR, node, UseChildrenCalledExplicitly);
</span><span class="cx">             break;
</span><span class="lines">@@ -3747,7 +3747,7 @@
</span><span class="cx">         
</span><span class="cx">             JITCompiler::Jump notCell = m_jit.branch32(JITCompiler::NotEqual, baseTagGPR, TrustedImm32(JSValue::CellTag));
</span><span class="cx">         
</span><del>-            cachedGetById(node-&gt;codeOrigin, baseTagGPR, basePayloadGPR, resultTagGPR, resultPayloadGPR, node-&gt;identifierNumber(), notCell, DontSpill);
</del><ins>+            cachedGetById(node-&gt;origin.semantic, baseTagGPR, basePayloadGPR, resultTagGPR, resultPayloadGPR, node-&gt;identifierNumber(), notCell, DontSpill);
</ins><span class="cx">         
</span><span class="cx">             jsValueResult(resultTagGPR, resultPayloadGPR, node, UseChildrenCalledExplicitly);
</span><span class="cx">             break;
</span><span class="lines">@@ -3937,7 +3937,7 @@
</span><span class="cx">         GPRReg valuePayloadGPR = value.payloadGPR();
</span><span class="cx">         GPRReg scratchGPR = scratch.gpr();
</span><span class="cx">         
</span><del>-        cachedPutById(node-&gt;codeOrigin, baseGPR, valueTagGPR, valuePayloadGPR, scratchGPR, node-&gt;identifierNumber(), NotDirect);
</del><ins>+        cachedPutById(node-&gt;origin.semantic, baseGPR, valueTagGPR, valuePayloadGPR, scratchGPR, node-&gt;identifierNumber(), NotDirect);
</ins><span class="cx">         
</span><span class="cx">         noResult(node);
</span><span class="cx">         break;
</span><span class="lines">@@ -3953,7 +3953,7 @@
</span><span class="cx">         GPRReg valuePayloadGPR = value.payloadGPR();
</span><span class="cx">         GPRReg scratchGPR = scratch.gpr();
</span><span class="cx">         
</span><del>-        cachedPutById(node-&gt;codeOrigin, baseGPR, valueTagGPR, valuePayloadGPR, scratchGPR, node-&gt;identifierNumber(), Direct);
</del><ins>+        cachedPutById(node-&gt;origin.semantic, baseGPR, valueTagGPR, valuePayloadGPR, scratchGPR, node-&gt;identifierNumber(), Direct);
</ins><span class="cx"> 
</span><span class="cx">         noResult(node);
</span><span class="cx">         break;
</span><span class="lines">@@ -4089,7 +4089,7 @@
</span><span class="cx">             isMasqueradesAsUndefined.link(&amp;m_jit);
</span><span class="cx">             GPRReg localGlobalObjectGPR = localGlobalObject.gpr();
</span><span class="cx">             GPRReg remoteGlobalObjectGPR = remoteGlobalObject.gpr();
</span><del>-            m_jit.move(TrustedImmPtr(m_jit.globalObjectFor(node-&gt;codeOrigin)), localGlobalObjectGPR);
</del><ins>+            m_jit.move(TrustedImmPtr(m_jit.globalObjectFor(node-&gt;origin.semantic)), localGlobalObjectGPR);
</ins><span class="cx">             m_jit.loadPtr(JITCompiler::Address(result.gpr(), Structure::globalObjectOffset()), remoteGlobalObjectGPR); 
</span><span class="cx">             m_jit.compare32(JITCompiler::Equal, localGlobalObjectGPR, remoteGlobalObjectGPR, result.gpr());
</span><span class="cx">         }
</span><span class="lines">@@ -4268,11 +4268,11 @@
</span><span class="cx">         
</span><span class="cx">         JITCompiler::Jump notCreated = m_jit.branch32(JITCompiler::Equal, valueTagGPR, TrustedImm32(JSValue::EmptyValueTag));
</span><span class="cx">         
</span><del>-        if (node-&gt;codeOrigin.inlineCallFrame) {
</del><ins>+        if (node-&gt;origin.semantic.inlineCallFrame) {
</ins><span class="cx">             addSlowPathGenerator(
</span><span class="cx">                 slowPathCall(
</span><span class="cx">                     notCreated, this, operationCreateInlinedArguments, resultGPR,
</span><del>-                    node-&gt;codeOrigin.inlineCallFrame));
</del><ins>+                    node-&gt;origin.semantic.inlineCallFrame));
</ins><span class="cx">         } else {
</span><span class="cx">             addSlowPathGenerator(
</span><span class="cx">                 slowPathCall(notCreated, this, operationCreateArguments, resultGPR));
</span><span class="lines">@@ -4292,7 +4292,7 @@
</span><span class="cx"> 
</span><span class="cx">         JITCompiler::Jump notCreated = m_jit.branch32(JITCompiler::Equal, activationValueTagGPR, TrustedImm32(JSValue::EmptyValueTag));
</span><span class="cx"> 
</span><del>-        SymbolTable* symbolTable = m_jit.symbolTableFor(node-&gt;codeOrigin);
</del><ins>+        SymbolTable* symbolTable = m_jit.symbolTableFor(node-&gt;origin.semantic);
</ins><span class="cx">         int registersOffset = JSActivation::registersOffset(symbolTable);
</span><span class="cx"> 
</span><span class="cx">         int bytecodeCaptureStart = symbolTable-&gt;captureStart();
</span><span class="lines">@@ -4330,11 +4330,11 @@
</span><span class="cx">         JITCompiler::Jump created = m_jit.branchTest32(
</span><span class="cx">             JITCompiler::NonZero, unmodifiedArgumentsValuePayloadGPR);
</span><span class="cx">         
</span><del>-        if (node-&gt;codeOrigin.inlineCallFrame) {
</del><ins>+        if (node-&gt;origin.semantic.inlineCallFrame) {
</ins><span class="cx">             addSlowPathGenerator(
</span><span class="cx">                 slowPathCall(
</span><span class="cx">                     created, this, operationTearOffInlinedArguments, NoResult,
</span><del>-                    unmodifiedArgumentsValuePayloadGPR, activationValuePayloadGPR, node-&gt;codeOrigin.inlineCallFrame));
</del><ins>+                    unmodifiedArgumentsValuePayloadGPR, activationValuePayloadGPR, node-&gt;origin.semantic.inlineCallFrame));
</ins><span class="cx">         } else {
</span><span class="cx">             addSlowPathGenerator(
</span><span class="cx">                 slowPathCall(
</span><span class="lines">@@ -4349,12 +4349,12 @@
</span><span class="cx">     case CheckArgumentsNotCreated: {
</span><span class="cx">         ASSERT(!isEmptySpeculation(
</span><span class="cx">             m_state.variables().operand(
</span><del>-                m_jit.graph().argumentsRegisterFor(node-&gt;codeOrigin)).m_type));
</del><ins>+                m_jit.graph().argumentsRegisterFor(node-&gt;origin.semantic)).m_type));
</ins><span class="cx">         speculationCheck(
</span><span class="cx">             Uncountable, JSValueRegs(), 0,
</span><span class="cx">             m_jit.branch32(
</span><span class="cx">                 JITCompiler::NotEqual,
</span><del>-                JITCompiler::tagFor(m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin)),
</del><ins>+                JITCompiler::tagFor(m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic)),
</ins><span class="cx">                 TrustedImm32(JSValue::EmptyValueTag)));
</span><span class="cx">         noResult(node);
</span><span class="cx">         break;
</span><span class="lines">@@ -4366,16 +4366,16 @@
</span><span class="cx">         
</span><span class="cx">         if (!isEmptySpeculation(
</span><span class="cx">                 m_state.variables().operand(
</span><del>-                    m_jit.graph().argumentsRegisterFor(node-&gt;codeOrigin)).m_type)) {
</del><ins>+                    m_jit.graph().argumentsRegisterFor(node-&gt;origin.semantic)).m_type)) {
</ins><span class="cx">             speculationCheck(
</span><span class="cx">                 ArgumentsEscaped, JSValueRegs(), 0,
</span><span class="cx">                 m_jit.branch32(
</span><span class="cx">                     JITCompiler::NotEqual,
</span><del>-                    JITCompiler::tagFor(m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin)),
</del><ins>+                    JITCompiler::tagFor(m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic)),
</ins><span class="cx">                     TrustedImm32(JSValue::EmptyValueTag)));
</span><span class="cx">         }
</span><span class="cx">         
</span><del>-        ASSERT(!node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+        ASSERT(!node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">         m_jit.load32(JITCompiler::payloadFor(JSStack::ArgumentCount), resultGPR);
</span><span class="cx">         m_jit.sub32(TrustedImm32(1), resultGPR);
</span><span class="cx">         int32Result(resultGPR, node);
</span><span class="lines">@@ -4390,12 +4390,12 @@
</span><span class="cx">         
</span><span class="cx">         JITCompiler::Jump created = m_jit.branch32(
</span><span class="cx">             JITCompiler::NotEqual,
</span><del>-            JITCompiler::tagFor(m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin)),
</del><ins>+            JITCompiler::tagFor(m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic)),
</ins><span class="cx">             TrustedImm32(JSValue::EmptyValueTag));
</span><span class="cx">         
</span><del>-        if (node-&gt;codeOrigin.inlineCallFrame) {
</del><ins>+        if (node-&gt;origin.semantic.inlineCallFrame) {
</ins><span class="cx">             m_jit.move(
</span><del>-                Imm32(node-&gt;codeOrigin.inlineCallFrame-&gt;arguments.size() - 1),
</del><ins>+                Imm32(node-&gt;origin.semantic.inlineCallFrame-&gt;arguments.size() - 1),
</ins><span class="cx">                 resultPayloadGPR);
</span><span class="cx">         } else {
</span><span class="cx">             m_jit.load32(JITCompiler::payloadFor(JSStack::ArgumentCount), resultPayloadGPR);
</span><span class="lines">@@ -4411,7 +4411,7 @@
</span><span class="cx">             slowPathCall(
</span><span class="cx">                 created, this, operationGetArgumentsLength,
</span><span class="cx">                 JSValueRegs(resultTagGPR, resultPayloadGPR),
</span><del>-                m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin).offset()));
</del><ins>+                m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic).offset()));
</ins><span class="cx">         
</span><span class="cx">         jsValueResult(resultTagGPR, resultPayloadGPR, node);
</span><span class="cx">         break;
</span><span class="lines">@@ -4427,24 +4427,24 @@
</span><span class="cx">         
</span><span class="cx">         if (!isEmptySpeculation(
</span><span class="cx">                 m_state.variables().operand(
</span><del>-                    m_jit.graph().argumentsRegisterFor(node-&gt;codeOrigin)).m_type)) {
</del><ins>+                    m_jit.graph().argumentsRegisterFor(node-&gt;origin.semantic)).m_type)) {
</ins><span class="cx">             speculationCheck(
</span><span class="cx">                 ArgumentsEscaped, JSValueRegs(), 0,
</span><span class="cx">                 m_jit.branch32(
</span><span class="cx">                     JITCompiler::NotEqual,
</span><del>-                    JITCompiler::tagFor(m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin)),
</del><ins>+                    JITCompiler::tagFor(m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic)),
</ins><span class="cx">                     TrustedImm32(JSValue::EmptyValueTag)));
</span><span class="cx">         }
</span><span class="cx">             
</span><span class="cx">         m_jit.add32(TrustedImm32(1), indexGPR, resultPayloadGPR);
</span><span class="cx">             
</span><del>-        if (node-&gt;codeOrigin.inlineCallFrame) {
</del><ins>+        if (node-&gt;origin.semantic.inlineCallFrame) {
</ins><span class="cx">             speculationCheck(
</span><span class="cx">                 Uncountable, JSValueRegs(), 0,
</span><span class="cx">                 m_jit.branch32(
</span><span class="cx">                     JITCompiler::AboveOrEqual,
</span><span class="cx">                     resultPayloadGPR,
</span><del>-                    Imm32(node-&gt;codeOrigin.inlineCallFrame-&gt;arguments.size())));
</del><ins>+                    Imm32(node-&gt;origin.semantic.inlineCallFrame-&gt;arguments.size())));
</ins><span class="cx">         } else {
</span><span class="cx">             speculationCheck(
</span><span class="cx">                 Uncountable, JSValueRegs(), 0,
</span><span class="lines">@@ -4456,13 +4456,13 @@
</span><span class="cx">         
</span><span class="cx">         JITCompiler::JumpList slowArgument;
</span><span class="cx">         JITCompiler::JumpList slowArgumentOutOfBounds;
</span><del>-        if (m_jit.symbolTableFor(node-&gt;codeOrigin)-&gt;slowArguments()) {
-            RELEASE_ASSERT(!node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+        if (m_jit.symbolTableFor(node-&gt;origin.semantic)-&gt;slowArguments()) {
+            RELEASE_ASSERT(!node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">             const SlowArgument* slowArguments = m_jit.graph().m_slowArguments.get();
</span><span class="cx">             slowArgumentOutOfBounds.append(
</span><span class="cx">                 m_jit.branch32(
</span><span class="cx">                     JITCompiler::AboveOrEqual, indexGPR,
</span><del>-                    Imm32(m_jit.symbolTableFor(node-&gt;codeOrigin)-&gt;parameterCount())));
</del><ins>+                    Imm32(m_jit.symbolTableFor(node-&gt;origin.semantic)-&gt;parameterCount())));
</ins><span class="cx"> 
</span><span class="cx">             COMPILE_ASSERT(sizeof(SlowArgument) == 8, SlowArgument_size_is_eight_bytes);
</span><span class="cx">             m_jit.move(ImmPtr(slowArguments), resultPayloadGPR);
</span><span class="lines">@@ -4489,12 +4489,12 @@
</span><span class="cx">         m_jit.load32(
</span><span class="cx">             JITCompiler::BaseIndex(
</span><span class="cx">                 GPRInfo::callFrameRegister, resultPayloadGPR, JITCompiler::TimesEight,
</span><del>-                m_jit.offsetOfArgumentsIncludingThis(node-&gt;codeOrigin) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag)),
</del><ins>+                m_jit.offsetOfArgumentsIncludingThis(node-&gt;origin.semantic) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag)),
</ins><span class="cx">             resultTagGPR);
</span><span class="cx">         m_jit.load32(
</span><span class="cx">             JITCompiler::BaseIndex(
</span><span class="cx">                 GPRInfo::callFrameRegister, resultPayloadGPR, JITCompiler::TimesEight,
</span><del>-                m_jit.offsetOfArgumentsIncludingThis(node-&gt;codeOrigin) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload)),
</del><ins>+                m_jit.offsetOfArgumentsIncludingThis(node-&gt;origin.semantic) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload)),
</ins><span class="cx">             resultPayloadGPR);
</span><span class="cx">             
</span><span class="cx">         slowArgument.link(&amp;m_jit);
</span><span class="lines">@@ -4513,16 +4513,16 @@
</span><span class="cx">         slowPath.append(
</span><span class="cx">             m_jit.branch32(
</span><span class="cx">                 JITCompiler::NotEqual,
</span><del>-                JITCompiler::tagFor(m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin)),
</del><ins>+                JITCompiler::tagFor(m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic)),
</ins><span class="cx">                 TrustedImm32(JSValue::EmptyValueTag)));
</span><span class="cx">         
</span><span class="cx">         m_jit.add32(TrustedImm32(1), indexGPR, resultPayloadGPR);
</span><del>-        if (node-&gt;codeOrigin.inlineCallFrame) {
</del><ins>+        if (node-&gt;origin.semantic.inlineCallFrame) {
</ins><span class="cx">             slowPath.append(
</span><span class="cx">                 m_jit.branch32(
</span><span class="cx">                     JITCompiler::AboveOrEqual,
</span><span class="cx">                     resultPayloadGPR,
</span><del>-                    Imm32(node-&gt;codeOrigin.inlineCallFrame-&gt;arguments.size())));
</del><ins>+                    Imm32(node-&gt;origin.semantic.inlineCallFrame-&gt;arguments.size())));
</ins><span class="cx">         } else {
</span><span class="cx">             slowPath.append(
</span><span class="cx">                 m_jit.branch32(
</span><span class="lines">@@ -4533,13 +4533,13 @@
</span><span class="cx">         
</span><span class="cx">         JITCompiler::JumpList slowArgument;
</span><span class="cx">         JITCompiler::JumpList slowArgumentOutOfBounds;
</span><del>-        if (m_jit.symbolTableFor(node-&gt;codeOrigin)-&gt;slowArguments()) {
-            RELEASE_ASSERT(!node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+        if (m_jit.symbolTableFor(node-&gt;origin.semantic)-&gt;slowArguments()) {
+            RELEASE_ASSERT(!node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">             const SlowArgument* slowArguments = m_jit.graph().m_slowArguments.get();
</span><span class="cx">             slowArgumentOutOfBounds.append(
</span><span class="cx">                 m_jit.branch32(
</span><span class="cx">                     JITCompiler::AboveOrEqual, indexGPR,
</span><del>-                    Imm32(m_jit.symbolTableFor(node-&gt;codeOrigin)-&gt;parameterCount())));
</del><ins>+                    Imm32(m_jit.symbolTableFor(node-&gt;origin.semantic)-&gt;parameterCount())));
</ins><span class="cx"> 
</span><span class="cx">             COMPILE_ASSERT(sizeof(SlowArgument) == 8, SlowArgument_size_is_eight_bytes);
</span><span class="cx">             m_jit.move(ImmPtr(slowArguments), resultPayloadGPR);
</span><span class="lines">@@ -4565,27 +4565,27 @@
</span><span class="cx">         m_jit.load32(
</span><span class="cx">             JITCompiler::BaseIndex(
</span><span class="cx">                 GPRInfo::callFrameRegister, resultPayloadGPR, JITCompiler::TimesEight,
</span><del>-                m_jit.offsetOfArgumentsIncludingThis(node-&gt;codeOrigin) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag)),
</del><ins>+                m_jit.offsetOfArgumentsIncludingThis(node-&gt;origin.semantic) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag)),
</ins><span class="cx">             resultTagGPR);
</span><span class="cx">         m_jit.load32(
</span><span class="cx">             JITCompiler::BaseIndex(
</span><span class="cx">                 GPRInfo::callFrameRegister, resultPayloadGPR, JITCompiler::TimesEight,
</span><del>-                m_jit.offsetOfArgumentsIncludingThis(node-&gt;codeOrigin) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload)),
</del><ins>+                m_jit.offsetOfArgumentsIncludingThis(node-&gt;origin.semantic) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload)),
</ins><span class="cx">             resultPayloadGPR);
</span><span class="cx">         
</span><del>-        if (node-&gt;codeOrigin.inlineCallFrame) {
</del><ins>+        if (node-&gt;origin.semantic.inlineCallFrame) {
</ins><span class="cx">             addSlowPathGenerator(
</span><span class="cx">                 slowPathCall(
</span><span class="cx">                     slowPath, this, operationGetInlinedArgumentByVal,
</span><span class="cx">                     JSValueRegs(resultTagGPR, resultPayloadGPR),
</span><del>-                    m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin).offset(),
-                    node-&gt;codeOrigin.inlineCallFrame, indexGPR));
</del><ins>+                    m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic).offset(),
+                    node-&gt;origin.semantic.inlineCallFrame, indexGPR));
</ins><span class="cx">         } else {
</span><span class="cx">             addSlowPathGenerator(
</span><span class="cx">                 slowPathCall(
</span><span class="cx">                     slowPath, this, operationGetArgumentByVal,
</span><span class="cx">                     JSValueRegs(resultTagGPR, resultPayloadGPR),
</span><del>-                    m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin).offset(),
</del><ins>+                    m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic).offset(),
</ins><span class="cx">                     indexGPR));
</span><span class="cx">         }
</span><span class="cx">         
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJIT64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -261,7 +261,7 @@
</span><span class="cx">         isMasqueradesAsUndefined.link(&amp;m_jit);
</span><span class="cx">         GPRReg localGlobalObjectGPR = localGlobalObject.gpr();
</span><span class="cx">         GPRReg remoteGlobalObjectGPR = remoteGlobalObject.gpr();
</span><del>-        m_jit.move(JITCompiler::TrustedImmPtr(m_jit.graph().globalObjectFor(operand-&gt;codeOrigin)), localGlobalObjectGPR);
</del><ins>+        m_jit.move(JITCompiler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode-&gt;origin.semantic)), localGlobalObjectGPR);
</ins><span class="cx">         m_jit.loadPtr(JITCompiler::Address(resultGPR, Structure::globalObjectOffset()), remoteGlobalObjectGPR);
</span><span class="cx">         m_jit.comparePtr(invert ? JITCompiler::NotEqual : JITCompiler::Equal, localGlobalObjectGPR, remoteGlobalObjectGPR, resultGPR);
</span><span class="cx">     }
</span><span class="lines">@@ -321,7 +321,7 @@
</span><span class="cx"> 
</span><span class="cx">         GPRReg localGlobalObjectGPR = localGlobalObject.gpr();
</span><span class="cx">         GPRReg remoteGlobalObjectGPR = remoteGlobalObject.gpr();
</span><del>-        m_jit.move(TrustedImmPtr(m_jit.graph().globalObjectFor(operand-&gt;codeOrigin)), localGlobalObjectGPR);
</del><ins>+        m_jit.move(TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode-&gt;origin.semantic)), localGlobalObjectGPR);
</ins><span class="cx">         m_jit.loadPtr(JITCompiler::Address(resultGPR, Structure::globalObjectOffset()), remoteGlobalObjectGPR);
</span><span class="cx">         branchPtr(JITCompiler::Equal, localGlobalObjectGPR, remoteGlobalObjectGPR, invert ? notTaken : taken);
</span><span class="cx">     }
</span><span class="lines">@@ -683,7 +683,7 @@
</span><span class="cx">     JITCompiler::DataLabelPtr targetToCheck;
</span><span class="cx">     JITCompiler::Jump slowPath;
</span><span class="cx"> 
</span><del>-    m_jit.emitStoreCodeOrigin(node-&gt;codeOrigin);
</del><ins>+    m_jit.emitStoreCodeOrigin(node-&gt;origin.semantic);
</ins><span class="cx">     
</span><span class="cx">     slowPath = m_jit.branchPtrWithPatch(MacroAssembler::NotEqual, calleeGPR, targetToCheck, MacroAssembler::TrustedImmPtr(0));
</span><span class="cx"> 
</span><span class="lines">@@ -712,7 +712,7 @@
</span><span class="cx">     
</span><span class="cx">     jsValueResult(resultGPR, m_currentNode, DataFormatJS, UseChildrenCalledExplicitly);
</span><span class="cx">     
</span><del>-    m_jit.addJSCall(fastCall, slowCall, targetToCheck, callType, calleeGPR, m_currentNode-&gt;codeOrigin);
</del><ins>+    m_jit.addJSCall(fastCall, slowCall, targetToCheck, callType, calleeGPR, m_currentNode-&gt;origin.semantic);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // Clang should allow unreachable [[clang::fallthrough]] in template functions if any template expansion uses it
</span><span class="lines">@@ -1872,7 +1872,7 @@
</span><span class="cx">             m_jit.branchPtr(
</span><span class="cx">                 MacroAssembler::Equal, 
</span><span class="cx">                 MacroAssembler::Address(structureGPR, Structure::globalObjectOffset()), 
</span><del>-                MacroAssembler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode-&gt;codeOrigin))));
</del><ins>+                MacroAssembler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode-&gt;origin.semantic))));
</ins><span class="cx"> 
</span><span class="cx">         isNotMasqueradesAsUndefined.link(&amp;m_jit);
</span><span class="cx">     }
</span><span class="lines">@@ -2011,7 +2011,7 @@
</span><span class="cx">             m_jit.branchPtr(
</span><span class="cx">                 MacroAssembler::Equal, 
</span><span class="cx">                 MacroAssembler::Address(scratchGPR, Structure::globalObjectOffset()), 
</span><del>-                MacroAssembler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode-&gt;codeOrigin))));
</del><ins>+                MacroAssembler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode-&gt;origin.semantic))));
</ins><span class="cx"> 
</span><span class="cx">         isNotMasqueradesAsUndefined.link(&amp;m_jit);
</span><span class="cx">     }
</span><span class="lines">@@ -2879,9 +2879,9 @@
</span><span class="cx">             GPRReg arg3GPR = arg3.gpr();
</span><span class="cx">             flushRegisters();
</span><span class="cx">             if (node-&gt;op() == PutByValDirect)
</span><del>-                callOperation(m_jit.isStrictModeFor(node-&gt;codeOrigin) ? operationPutByValDirectStrict : operationPutByValDirectNonStrict, arg1GPR, arg2GPR, arg3GPR);
</del><ins>+                callOperation(m_jit.isStrictModeFor(node-&gt;origin.semantic) ? operationPutByValDirectStrict : operationPutByValDirectNonStrict, arg1GPR, arg2GPR, arg3GPR);
</ins><span class="cx">             else
</span><del>-                callOperation(m_jit.isStrictModeFor(node-&gt;codeOrigin) ? operationPutByValStrict : operationPutByValNonStrict, arg1GPR, arg2GPR, arg3GPR);
</del><ins>+                callOperation(m_jit.isStrictModeFor(node-&gt;origin.semantic) ? operationPutByValStrict : operationPutByValNonStrict, arg1GPR, arg2GPR, arg3GPR);
</ins><span class="cx">             
</span><span class="cx">             noResult(node);
</span><span class="cx">             alreadyHandled = true;
</span><span class="lines">@@ -3474,7 +3474,7 @@
</span><span class="cx">     }
</span><span class="cx">         
</span><span class="cx">     case NewArray: {
</span><del>-        JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;codeOrigin);
</del><ins>+        JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;origin.semantic);
</ins><span class="cx">         if (!globalObject-&gt;isHavingABadTime() &amp;&amp; !hasArrayStorage(node-&gt;indexingType())) {
</span><span class="cx">             Structure* structure = globalObject-&gt;arrayStructureForIndexingTypeDuringAllocation(node-&gt;indexingType());
</span><span class="cx">             RELEASE_ASSERT(structure-&gt;indexingType() == node-&gt;indexingType());
</span><span class="lines">@@ -3645,7 +3645,7 @@
</span><span class="cx">     }
</span><span class="cx">         
</span><span class="cx">     case NewArrayWithSize: {
</span><del>-        JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;codeOrigin);
</del><ins>+        JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;origin.semantic);
</ins><span class="cx">         if (!globalObject-&gt;isHavingABadTime() &amp;&amp; !hasArrayStorage(node-&gt;indexingType())) {
</span><span class="cx">             SpeculateStrictInt32Operand size(this, node-&gt;child1());
</span><span class="cx">             GPRTemporary result(this);
</span><span class="lines">@@ -3715,7 +3715,7 @@
</span><span class="cx">     }
</span><span class="cx">         
</span><span class="cx">     case NewArrayBuffer: {
</span><del>-        JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;codeOrigin);
</del><ins>+        JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;origin.semantic);
</ins><span class="cx">         IndexingType indexingType = node-&gt;indexingType();
</span><span class="cx">         if (!globalObject-&gt;isHavingABadTime() &amp;&amp; !hasArrayStorage(indexingType)) {
</span><span class="cx">             unsigned numElements = node-&gt;numConstants();
</span><span class="lines">@@ -3772,7 +3772,7 @@
</span><span class="cx">             GPRResult result(this);
</span><span class="cx">             GPRReg resultGPR = result.gpr();
</span><span class="cx">             
</span><del>-            JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;codeOrigin);
</del><ins>+            JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;origin.semantic);
</ins><span class="cx">             callOperation(
</span><span class="cx">                 operationNewTypedArrayWithOneArgumentForType(node-&gt;typedArrayType()),
</span><span class="cx">                 resultGPR, globalObject-&gt;typedArrayStructure(node-&gt;typedArrayType()),
</span><span class="lines">@@ -3816,7 +3816,7 @@
</span><span class="cx">             TrustedImm32(FinalObjectType)));
</span><span class="cx">         m_jit.move(thisValueGPR, tempGPR);
</span><span class="cx">         J_JITOperation_EJ function;
</span><del>-        if (m_jit.graph().executableFor(node-&gt;codeOrigin)-&gt;isStrictMode())
</del><ins>+        if (m_jit.graph().executableFor(node-&gt;origin.semantic)-&gt;isStrictMode())
</ins><span class="cx">             function = operationToThisStrict;
</span><span class="cx">         else
</span><span class="cx">             function = operationToThis;
</span><span class="lines">@@ -3991,7 +3991,7 @@
</span><span class="cx">             
</span><span class="cx">             base.use();
</span><span class="cx">             
</span><del>-            cachedGetById(node-&gt;codeOrigin, baseGPR, resultGPR, node-&gt;identifierNumber());
</del><ins>+            cachedGetById(node-&gt;origin.semantic, baseGPR, resultGPR, node-&gt;identifierNumber());
</ins><span class="cx">             
</span><span class="cx">             jsValueResult(resultGPR, node, UseChildrenCalledExplicitly);
</span><span class="cx">             break;
</span><span class="lines">@@ -4008,7 +4008,7 @@
</span><span class="cx">         
</span><span class="cx">             JITCompiler::Jump notCell = m_jit.branchTest64(JITCompiler::NonZero, baseGPR, GPRInfo::tagMaskRegister);
</span><span class="cx">         
</span><del>-            cachedGetById(node-&gt;codeOrigin, baseGPR, resultGPR, node-&gt;identifierNumber(), notCell);
</del><ins>+            cachedGetById(node-&gt;origin.semantic, baseGPR, resultGPR, node-&gt;identifierNumber(), notCell);
</ins><span class="cx">         
</span><span class="cx">             jsValueResult(resultGPR, node, UseChildrenCalledExplicitly);
</span><span class="cx">             break;
</span><span class="lines">@@ -4040,7 +4040,7 @@
</span><span class="cx">             
</span><span class="cx">             flushRegisters();
</span><span class="cx">             
</span><del>-            cachedGetById(node-&gt;codeOrigin, baseGPR, resultGPR, node-&gt;identifierNumber(), JITCompiler::Jump(), DontSpill);
</del><ins>+            cachedGetById(node-&gt;origin.semantic, baseGPR, resultGPR, node-&gt;identifierNumber(), JITCompiler::Jump(), DontSpill);
</ins><span class="cx">             
</span><span class="cx">             jsValueResult(resultGPR, node, UseChildrenCalledExplicitly);
</span><span class="cx">             break;
</span><span class="lines">@@ -4058,7 +4058,7 @@
</span><span class="cx">         
</span><span class="cx">             JITCompiler::Jump notCell = m_jit.branchTest64(JITCompiler::NonZero, baseGPR, GPRInfo::tagMaskRegister);
</span><span class="cx">         
</span><del>-            cachedGetById(node-&gt;codeOrigin, baseGPR, resultGPR, node-&gt;identifierNumber(), notCell, DontSpill);
</del><ins>+            cachedGetById(node-&gt;origin.semantic, baseGPR, resultGPR, node-&gt;identifierNumber(), notCell, DontSpill);
</ins><span class="cx">         
</span><span class="cx">             jsValueResult(resultGPR, node, UseChildrenCalledExplicitly);
</span><span class="cx">             break;
</span><span class="lines">@@ -4252,7 +4252,7 @@
</span><span class="cx">         GPRReg valueGPR = value.gpr();
</span><span class="cx">         GPRReg scratchGPR = scratch.gpr();
</span><span class="cx">         
</span><del>-        cachedPutById(node-&gt;codeOrigin, baseGPR, valueGPR, scratchGPR, node-&gt;identifierNumber(), NotDirect);
</del><ins>+        cachedPutById(node-&gt;origin.semantic, baseGPR, valueGPR, scratchGPR, node-&gt;identifierNumber(), NotDirect);
</ins><span class="cx"> 
</span><span class="cx">         noResult(node);
</span><span class="cx">         break;
</span><span class="lines">@@ -4267,7 +4267,7 @@
</span><span class="cx">         GPRReg valueGPR = value.gpr();
</span><span class="cx">         GPRReg scratchGPR = scratch.gpr();
</span><span class="cx">         
</span><del>-        cachedPutById(node-&gt;codeOrigin, baseGPR, valueGPR, scratchGPR, node-&gt;identifierNumber(), Direct);
</del><ins>+        cachedPutById(node-&gt;origin.semantic, baseGPR, valueGPR, scratchGPR, node-&gt;identifierNumber(), Direct);
</ins><span class="cx"> 
</span><span class="cx">         noResult(node);
</span><span class="cx">         break;
</span><span class="lines">@@ -4384,7 +4384,7 @@
</span><span class="cx">             isMasqueradesAsUndefined.link(&amp;m_jit);
</span><span class="cx">             GPRReg localGlobalObjectGPR = localGlobalObject.gpr();
</span><span class="cx">             GPRReg remoteGlobalObjectGPR = remoteGlobalObject.gpr();
</span><del>-            m_jit.move(TrustedImmPtr(m_jit.globalObjectFor(node-&gt;codeOrigin)), localGlobalObjectGPR);
</del><ins>+            m_jit.move(TrustedImmPtr(m_jit.globalObjectFor(node-&gt;origin.semantic)), localGlobalObjectGPR);
</ins><span class="cx">             m_jit.loadPtr(JITCompiler::Address(result.gpr(), Structure::globalObjectOffset()), remoteGlobalObjectGPR); 
</span><span class="cx">             m_jit.comparePtr(JITCompiler::Equal, localGlobalObjectGPR, remoteGlobalObjectGPR, result.gpr());
</span><span class="cx">         }
</span><span class="lines">@@ -4529,7 +4529,7 @@
</span><span class="cx">         break;
</span><span class="cx"> 
</span><span class="cx">     case CreateActivation: {
</span><del>-        RELEASE_ASSERT(!node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+        RELEASE_ASSERT(!node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">         
</span><span class="cx">         JSValueOperand value(this, node-&gt;child1());
</span><span class="cx">         GPRTemporary result(this, Reuse, value);
</span><span class="lines">@@ -4566,11 +4566,11 @@
</span><span class="cx">         
</span><span class="cx">         JITCompiler::Jump notCreated = m_jit.branchTest64(JITCompiler::Zero, resultGPR);
</span><span class="cx">         
</span><del>-        if (node-&gt;codeOrigin.inlineCallFrame) {
</del><ins>+        if (node-&gt;origin.semantic.inlineCallFrame) {
</ins><span class="cx">             addSlowPathGenerator(
</span><span class="cx">                 slowPathCall(
</span><span class="cx">                     notCreated, this, operationCreateInlinedArguments, resultGPR,
</span><del>-                    node-&gt;codeOrigin.inlineCallFrame));
</del><ins>+                    node-&gt;origin.semantic.inlineCallFrame));
</ins><span class="cx">         } else {
</span><span class="cx">             addSlowPathGenerator(
</span><span class="cx">                 slowPathCall(notCreated, this, operationCreateArguments, resultGPR));
</span><span class="lines">@@ -4581,7 +4581,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     case TearOffActivation: {
</span><del>-        RELEASE_ASSERT(!node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+        RELEASE_ASSERT(!node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx"> 
</span><span class="cx">         JSValueOperand activationValue(this, node-&gt;child1());
</span><span class="cx">         GPRTemporary scratch(this);
</span><span class="lines">@@ -4590,7 +4590,7 @@
</span><span class="cx"> 
</span><span class="cx">         JITCompiler::Jump notCreated = m_jit.branchTest64(JITCompiler::Zero, activationValueGPR);
</span><span class="cx"> 
</span><del>-        SymbolTable* symbolTable = m_jit.symbolTableFor(node-&gt;codeOrigin);
</del><ins>+        SymbolTable* symbolTable = m_jit.symbolTableFor(node-&gt;origin.semantic);
</ins><span class="cx">         int registersOffset = JSActivation::registersOffset(symbolTable);
</span><span class="cx"> 
</span><span class="cx">         int bytecodeCaptureStart = symbolTable-&gt;captureStart();
</span><span class="lines">@@ -4623,11 +4623,11 @@
</span><span class="cx"> 
</span><span class="cx">         JITCompiler::Jump created = m_jit.branchTest64(JITCompiler::NonZero, unmodifiedArgumentsValueGPR);
</span><span class="cx"> 
</span><del>-        if (node-&gt;codeOrigin.inlineCallFrame) {
</del><ins>+        if (node-&gt;origin.semantic.inlineCallFrame) {
</ins><span class="cx">             addSlowPathGenerator(
</span><span class="cx">                 slowPathCall(
</span><span class="cx">                     created, this, operationTearOffInlinedArguments, NoResult,
</span><del>-                    unmodifiedArgumentsValueGPR, activationValueGPR, node-&gt;codeOrigin.inlineCallFrame));
</del><ins>+                    unmodifiedArgumentsValueGPR, activationValueGPR, node-&gt;origin.semantic.inlineCallFrame));
</ins><span class="cx">         } else {
</span><span class="cx">             addSlowPathGenerator(
</span><span class="cx">                 slowPathCall(
</span><span class="lines">@@ -4644,16 +4644,16 @@
</span><span class="cx">         
</span><span class="cx">         if (!isEmptySpeculation(
</span><span class="cx">                 m_state.variables().operand(
</span><del>-                    m_jit.graph().argumentsRegisterFor(node-&gt;codeOrigin)).m_type)) {
</del><ins>+                    m_jit.graph().argumentsRegisterFor(node-&gt;origin.semantic)).m_type)) {
</ins><span class="cx">             speculationCheck(
</span><span class="cx">                 ArgumentsEscaped, JSValueRegs(), 0,
</span><span class="cx">                 m_jit.branchTest64(
</span><span class="cx">                     JITCompiler::NonZero,
</span><span class="cx">                     JITCompiler::addressFor(
</span><del>-                        m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin))));
</del><ins>+                        m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic))));
</ins><span class="cx">         }
</span><span class="cx">         
</span><del>-        RELEASE_ASSERT(!node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+        RELEASE_ASSERT(!node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">         m_jit.load32(JITCompiler::payloadFor(JSStack::ArgumentCount), resultGPR);
</span><span class="cx">         m_jit.sub32(TrustedImm32(1), resultGPR);
</span><span class="cx">         int32Result(resultGPR, node);
</span><span class="lines">@@ -4667,11 +4667,11 @@
</span><span class="cx">         JITCompiler::Jump created = m_jit.branchTest64(
</span><span class="cx">             JITCompiler::NonZero,
</span><span class="cx">             JITCompiler::addressFor(
</span><del>-                m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin)));
</del><ins>+                m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic)));
</ins><span class="cx">         
</span><del>-        if (node-&gt;codeOrigin.inlineCallFrame) {
</del><ins>+        if (node-&gt;origin.semantic.inlineCallFrame) {
</ins><span class="cx">             m_jit.move(
</span><del>-                Imm64(JSValue::encode(jsNumber(node-&gt;codeOrigin.inlineCallFrame-&gt;arguments.size() - 1))),
</del><ins>+                Imm64(JSValue::encode(jsNumber(node-&gt;origin.semantic.inlineCallFrame-&gt;arguments.size() - 1))),
</ins><span class="cx">                 resultGPR);
</span><span class="cx">         } else {
</span><span class="cx">             m_jit.load32(JITCompiler::payloadFor(JSStack::ArgumentCount), resultGPR);
</span><span class="lines">@@ -4686,7 +4686,7 @@
</span><span class="cx">         addSlowPathGenerator(
</span><span class="cx">             slowPathCall(
</span><span class="cx">                 created, this, operationGetArgumentsLength, resultGPR,
</span><del>-                m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin).offset()));
</del><ins>+                m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic).offset()));
</ins><span class="cx">         
</span><span class="cx">         jsValueResult(resultGPR, node);
</span><span class="cx">         break;
</span><span class="lines">@@ -4700,23 +4700,23 @@
</span><span class="cx"> 
</span><span class="cx">         if (!isEmptySpeculation(
</span><span class="cx">                 m_state.variables().operand(
</span><del>-                    m_jit.graph().argumentsRegisterFor(node-&gt;codeOrigin)).m_type)) {
</del><ins>+                    m_jit.graph().argumentsRegisterFor(node-&gt;origin.semantic)).m_type)) {
</ins><span class="cx">             speculationCheck(
</span><span class="cx">                 ArgumentsEscaped, JSValueRegs(), 0,
</span><span class="cx">                 m_jit.branchTest64(
</span><span class="cx">                     JITCompiler::NonZero,
</span><span class="cx">                     JITCompiler::addressFor(
</span><del>-                        m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin))));
</del><ins>+                        m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic))));
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         m_jit.add32(TrustedImm32(1), indexGPR, resultGPR);
</span><del>-        if (node-&gt;codeOrigin.inlineCallFrame) {
</del><ins>+        if (node-&gt;origin.semantic.inlineCallFrame) {
</ins><span class="cx">             speculationCheck(
</span><span class="cx">                 Uncountable, JSValueRegs(), 0,
</span><span class="cx">                 m_jit.branch32(
</span><span class="cx">                     JITCompiler::AboveOrEqual,
</span><span class="cx">                     resultGPR,
</span><del>-                    Imm32(node-&gt;codeOrigin.inlineCallFrame-&gt;arguments.size())));
</del><ins>+                    Imm32(node-&gt;origin.semantic.inlineCallFrame-&gt;arguments.size())));
</ins><span class="cx">         } else {
</span><span class="cx">             speculationCheck(
</span><span class="cx">                 Uncountable, JSValueRegs(), 0,
</span><span class="lines">@@ -4728,14 +4728,14 @@
</span><span class="cx"> 
</span><span class="cx">         JITCompiler::JumpList slowArgument;
</span><span class="cx">         JITCompiler::JumpList slowArgumentOutOfBounds;
</span><del>-        if (m_jit.symbolTableFor(node-&gt;codeOrigin)-&gt;slowArguments()) {
-            RELEASE_ASSERT(!node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+        if (m_jit.symbolTableFor(node-&gt;origin.semantic)-&gt;slowArguments()) {
+            RELEASE_ASSERT(!node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">             const SlowArgument* slowArguments = m_jit.graph().m_slowArguments.get();
</span><span class="cx">             
</span><span class="cx">             slowArgumentOutOfBounds.append(
</span><span class="cx">                 m_jit.branch32(
</span><span class="cx">                     JITCompiler::AboveOrEqual, indexGPR,
</span><del>-                    Imm32(m_jit.symbolTableFor(node-&gt;codeOrigin)-&gt;parameterCount())));
</del><ins>+                    Imm32(m_jit.symbolTableFor(node-&gt;origin.semantic)-&gt;parameterCount())));
</ins><span class="cx"> 
</span><span class="cx">             COMPILE_ASSERT(sizeof(SlowArgument) == 8, SlowArgument_size_is_eight_bytes);
</span><span class="cx">             m_jit.move(ImmPtr(slowArguments), resultGPR);
</span><span class="lines">@@ -4757,7 +4757,7 @@
</span><span class="cx">             
</span><span class="cx">         m_jit.load64(
</span><span class="cx">             JITCompiler::BaseIndex(
</span><del>-                GPRInfo::callFrameRegister, resultGPR, JITCompiler::TimesEight, m_jit.offsetOfArgumentsIncludingThis(node-&gt;codeOrigin)),
</del><ins>+                GPRInfo::callFrameRegister, resultGPR, JITCompiler::TimesEight, m_jit.offsetOfArgumentsIncludingThis(node-&gt;origin.semantic)),
</ins><span class="cx">             resultGPR);
</span><span class="cx"> 
</span><span class="cx">         slowArgument.link(&amp;m_jit);
</span><span class="lines">@@ -4776,15 +4776,15 @@
</span><span class="cx">             m_jit.branchTest64(
</span><span class="cx">                 JITCompiler::NonZero,
</span><span class="cx">                 JITCompiler::addressFor(
</span><del>-                    m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin))));
</del><ins>+                    m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic))));
</ins><span class="cx">         
</span><span class="cx">         m_jit.add32(TrustedImm32(1), indexGPR, resultGPR);
</span><del>-        if (node-&gt;codeOrigin.inlineCallFrame) {
</del><ins>+        if (node-&gt;origin.semantic.inlineCallFrame) {
</ins><span class="cx">             slowPath.append(
</span><span class="cx">                 m_jit.branch32(
</span><span class="cx">                     JITCompiler::AboveOrEqual,
</span><span class="cx">                     resultGPR,
</span><del>-                    Imm32(node-&gt;codeOrigin.inlineCallFrame-&gt;arguments.size())));
</del><ins>+                    Imm32(node-&gt;origin.semantic.inlineCallFrame-&gt;arguments.size())));
</ins><span class="cx">         } else {
</span><span class="cx">             slowPath.append(
</span><span class="cx">                 m_jit.branch32(
</span><span class="lines">@@ -4795,14 +4795,14 @@
</span><span class="cx">         
</span><span class="cx">         JITCompiler::JumpList slowArgument;
</span><span class="cx">         JITCompiler::JumpList slowArgumentOutOfBounds;
</span><del>-        if (m_jit.symbolTableFor(node-&gt;codeOrigin)-&gt;slowArguments()) {
-            RELEASE_ASSERT(!node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+        if (m_jit.symbolTableFor(node-&gt;origin.semantic)-&gt;slowArguments()) {
+            RELEASE_ASSERT(!node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">             const SlowArgument* slowArguments = m_jit.graph().m_slowArguments.get();
</span><span class="cx"> 
</span><span class="cx">             slowArgumentOutOfBounds.append(
</span><span class="cx">                 m_jit.branch32(
</span><span class="cx">                     JITCompiler::AboveOrEqual, indexGPR,
</span><del>-                    Imm32(m_jit.symbolTableFor(node-&gt;codeOrigin)-&gt;parameterCount())));
</del><ins>+                    Imm32(m_jit.symbolTableFor(node-&gt;origin.semantic)-&gt;parameterCount())));
</ins><span class="cx"> 
</span><span class="cx">             COMPILE_ASSERT(sizeof(SlowArgument) == 8, SlowArgument_size_is_eight_bytes);
</span><span class="cx">             m_jit.move(ImmPtr(slowArguments), resultGPR);
</span><span class="lines">@@ -4824,21 +4824,21 @@
</span><span class="cx">         
</span><span class="cx">         m_jit.load64(
</span><span class="cx">             JITCompiler::BaseIndex(
</span><del>-                GPRInfo::callFrameRegister, resultGPR, JITCompiler::TimesEight, m_jit.offsetOfArgumentsIncludingThis(node-&gt;codeOrigin)),
</del><ins>+                GPRInfo::callFrameRegister, resultGPR, JITCompiler::TimesEight, m_jit.offsetOfArgumentsIncludingThis(node-&gt;origin.semantic)),
</ins><span class="cx">             resultGPR);
</span><span class="cx">         
</span><del>-        if (node-&gt;codeOrigin.inlineCallFrame) {
</del><ins>+        if (node-&gt;origin.semantic.inlineCallFrame) {
</ins><span class="cx">             addSlowPathGenerator(
</span><span class="cx">                 slowPathCall(
</span><span class="cx">                     slowPath, this, operationGetInlinedArgumentByVal, resultGPR, 
</span><del>-                    m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin).offset(),
-                    node-&gt;codeOrigin.inlineCallFrame,
</del><ins>+                    m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic).offset(),
+                    node-&gt;origin.semantic.inlineCallFrame,
</ins><span class="cx">                     indexGPR));
</span><span class="cx">         } else {
</span><span class="cx">             addSlowPathGenerator(
</span><span class="cx">                 slowPathCall(
</span><span class="cx">                     slowPath, this, operationGetArgumentByVal, resultGPR, 
</span><del>-                    m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin).offset(),
</del><ins>+                    m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic).offset(),
</ins><span class="cx">                     indexGPR));
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="lines">@@ -4850,13 +4850,13 @@
</span><span class="cx">     case CheckArgumentsNotCreated: {
</span><span class="cx">         ASSERT(!isEmptySpeculation(
</span><span class="cx">             m_state.variables().operand(
</span><del>-                m_jit.graph().argumentsRegisterFor(node-&gt;codeOrigin)).m_type));
</del><ins>+                m_jit.graph().argumentsRegisterFor(node-&gt;origin.semantic)).m_type));
</ins><span class="cx">         speculationCheck(
</span><span class="cx">             ArgumentsEscaped, JSValueRegs(), 0,
</span><span class="cx">             m_jit.branchTest64(
</span><span class="cx">                 JITCompiler::NonZero,
</span><span class="cx">                 JITCompiler::addressFor(
</span><del>-                    m_jit.graph().machineArgumentsRegisterFor(node-&gt;codeOrigin))));
</del><ins>+                    m_jit.graph().machineArgumentsRegisterFor(node-&gt;origin.semantic))));
</ins><span class="cx">         noResult(node);
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="lines">@@ -4971,7 +4971,7 @@
</span><span class="cx">     }
</span><span class="cx">         
</span><span class="cx">     case CheckTierUpAndOSREnter: {
</span><del>-        ASSERT(!node-&gt;codeOrigin.inlineCallFrame);
</del><ins>+        ASSERT(!node-&gt;origin.semantic.inlineCallFrame);
</ins><span class="cx">         
</span><span class="cx">         GPRTemporary temp(this);
</span><span class="cx">         GPRReg tempGPR = temp.gpr();
</span><span class="lines">@@ -4983,7 +4983,7 @@
</span><span class="cx">         
</span><span class="cx">         silentSpillAllRegisters(tempGPR);
</span><span class="cx">         m_jit.setupArgumentsWithExecState(
</span><del>-            TrustedImm32(node-&gt;codeOrigin.bytecodeIndex),
</del><ins>+            TrustedImm32(node-&gt;origin.semantic.bytecodeIndex),
</ins><span class="cx">             TrustedImm32(m_stream-&gt;size()));
</span><span class="cx">         appendCallSetResult(triggerOSREntryNow, tempGPR);
</span><span class="cx">         MacroAssembler::Jump dontEnter = m_jit.branchTestPtr(MacroAssembler::Zero, tempGPR);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGStrengthReductionPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -147,7 +147,7 @@
</span><span class="cx">     void convertToIdentityOverChild(unsigned childIndex)
</span><span class="cx">     {
</span><span class="cx">         m_insertionSet.insertNode(
</span><del>-            m_nodeIndex, SpecNone, Phantom, m_node-&gt;codeOrigin, m_node-&gt;children);
</del><ins>+            m_nodeIndex, SpecNone, Phantom, m_node-&gt;origin, m_node-&gt;children);
</ins><span class="cx">         m_node-&gt;children.removeEdge(childIndex ^ 1);
</span><span class="cx">         m_node-&gt;convertToIdentity();
</span><span class="cx">         m_changed = true;
</span><span class="lines">@@ -173,10 +173,10 @@
</span><span class="cx">     void prepareToFoldTypedArray(JSArrayBufferView* view)
</span><span class="cx">     {
</span><span class="cx">         m_insertionSet.insertNode(
</span><del>-            m_nodeIndex, SpecNone, TypedArrayWatchpoint, m_node-&gt;codeOrigin,
</del><ins>+            m_nodeIndex, SpecNone, TypedArrayWatchpoint, m_node-&gt;origin,
</ins><span class="cx">             OpInfo(view));
</span><span class="cx">         m_insertionSet.insertNode(
</span><del>-            m_nodeIndex, SpecNone, Phantom, m_node-&gt;codeOrigin, m_node-&gt;children);
</del><ins>+            m_nodeIndex, SpecNone, Phantom, m_node-&gt;origin, m_node-&gt;children);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     InsertionSet m_insertionSet;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGTierUpCheckInjectionPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -77,11 +77,11 @@
</span><span class="cx">                 // more than one LoopHint could happen in cases where we did a lot of CFG
</span><span class="cx">                 // simplification in the bytecode parser, but it should be very rare.
</span><span class="cx">                 
</span><del>-                CodeOrigin codeOrigin = node-&gt;codeOrigin;
</del><ins>+                NodeOrigin origin = node-&gt;origin;
</ins><span class="cx">                 
</span><del>-                if (level != FTL::CanCompileAndOSREnter || codeOrigin.inlineCallFrame) {
</del><ins>+                if (level != FTL::CanCompileAndOSREnter || origin.semantic.inlineCallFrame) {
</ins><span class="cx">                     insertionSet.insertNode(
</span><del>-                        nodeIndex + 1, SpecNone, CheckTierUpInLoop, codeOrigin);
</del><ins>+                        nodeIndex + 1, SpecNone, CheckTierUpInLoop, origin);
</ins><span class="cx">                     break;
</span><span class="cx">                 }
</span><span class="cx">                 
</span><span class="lines">@@ -95,18 +95,18 @@
</span><span class="cx">                 
</span><span class="cx">                 if (!isAtTop) {
</span><span class="cx">                     insertionSet.insertNode(
</span><del>-                        nodeIndex + 1, SpecNone, CheckTierUpInLoop, codeOrigin);
</del><ins>+                        nodeIndex + 1, SpecNone, CheckTierUpInLoop, origin);
</ins><span class="cx">                     break;
</span><span class="cx">                 }
</span><span class="cx">                 
</span><span class="cx">                 insertionSet.insertNode(
</span><del>-                    nodeIndex + 1, SpecNone, CheckTierUpAndOSREnter, codeOrigin);
</del><ins>+                    nodeIndex + 1, SpecNone, CheckTierUpAndOSREnter, origin);
</ins><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="cx">             
</span><span class="cx">             if (block-&gt;last()-&gt;op() == Return) {
</span><span class="cx">                 insertionSet.insertNode(
</span><del>-                    block-&gt;size() - 1, SpecNone, CheckTierUpAtReturn, block-&gt;last()-&gt;codeOrigin);
</del><ins>+                    block-&gt;size() - 1, SpecNone, CheckTierUpAtReturn, block-&gt;last()-&gt;origin);
</ins><span class="cx">             }
</span><span class="cx">             
</span><span class="cx">             insertionSet.execute(block);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGTypeCheckHoistingPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGTypeCheckHoistingPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGTypeCheckHoistingPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGTypeCheckHoistingPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -128,20 +128,20 @@
</span><span class="cx">                     if (!iter-&gt;value.m_structure &amp;&amp; !iter-&gt;value.m_arrayModeIsValid)
</span><span class="cx">                         break;
</span><span class="cx"> 
</span><del>-                    CodeOrigin codeOrigin = node-&gt;codeOrigin;
</del><ins>+                    NodeOrigin origin = node-&gt;origin;
</ins><span class="cx">                     
</span><span class="cx">                     Node* getLocal = insertionSet.insertNode(
</span><del>-                        indexInBlock + 1, variable-&gt;prediction(), GetLocal, codeOrigin,
</del><ins>+                        indexInBlock + 1, variable-&gt;prediction(), GetLocal, origin,
</ins><span class="cx">                         OpInfo(variable), Edge(node));
</span><span class="cx">                     if (iter-&gt;value.m_structure) {
</span><span class="cx">                         insertionSet.insertNode(
</span><del>-                            indexInBlock + 1, SpecNone, CheckStructure, codeOrigin,
</del><ins>+                            indexInBlock + 1, SpecNone, CheckStructure, origin,
</ins><span class="cx">                             OpInfo(m_graph.addStructureSet(iter-&gt;value.m_structure)),
</span><span class="cx">                             Edge(getLocal, CellUse));
</span><span class="cx">                     } else if (iter-&gt;value.m_arrayModeIsValid) {
</span><span class="cx">                         ASSERT(iter-&gt;value.m_arrayModeHoistingOkay);
</span><span class="cx">                         insertionSet.insertNode(
</span><del>-                            indexInBlock + 1, SpecNone, CheckArray, codeOrigin,
</del><ins>+                            indexInBlock + 1, SpecNone, CheckArray, origin,
</ins><span class="cx">                             OpInfo(iter-&gt;value.m_arrayMode.asWord()),
</span><span class="cx">                             Edge(getLocal, CellUse));
</span><span class="cx">                     } else
</span><span class="lines">@@ -164,18 +164,18 @@
</span><span class="cx">                     if (!iter-&gt;value.m_structure &amp;&amp; !iter-&gt;value.m_arrayModeIsValid)
</span><span class="cx">                         break;
</span><span class="cx"> 
</span><del>-                    CodeOrigin codeOrigin = node-&gt;codeOrigin;
</del><ins>+                    NodeOrigin origin = node-&gt;origin;
</ins><span class="cx">                     Edge child1 = node-&gt;child1();
</span><span class="cx">                     
</span><span class="cx">                     if (iter-&gt;value.m_structure) {
</span><span class="cx">                         insertionSet.insertNode(
</span><del>-                            indexInBlock, SpecNone, CheckStructure, codeOrigin,
</del><ins>+                            indexInBlock, SpecNone, CheckStructure, origin,
</ins><span class="cx">                             OpInfo(m_graph.addStructureSet(iter-&gt;value.m_structure)),
</span><span class="cx">                             Edge(child1.node(), CellUse));
</span><span class="cx">                     } else if (iter-&gt;value.m_arrayModeIsValid) {
</span><span class="cx">                         ASSERT(iter-&gt;value.m_arrayModeHoistingOkay);
</span><span class="cx">                         insertionSet.insertNode(
</span><del>-                            indexInBlock, SpecNone, CheckArray, codeOrigin,
</del><ins>+                            indexInBlock, SpecNone, CheckArray, origin,
</ins><span class="cx">                             OpInfo(iter-&gt;value.m_arrayMode.asWord()),
</span><span class="cx">                             Edge(child1.node(), CellUse));
</span><span class="cx">                     } else
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGValidatecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGValidate.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGValidate.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGValidate.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -415,18 +415,18 @@
</span><span class="cx">                 continue;
</span><span class="cx">             
</span><span class="cx">             unsigned nodeIndex = 0;
</span><del>-            for (; nodeIndex &lt; block-&gt;size() &amp;&amp; !block-&gt;at(nodeIndex)-&gt;codeOrigin.isSet(); nodeIndex++) { }
</del><ins>+            for (; nodeIndex &lt; block-&gt;size() &amp;&amp; !block-&gt;at(nodeIndex)-&gt;origin.isSet(); nodeIndex++) { }
</ins><span class="cx">             
</span><span class="cx">             VALIDATE((block), nodeIndex &lt; block-&gt;size());
</span><span class="cx">             
</span><span class="cx">             for (; nodeIndex &lt; block-&gt;size(); nodeIndex++)
</span><del>-                VALIDATE((block-&gt;at(nodeIndex)), block-&gt;at(nodeIndex)-&gt;codeOrigin.isSet());
</del><ins>+                VALIDATE((block-&gt;at(nodeIndex)), block-&gt;at(nodeIndex)-&gt;origin.isSet());
</ins><span class="cx">             
</span><span class="cx">             for (unsigned nodeIndex = 0; nodeIndex &lt; block-&gt;size(); ++nodeIndex) {
</span><span class="cx">                 Node* node = block-&gt;at(nodeIndex);
</span><span class="cx">                 switch (node-&gt;op()) {
</span><span class="cx">                 case Phi:
</span><del>-                    VALIDATE((node), !node-&gt;codeOrigin.isSet());
</del><ins>+                    VALIDATE((node), !node-&gt;origin.isSet());
</ins><span class="cx">                     break;
</span><span class="cx">                     
</span><span class="cx">                 default:
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGWatchpointCollectionPhasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGWatchpointCollectionPhase.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGWatchpointCollectionPhase.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/dfg/DFGWatchpointCollectionPhase.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -122,7 +122,7 @@
</span><span class="cx">             
</span><span class="cx">         case StructureTransitionWatchpoint:
</span><span class="cx">             m_graph.watchpoints().addLazily(
</span><del>-                m_node-&gt;codeOrigin,
</del><ins>+                m_node-&gt;origin.semantic,
</ins><span class="cx">                 m_node-&gt;child1()-&gt;op() == WeakJSConstant ? BadWeakConstantCacheWatchpoint : BadCacheWatchpoint,
</span><span class="cx">                 m_node-&gt;structure()-&gt;transitionWatchpointSet());
</span><span class="cx">             break;
</span><span class="lines">@@ -158,7 +158,7 @@
</span><span class="cx">             ASSERT(m_graph.watchpoints().isValidOrMixed(stringPrototypeStructure-&gt;transitionWatchpointSet()));
</span><span class="cx">             
</span><span class="cx">             m_graph.watchpoints().addLazily(
</span><del>-                m_node-&gt;codeOrigin, NotStringObject,
</del><ins>+                m_node-&gt;origin.semantic, NotStringObject,
</ins><span class="cx">                 stringPrototypeStructure-&gt;transitionWatchpointSet());
</span><span class="cx">             break;
</span><span class="cx">         }
</span><span class="lines">@@ -170,7 +170,7 @@
</span><span class="cx">     
</span><span class="cx">     void handleMasqueradesAsUndefined()
</span><span class="cx">     {
</span><del>-        if (m_graph.masqueradesAsUndefinedWatchpointIsStillValid(m_node-&gt;codeOrigin))
</del><ins>+        if (m_graph.masqueradesAsUndefinedWatchpointIsStillValid(m_node-&gt;origin.semantic))
</ins><span class="cx">             addLazily(globalObject()-&gt;masqueradesAsUndefinedWatchpoint());
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -199,7 +199,7 @@
</span><span class="cx">     
</span><span class="cx">     JSGlobalObject* globalObject()
</span><span class="cx">     {
</span><del>-        return m_graph.globalObjectFor(m_node-&gt;codeOrigin);
</del><ins>+        return m_graph.globalObjectFor(m_node-&gt;origin.semantic);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     Node* m_node;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLJSCallcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLJSCall.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLJSCall.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/ftl/FTLJSCall.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -81,7 +81,7 @@
</span><span class="cx">     
</span><span class="cx">     callInfo.isFTL = true;
</span><span class="cx">     callInfo.callType = m_node-&gt;op() == DFG::Construct ? CallLinkInfo::Construct : CallLinkInfo::Call;
</span><del>-    callInfo.codeOrigin = m_node-&gt;codeOrigin;
</del><ins>+    callInfo.codeOrigin = m_node-&gt;origin.semantic;
</ins><span class="cx">     callInfo.callReturnLocation = linkBuffer.locationOfNearCall(m_slowCall);
</span><span class="cx">     callInfo.hotPathBegin = linkBuffer.locationOf(m_targetToCheck);
</span><span class="cx">     callInfo.hotPathOther = linkBuffer.locationOfNearCall(m_fastCall);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLLinkcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLLink.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLLink.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/ftl/FTLLink.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -102,9 +102,9 @@
</span><span class="cx">                 
</span><span class="cx">                 Profiler::OriginStack stack;
</span><span class="cx">                 
</span><del>-                if (node-&gt;codeOrigin.isSet()) {
</del><ins>+                if (node-&gt;origin.semantic.isSet()) {
</ins><span class="cx">                     stack = Profiler::OriginStack(
</span><del>-                        *vm.m_perBytecodeProfiler, codeBlock, node-&gt;codeOrigin);
</del><ins>+                        *vm.m_perBytecodeProfiler, codeBlock, node-&gt;origin.semantic);
</ins><span class="cx">                 }
</span><span class="cx">                 
</span><span class="cx">                 if (graph.dumpCodeOrigin(out, prefix, lastNode, node, &amp;dumpContext)) {
</span><span class="lines">@@ -116,7 +116,7 @@
</span><span class="cx">                 compilation-&gt;addDescription(stack, out.toCString());
</span><span class="cx">                 out.reset();
</span><span class="cx">                 
</span><del>-                if (node-&gt;codeOrigin.isSet())
</del><ins>+                if (node-&gt;origin.semantic.isSet())
</ins><span class="cx">                     lastNode = node;
</span><span class="cx">             }
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLLowerDFGToLLVMcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp (163945 => 163946)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp        2014-02-12 05:15:34 UTC (rev 163945)
+++ trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp        2014-02-12 05:42:32 UTC (rev 163946)
</span><span class="lines">@@ -260,8 +260,8 @@
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="cx">         m_node = m_highBlock-&gt;at(nodeIndex);
</span><del>-        m_codeOriginForExitProfile = m_node-&gt;codeOrigin;
-        m_codeOriginForExitTarget = m_node-&gt;codeOriginForExitTarget;
</del><ins>+        m_codeOriginForExitProfile = m_node-&gt;origin.semantic;
+        m_codeOriginForExitTarget = m_node-&gt;origin.forExit;
</ins><span class="cx">         
</span><span class="cx">         if (verboseCompilationEnabled())
</span><span class="cx">             dataLog(&quot;Lowering &quot;, m_node, &quot;\n&quot;);
</span><span class="lines">@@ -908,7 +908,7 @@
</span><span class="cx">         
</span><span class="cx">         m_out.appendTo(slowCase, continuation);
</span><span class="cx">         J_JITOperation_EJ function;
</span><del>-        if (m_graph.isStrictModeFor(m_node-&gt;codeOrigin))
</del><ins>+        if (m_graph.isStrictModeFor(m_node-&gt;origin.semantic))
</ins><span class="cx">             function = operationToThisStrict;
</span><span class="cx">         else
</span><span class="cx">             function = operationToThis;
</span><span class="lines">@@ -1706,8 +1706,8 @@
</span><span class="cx">         setInstructionCallingConvention(call, LLVMAnyRegCallConv);
</span><span class="cx">         
</span><span class="cx">         m_ftlState.putByIds.append(PutByIdDescriptor(
</span><del>-            stackmapID, m_node-&gt;codeOrigin, uid,
-            m_graph.executableFor(m_node-&gt;codeOrigin)-&gt;ecmaMode(),
</del><ins>+            stackmapID, m_node-&gt;origin.semantic, uid,
+            m_graph.executableFor(m_node-&gt;origin.semantic)-&gt;ecmaMode(),
</ins><span class="cx">             m_node-&gt;op() == PutByIdDirect ? Direct : NotDirect));
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -2034,12 +2034,12 @@
</span><span class="cx">         case Array::Generic: {
</span><span class="cx">             V_JITOperation_EJJJ operation;
</span><span class="cx">             if (m_node-&gt;op() == PutByValDirect) {
</span><del>-                if (m_graph.isStrictModeFor(m_node-&gt;codeOrigin))
</del><ins>+                if (m_graph.isStrictModeFor(m_node-&gt;origin.semantic))
</ins><span class="cx">                     operation = operationPutByValDirectStrict;
</span><span class="cx">                 else
</span><span class="cx">                     operation = operationPutByValDirectNonStrict;
</span><span class="cx">             } else {
</span><del>-                if (m_graph.isStrictModeFor(m_node-&gt;codeOrigin))
</del><ins>+                if (m_graph.isStrictModeFor(m_node-&gt;origin.semantic))
</ins><span class="cx">                     operation = operationPutByValStrict;
</span><span class="cx">                 else
</span><span class="cx">                     operation = operationPutByValNonStrict;
</span><span class="lines">@@ -2438,7 +2438,7 @@
</span><span class="cx">         for (unsigned operandIndex = 0; operandIndex &lt; m_node-&gt;numChildren(); ++operandIndex)
</span><span class="cx">             speculate(m_graph.varArgChild(m_node, operandIndex));
</span><span class="cx">         
</span><del>-        JSGlobalObject* globalObject = m_graph.globalObjectFor(m_node-&gt;codeOrigin);
</del><ins>+        JSGlobalObject* globalObject = m_graph.globalObjectFor(m_node-&gt;origin.semantic);
</ins><span class="cx">         Structure* structure = globalObject-&gt;arrayStructureForIndexingTypeDuringAllocation(
</span><span class="cx">             m_node-&gt;indexingType());
</span><span class="cx">         
</span><span class="lines">@@ -2515,7 +2515,7 @@
</span><span class="cx">     
</span><span class="cx">     void compileNewArrayBuffer()
</span><span class="cx">     {
</span><del>-        JSGlobalObject* globalObject = m_graph.globalObjectFor(m_node-&gt;codeOrigin);
</del><ins>+        JSGlobalObject* globalObject = m_graph.globalObjectFor(m_node-&gt;origin.semantic);
</ins><span class="cx">         Structure* structure = globalObject-&gt;arrayStructureForIndexingTypeDuringAllocation(
</span><span class="cx">             m_node-&gt;indexingType());
</span><span class="cx">         
</span><span class="lines">@@ -2554,7 +2554,7 @@
</span><span class="cx">     {
</span><span class="cx">         LValue publicLength = lowInt32(m_node-&gt;child1());
</span><span class="cx">         
</span><del>-        JSGlobalObject* globalObject = m_graph.globalObjectFor(m_node-&gt;codeOrigin);
</del><ins>+        JSGlobalObject* globalObject = m_graph.globalObjectFor(m_node-&gt;origin.semantic);
</ins><span class="cx">         Structure* structure = globalObject-&gt;arrayStructureForIndexingTypeDuringAllocation(
</span><span class="cx">             m_node-&gt;indexingType());
</span><span class="cx">         
</span><span class="lines">@@ -2984,7 +2984,7 @@
</span><span class="cx">             speculate(OutOfBounds, noValue(), 0, m_out.booleanTrue);
</span><span class="cx">             results.append(m_out.anchor(m_out.intPtrZero));
</span><span class="cx">         } else {
</span><del>-            JSGlobalObject* globalObject = m_graph.globalObjectFor(m_node-&gt;codeOrigin);
</del><ins>+            JSGlobalObject* globalObject = m_graph.globalObjectFor(m_node-&gt;origin.semantic);
</ins><span class="cx">                 
</span><span class="cx">             if (globalObject-&gt;stringPrototypeChainIsSane()) {
</span><span class="cx">                 LBasicBlock negativeIndex = FTL_NEW_BLOCK(m_out, (&quot;GetByVal String negative index&quot;));
</span><span class="lines">@@ -3166,7 +3166,7 @@
</span><span class="cx">     void compileGetMyScope()
</span><span class="cx">     {
</span><span class="cx">         setJSValue(m_out.loadPtr(addressFor(
</span><del>-            m_node-&gt;codeOrigin.stackOffset() + JSStack::ScopeChain)));
</del><ins>+            m_node-&gt;origin.semantic.stackOffset() + JSStack::ScopeChain)));
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     void compileSkipScope()
</span><span class="lines">@@ -3544,9 +3544,9 @@
</span><span class="cx">     {
</span><span class="cx">         ASSERT(!isEmptySpeculation(
</span><span class="cx">             m_state.variables().operand(
</span><del>-                m_graph.argumentsRegisterFor(m_node-&gt;codeOrigin)).m_type));
</del><ins>+                m_graph.argumentsRegisterFor(m_node-&gt;origin.semantic)).m_type));
</ins><span class="cx">         
</span><del>-        VirtualRegister reg = m_graph.machineArgumentsRegisterFor(m_node-&gt;codeOrigin);
</del><ins>+        VirtualRegister reg = m_graph.machineArgumentsRegisterFor(m_node-&gt;origin.semantic);
</ins><span class="cx">         speculate(ArgumentsEscaped, noValue(), 0, m_out.notZero64(m_out.load64(addressFor(reg))));
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -3572,7 +3572,7 @@
</span><span class="cx">             constNull(m_out.ref8), m_out.constInt32(1), base);
</span><span class="cx">         setInstructionCallingConvention(call, LLVMAnyRegCallConv);
</span><span class="cx">         
</span><del>-        m_ftlState.getByIds.append(GetByIdDescriptor(stackmapID, m_node-&gt;codeOrigin, uid));
</del><ins>+        m_ftlState.getByIds.append(GetByIdDescriptor(stackmapID, m_node-&gt;origin.semantic, uid));
</ins><span class="cx">         
</span><span class="cx">         return call;
</span><span class="cx">     }
</span><span class="lines">@@ -3954,7 +3954,7 @@
</span><span class="cx">             
</span><span class="cx">             results.append(m_out.anchor(
</span><span class="cx">                 m_out.equal(
</span><del>-                    m_out.constIntPtr(m_graph.globalObjectFor(m_node-&gt;codeOrigin)),
</del><ins>+                    m_out.constIntPtr(m_graph.globalObjectFor(m_node-&gt;origin.semantic)),
</ins><span class="cx">                     m_out.loadPtr(structure, m_heaps.Structure_globalObject))));
</span><span class="cx">             m_out.jump(continuation);
</span><span class="cx">         }
</span><span class="lines">@@ -4894,7 +4894,7 @@
</span><span class="cx">     void speculateStringObjectForStructure(Edge edge, LValue structure)
</span><span class="cx">     {
</span><span class="cx">         Structure* stringObjectStructure =
</span><del>-            m_graph.globalObjectFor(m_node-&gt;codeOrigin)-&gt;stringObjectStructure();
</del><ins>+            m_graph.globalObjectFor(m_node-&gt;origin.semantic)-&gt;stringObjectStructure();
</ins><span class="cx">         
</span><span class="cx">         if (m_state.forNode(edge).m_currentKnownStructure.isSubsetOf(StructureSet(stringObjectStructure)))
</span><span class="cx">             return;
</span><span class="lines">@@ -4966,7 +4966,7 @@
</span><span class="cx">     
</span><span class="cx">     bool masqueradesAsUndefinedWatchpointIsStillValid()
</span><span class="cx">     {
</span><del>-        return m_graph.masqueradesAsUndefinedWatchpointIsStillValid(m_node-&gt;codeOrigin);
</del><ins>+        return m_graph.masqueradesAsUndefinedWatchpointIsStillValid(m_node-&gt;origin.semantic);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     LValue loadMarkByte(LValue base)
</span><span class="lines">@@ -5083,7 +5083,7 @@
</span><span class="cx">     }
</span><span class="cx">     void callPreflight()
</span><span class="cx">     {
</span><del>-        callPreflight(m_node-&gt;codeOrigin);
</del><ins>+        callPreflight(m_node-&gt;origin.semantic);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     void callCheck(ExceptionCheckMode mode = CheckExceptions)
</span></span></pre>
</div>
</div>

</body>
</html>