Ignore:
Timestamp:
Feb 11, 2014, 9:42:32 PM (12 years ago)
Author:
[email protected]
Message:

Inserting a node with a codeOrigin "like" 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 "everything else" 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 "node->codeOrigin" expressions had to change to
"node->origin.semantic". 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 "node->origin.semantic" 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<AbstractStateType>::booleanResult):
(JSC::DFG::AbstractInterpreter<AbstractStateType>::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):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp

    r163844 r163946  
    262262        GPRReg localGlobalObjectGPR = localGlobalObject.gpr();
    263263        GPRReg remoteGlobalObjectGPR = remoteGlobalObject.gpr();
    264         m_jit.move(JITCompiler::TrustedImmPtr(m_jit.graph().globalObjectFor(operand->codeOrigin)), localGlobalObjectGPR);
     264        m_jit.move(JITCompiler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode->origin.semantic)), localGlobalObjectGPR);
    265265        m_jit.loadPtr(JITCompiler::Address(resultGPR, Structure::globalObjectOffset()), remoteGlobalObjectGPR);
    266266        m_jit.comparePtr(invert ? JITCompiler::NotEqual : JITCompiler::Equal, localGlobalObjectGPR, remoteGlobalObjectGPR, resultGPR);
     
    322322        GPRReg localGlobalObjectGPR = localGlobalObject.gpr();
    323323        GPRReg remoteGlobalObjectGPR = remoteGlobalObject.gpr();
    324         m_jit.move(TrustedImmPtr(m_jit.graph().globalObjectFor(operand->codeOrigin)), localGlobalObjectGPR);
     324        m_jit.move(TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode->origin.semantic)), localGlobalObjectGPR);
    325325        m_jit.loadPtr(JITCompiler::Address(resultGPR, Structure::globalObjectOffset()), remoteGlobalObjectGPR);
    326326        branchPtr(JITCompiler::Equal, localGlobalObjectGPR, remoteGlobalObjectGPR, invert ? notTaken : taken);
     
    684684    JITCompiler::Jump slowPath;
    685685
    686     m_jit.emitStoreCodeOrigin(node->codeOrigin);
     686    m_jit.emitStoreCodeOrigin(node->origin.semantic);
    687687   
    688688    slowPath = m_jit.branchPtrWithPatch(MacroAssembler::NotEqual, calleeGPR, targetToCheck, MacroAssembler::TrustedImmPtr(0));
     
    713713    jsValueResult(resultGPR, m_currentNode, DataFormatJS, UseChildrenCalledExplicitly);
    714714   
    715     m_jit.addJSCall(fastCall, slowCall, targetToCheck, callType, calleeGPR, m_currentNode->codeOrigin);
     715    m_jit.addJSCall(fastCall, slowCall, targetToCheck, callType, calleeGPR, m_currentNode->origin.semantic);
    716716}
    717717
     
    18731873                MacroAssembler::Equal,
    18741874                MacroAssembler::Address(structureGPR, Structure::globalObjectOffset()),
    1875                 MacroAssembler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode->codeOrigin))));
     1875                MacroAssembler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode->origin.semantic))));
    18761876
    18771877        isNotMasqueradesAsUndefined.link(&m_jit);
     
    20122012                MacroAssembler::Equal,
    20132013                MacroAssembler::Address(scratchGPR, Structure::globalObjectOffset()),
    2014                 MacroAssembler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode->codeOrigin))));
     2014                MacroAssembler::TrustedImmPtr(m_jit.graph().globalObjectFor(m_currentNode->origin.semantic))));
    20152015
    20162016        isNotMasqueradesAsUndefined.link(&m_jit);
     
    28802880            flushRegisters();
    28812881            if (node->op() == PutByValDirect)
    2882                 callOperation(m_jit.isStrictModeFor(node->codeOrigin) ? operationPutByValDirectStrict : operationPutByValDirectNonStrict, arg1GPR, arg2GPR, arg3GPR);
     2882                callOperation(m_jit.isStrictModeFor(node->origin.semantic) ? operationPutByValDirectStrict : operationPutByValDirectNonStrict, arg1GPR, arg2GPR, arg3GPR);
    28832883            else
    2884                 callOperation(m_jit.isStrictModeFor(node->codeOrigin) ? operationPutByValStrict : operationPutByValNonStrict, arg1GPR, arg2GPR, arg3GPR);
     2884                callOperation(m_jit.isStrictModeFor(node->origin.semantic) ? operationPutByValStrict : operationPutByValNonStrict, arg1GPR, arg2GPR, arg3GPR);
    28852885           
    28862886            noResult(node);
     
    34753475       
    34763476    case NewArray: {
    3477         JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node->codeOrigin);
     3477        JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node->origin.semantic);
    34783478        if (!globalObject->isHavingABadTime() && !hasArrayStorage(node->indexingType())) {
    34793479            Structure* structure = globalObject->arrayStructureForIndexingTypeDuringAllocation(node->indexingType());
     
    36463646       
    36473647    case NewArrayWithSize: {
    3648         JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node->codeOrigin);
     3648        JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node->origin.semantic);
    36493649        if (!globalObject->isHavingABadTime() && !hasArrayStorage(node->indexingType())) {
    36503650            SpeculateStrictInt32Operand size(this, node->child1());
     
    37163716       
    37173717    case NewArrayBuffer: {
    3718         JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node->codeOrigin);
     3718        JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node->origin.semantic);
    37193719        IndexingType indexingType = node->indexingType();
    37203720        if (!globalObject->isHavingABadTime() && !hasArrayStorage(indexingType)) {
     
    37733773            GPRReg resultGPR = result.gpr();
    37743774           
    3775             JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node->codeOrigin);
     3775            JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node->origin.semantic);
    37763776            callOperation(
    37773777                operationNewTypedArrayWithOneArgumentForType(node->typedArrayType()),
     
    38173817        m_jit.move(thisValueGPR, tempGPR);
    38183818        J_JITOperation_EJ function;
    3819         if (m_jit.graph().executableFor(node->codeOrigin)->isStrictMode())
     3819        if (m_jit.graph().executableFor(node->origin.semantic)->isStrictMode())
    38203820            function = operationToThisStrict;
    38213821        else
     
    39923992            base.use();
    39933993           
    3994             cachedGetById(node->codeOrigin, baseGPR, resultGPR, node->identifierNumber());
     3994            cachedGetById(node->origin.semantic, baseGPR, resultGPR, node->identifierNumber());
    39953995           
    39963996            jsValueResult(resultGPR, node, UseChildrenCalledExplicitly);
     
    40094009            JITCompiler::Jump notCell = m_jit.branchTest64(JITCompiler::NonZero, baseGPR, GPRInfo::tagMaskRegister);
    40104010       
    4011             cachedGetById(node->codeOrigin, baseGPR, resultGPR, node->identifierNumber(), notCell);
     4011            cachedGetById(node->origin.semantic, baseGPR, resultGPR, node->identifierNumber(), notCell);
    40124012       
    40134013            jsValueResult(resultGPR, node, UseChildrenCalledExplicitly);
     
    40414041            flushRegisters();
    40424042           
    4043             cachedGetById(node->codeOrigin, baseGPR, resultGPR, node->identifierNumber(), JITCompiler::Jump(), DontSpill);
     4043            cachedGetById(node->origin.semantic, baseGPR, resultGPR, node->identifierNumber(), JITCompiler::Jump(), DontSpill);
    40444044           
    40454045            jsValueResult(resultGPR, node, UseChildrenCalledExplicitly);
     
    40594059            JITCompiler::Jump notCell = m_jit.branchTest64(JITCompiler::NonZero, baseGPR, GPRInfo::tagMaskRegister);
    40604060       
    4061             cachedGetById(node->codeOrigin, baseGPR, resultGPR, node->identifierNumber(), notCell, DontSpill);
     4061            cachedGetById(node->origin.semantic, baseGPR, resultGPR, node->identifierNumber(), notCell, DontSpill);
    40624062       
    40634063            jsValueResult(resultGPR, node, UseChildrenCalledExplicitly);
     
    42534253        GPRReg scratchGPR = scratch.gpr();
    42544254       
    4255         cachedPutById(node->codeOrigin, baseGPR, valueGPR, scratchGPR, node->identifierNumber(), NotDirect);
     4255        cachedPutById(node->origin.semantic, baseGPR, valueGPR, scratchGPR, node->identifierNumber(), NotDirect);
    42564256
    42574257        noResult(node);
     
    42684268        GPRReg scratchGPR = scratch.gpr();
    42694269       
    4270         cachedPutById(node->codeOrigin, baseGPR, valueGPR, scratchGPR, node->identifierNumber(), Direct);
     4270        cachedPutById(node->origin.semantic, baseGPR, valueGPR, scratchGPR, node->identifierNumber(), Direct);
    42714271
    42724272        noResult(node);
     
    43854385            GPRReg localGlobalObjectGPR = localGlobalObject.gpr();
    43864386            GPRReg remoteGlobalObjectGPR = remoteGlobalObject.gpr();
    4387             m_jit.move(TrustedImmPtr(m_jit.globalObjectFor(node->codeOrigin)), localGlobalObjectGPR);
     4387            m_jit.move(TrustedImmPtr(m_jit.globalObjectFor(node->origin.semantic)), localGlobalObjectGPR);
    43884388            m_jit.loadPtr(JITCompiler::Address(result.gpr(), Structure::globalObjectOffset()), remoteGlobalObjectGPR);
    43894389            m_jit.comparePtr(JITCompiler::Equal, localGlobalObjectGPR, remoteGlobalObjectGPR, result.gpr());
     
    45304530
    45314531    case CreateActivation: {
    4532         RELEASE_ASSERT(!node->codeOrigin.inlineCallFrame);
     4532        RELEASE_ASSERT(!node->origin.semantic.inlineCallFrame);
    45334533       
    45344534        JSValueOperand value(this, node->child1());
     
    45674567        JITCompiler::Jump notCreated = m_jit.branchTest64(JITCompiler::Zero, resultGPR);
    45684568       
    4569         if (node->codeOrigin.inlineCallFrame) {
     4569        if (node->origin.semantic.inlineCallFrame) {
    45704570            addSlowPathGenerator(
    45714571                slowPathCall(
    45724572                    notCreated, this, operationCreateInlinedArguments, resultGPR,
    4573                     node->codeOrigin.inlineCallFrame));
     4573                    node->origin.semantic.inlineCallFrame));
    45744574        } else {
    45754575            addSlowPathGenerator(
     
    45824582
    45834583    case TearOffActivation: {
    4584         RELEASE_ASSERT(!node->codeOrigin.inlineCallFrame);
     4584        RELEASE_ASSERT(!node->origin.semantic.inlineCallFrame);
    45854585
    45864586        JSValueOperand activationValue(this, node->child1());
     
    45914591        JITCompiler::Jump notCreated = m_jit.branchTest64(JITCompiler::Zero, activationValueGPR);
    45924592
    4593         SymbolTable* symbolTable = m_jit.symbolTableFor(node->codeOrigin);
     4593        SymbolTable* symbolTable = m_jit.symbolTableFor(node->origin.semantic);
    45944594        int registersOffset = JSActivation::registersOffset(symbolTable);
    45954595
     
    46244624        JITCompiler::Jump created = m_jit.branchTest64(JITCompiler::NonZero, unmodifiedArgumentsValueGPR);
    46254625
    4626         if (node->codeOrigin.inlineCallFrame) {
     4626        if (node->origin.semantic.inlineCallFrame) {
    46274627            addSlowPathGenerator(
    46284628                slowPathCall(
    46294629                    created, this, operationTearOffInlinedArguments, NoResult,
    4630                     unmodifiedArgumentsValueGPR, activationValueGPR, node->codeOrigin.inlineCallFrame));
     4630                    unmodifiedArgumentsValueGPR, activationValueGPR, node->origin.semantic.inlineCallFrame));
    46314631        } else {
    46324632            addSlowPathGenerator(
     
    46454645        if (!isEmptySpeculation(
    46464646                m_state.variables().operand(
    4647                     m_jit.graph().argumentsRegisterFor(node->codeOrigin)).m_type)) {
     4647                    m_jit.graph().argumentsRegisterFor(node->origin.semantic)).m_type)) {
    46484648            speculationCheck(
    46494649                ArgumentsEscaped, JSValueRegs(), 0,
     
    46514651                    JITCompiler::NonZero,
    46524652                    JITCompiler::addressFor(
    4653                         m_jit.graph().machineArgumentsRegisterFor(node->codeOrigin))));
    4654         }
    4655        
    4656         RELEASE_ASSERT(!node->codeOrigin.inlineCallFrame);
     4653                        m_jit.graph().machineArgumentsRegisterFor(node->origin.semantic))));
     4654        }
     4655       
     4656        RELEASE_ASSERT(!node->origin.semantic.inlineCallFrame);
    46574657        m_jit.load32(JITCompiler::payloadFor(JSStack::ArgumentCount), resultGPR);
    46584658        m_jit.sub32(TrustedImm32(1), resultGPR);
     
    46684668            JITCompiler::NonZero,
    46694669            JITCompiler::addressFor(
    4670                 m_jit.graph().machineArgumentsRegisterFor(node->codeOrigin)));
    4671        
    4672         if (node->codeOrigin.inlineCallFrame) {
     4670                m_jit.graph().machineArgumentsRegisterFor(node->origin.semantic)));
     4671       
     4672        if (node->origin.semantic.inlineCallFrame) {
    46734673            m_jit.move(
    4674                 Imm64(JSValue::encode(jsNumber(node->codeOrigin.inlineCallFrame->arguments.size() - 1))),
     4674                Imm64(JSValue::encode(jsNumber(node->origin.semantic.inlineCallFrame->arguments.size() - 1))),
    46754675                resultGPR);
    46764676        } else {
     
    46874687            slowPathCall(
    46884688                created, this, operationGetArgumentsLength, resultGPR,
    4689                 m_jit.graph().machineArgumentsRegisterFor(node->codeOrigin).offset()));
     4689                m_jit.graph().machineArgumentsRegisterFor(node->origin.semantic).offset()));
    46904690       
    46914691        jsValueResult(resultGPR, node);
     
    47014701        if (!isEmptySpeculation(
    47024702                m_state.variables().operand(
    4703                     m_jit.graph().argumentsRegisterFor(node->codeOrigin)).m_type)) {
     4703                    m_jit.graph().argumentsRegisterFor(node->origin.semantic)).m_type)) {
    47044704            speculationCheck(
    47054705                ArgumentsEscaped, JSValueRegs(), 0,
     
    47074707                    JITCompiler::NonZero,
    47084708                    JITCompiler::addressFor(
    4709                         m_jit.graph().machineArgumentsRegisterFor(node->codeOrigin))));
     4709                        m_jit.graph().machineArgumentsRegisterFor(node->origin.semantic))));
    47104710        }
    47114711
    47124712        m_jit.add32(TrustedImm32(1), indexGPR, resultGPR);
    4713         if (node->codeOrigin.inlineCallFrame) {
     4713        if (node->origin.semantic.inlineCallFrame) {
    47144714            speculationCheck(
    47154715                Uncountable, JSValueRegs(), 0,
     
    47174717                    JITCompiler::AboveOrEqual,
    47184718                    resultGPR,
    4719                     Imm32(node->codeOrigin.inlineCallFrame->arguments.size())));
     4719                    Imm32(node->origin.semantic.inlineCallFrame->arguments.size())));
    47204720        } else {
    47214721            speculationCheck(
     
    47294729        JITCompiler::JumpList slowArgument;
    47304730        JITCompiler::JumpList slowArgumentOutOfBounds;
    4731         if (m_jit.symbolTableFor(node->codeOrigin)->slowArguments()) {
    4732             RELEASE_ASSERT(!node->codeOrigin.inlineCallFrame);
     4731        if (m_jit.symbolTableFor(node->origin.semantic)->slowArguments()) {
     4732            RELEASE_ASSERT(!node->origin.semantic.inlineCallFrame);
    47334733            const SlowArgument* slowArguments = m_jit.graph().m_slowArguments.get();
    47344734           
     
    47364736                m_jit.branch32(
    47374737                    JITCompiler::AboveOrEqual, indexGPR,
    4738                     Imm32(m_jit.symbolTableFor(node->codeOrigin)->parameterCount())));
     4738                    Imm32(m_jit.symbolTableFor(node->origin.semantic)->parameterCount())));
    47394739
    47404740            COMPILE_ASSERT(sizeof(SlowArgument) == 8, SlowArgument_size_is_eight_bytes);
     
    47584758        m_jit.load64(
    47594759            JITCompiler::BaseIndex(
    4760                 GPRInfo::callFrameRegister, resultGPR, JITCompiler::TimesEight, m_jit.offsetOfArgumentsIncludingThis(node->codeOrigin)),
     4760                GPRInfo::callFrameRegister, resultGPR, JITCompiler::TimesEight, m_jit.offsetOfArgumentsIncludingThis(node->origin.semantic)),
    47614761            resultGPR);
    47624762
     
    47774777                JITCompiler::NonZero,
    47784778                JITCompiler::addressFor(
    4779                     m_jit.graph().machineArgumentsRegisterFor(node->codeOrigin))));
     4779                    m_jit.graph().machineArgumentsRegisterFor(node->origin.semantic))));
    47804780       
    47814781        m_jit.add32(TrustedImm32(1), indexGPR, resultGPR);
    4782         if (node->codeOrigin.inlineCallFrame) {
     4782        if (node->origin.semantic.inlineCallFrame) {
    47834783            slowPath.append(
    47844784                m_jit.branch32(
    47854785                    JITCompiler::AboveOrEqual,
    47864786                    resultGPR,
    4787                     Imm32(node->codeOrigin.inlineCallFrame->arguments.size())));
     4787                    Imm32(node->origin.semantic.inlineCallFrame->arguments.size())));
    47884788        } else {
    47894789            slowPath.append(
     
    47964796        JITCompiler::JumpList slowArgument;
    47974797        JITCompiler::JumpList slowArgumentOutOfBounds;
    4798         if (m_jit.symbolTableFor(node->codeOrigin)->slowArguments()) {
    4799             RELEASE_ASSERT(!node->codeOrigin.inlineCallFrame);
     4798        if (m_jit.symbolTableFor(node->origin.semantic)->slowArguments()) {
     4799            RELEASE_ASSERT(!node->origin.semantic.inlineCallFrame);
    48004800            const SlowArgument* slowArguments = m_jit.graph().m_slowArguments.get();
    48014801
     
    48034803                m_jit.branch32(
    48044804                    JITCompiler::AboveOrEqual, indexGPR,
    4805                     Imm32(m_jit.symbolTableFor(node->codeOrigin)->parameterCount())));
     4805                    Imm32(m_jit.symbolTableFor(node->origin.semantic)->parameterCount())));
    48064806
    48074807            COMPILE_ASSERT(sizeof(SlowArgument) == 8, SlowArgument_size_is_eight_bytes);
     
    48254825        m_jit.load64(
    48264826            JITCompiler::BaseIndex(
    4827                 GPRInfo::callFrameRegister, resultGPR, JITCompiler::TimesEight, m_jit.offsetOfArgumentsIncludingThis(node->codeOrigin)),
     4827                GPRInfo::callFrameRegister, resultGPR, JITCompiler::TimesEight, m_jit.offsetOfArgumentsIncludingThis(node->origin.semantic)),
    48284828            resultGPR);
    48294829       
    4830         if (node->codeOrigin.inlineCallFrame) {
     4830        if (node->origin.semantic.inlineCallFrame) {
    48314831            addSlowPathGenerator(
    48324832                slowPathCall(
    48334833                    slowPath, this, operationGetInlinedArgumentByVal, resultGPR,
    4834                     m_jit.graph().machineArgumentsRegisterFor(node->codeOrigin).offset(),
    4835                     node->codeOrigin.inlineCallFrame,
     4834                    m_jit.graph().machineArgumentsRegisterFor(node->origin.semantic).offset(),
     4835                    node->origin.semantic.inlineCallFrame,
    48364836                    indexGPR));
    48374837        } else {
     
    48394839                slowPathCall(
    48404840                    slowPath, this, operationGetArgumentByVal, resultGPR,
    4841                     m_jit.graph().machineArgumentsRegisterFor(node->codeOrigin).offset(),
     4841                    m_jit.graph().machineArgumentsRegisterFor(node->origin.semantic).offset(),
    48424842                    indexGPR));
    48434843        }
     
    48514851        ASSERT(!isEmptySpeculation(
    48524852            m_state.variables().operand(
    4853                 m_jit.graph().argumentsRegisterFor(node->codeOrigin)).m_type));
     4853                m_jit.graph().argumentsRegisterFor(node->origin.semantic)).m_type));
    48544854        speculationCheck(
    48554855            ArgumentsEscaped, JSValueRegs(), 0,
     
    48574857                JITCompiler::NonZero,
    48584858                JITCompiler::addressFor(
    4859                     m_jit.graph().machineArgumentsRegisterFor(node->codeOrigin))));
     4859                    m_jit.graph().machineArgumentsRegisterFor(node->origin.semantic))));
    48604860        noResult(node);
    48614861        break;
     
    49724972       
    49734973    case CheckTierUpAndOSREnter: {
    4974         ASSERT(!node->codeOrigin.inlineCallFrame);
     4974        ASSERT(!node->origin.semantic.inlineCallFrame);
    49754975       
    49764976        GPRTemporary temp(this);
     
    49844984        silentSpillAllRegisters(tempGPR);
    49854985        m_jit.setupArgumentsWithExecState(
    4986             TrustedImm32(node->codeOrigin.bytecodeIndex),
     4986            TrustedImm32(node->origin.semantic.bytecodeIndex),
    49874987            TrustedImm32(m_stream->size()));
    49884988        appendCallSetResult(triggerOSREntryNow, tempGPR);
Note: See TracChangeset for help on using the changeset viewer.