• fpizlo@apple.com's avatar
    DFG should not use a graph that is a vector, Nodes shouldn't move after... · 8ff092fc
    fpizlo@apple.com authored
    DFG should not use a graph that is a vector, Nodes shouldn't move after allocation, and we should always refer to nodes by Node*
    https://bugs.webkit.org/show_bug.cgi?id=106868
    
    Reviewed by Oliver Hunt.
            
    This adds a pool allocator for Nodes, and uses that instead of a Vector. Changes all
    uses of Node& and NodeIndex to be simply Node*. Nodes no longer have an index except
    for debugging (Node::index(), which is not guaranteed to be O(1)).
            
    1% speed-up on SunSpider, presumably because this improves compile times.
    
    * CMakeLists.txt:
    * GNUmakefile.list.am:
    * JavaScriptCore.xcodeproj/project.pbxproj:
    * Target.pri:
    * bytecode/DataFormat.h:
    (JSC::dataFormatToString):
    * dfg/DFGAbstractState.cpp:
    (JSC::DFG::AbstractState::initialize):
    (JSC::DFG::AbstractState::booleanResult):
    (JSC::DFG::AbstractState::execute):
    (JSC::DFG::AbstractState::mergeStateAtTail):
    (JSC::DFG::AbstractState::mergeToSuccessors):
    (JSC::DFG::AbstractState::mergeVariableBetweenBlocks):
    (JSC::DFG::AbstractState::dump):
    * dfg/DFGAbstractState.h:
    (DFG):
    (JSC::DFG::AbstractState::forNode):
    (AbstractState):
    (JSC::DFG::AbstractState::speculateInt32Unary):
    (JSC::DFG::AbstractState::speculateNumberUnary):
    (JSC::DFG::AbstractState::speculateBooleanUnary):
    (JSC::DFG::AbstractState::speculateInt32Binary):
    (JSC::DFG::AbstractState::speculateNumberBinary):
    (JSC::DFG::AbstractState::trySetConstant):
    * dfg/DFGAbstractValue.h:
    (AbstractValue):
    * dfg/DFGAdjacencyList.h:
    (JSC::DFG::AdjacencyList::AdjacencyList):
    (JSC::DFG::AdjacencyList::initialize):
    * dfg/DFGAllocator.h: Added.
    (DFG):
    (Allocator):
    (JSC::DFG::Allocator::Region::size):
    (JSC::DFG::Allocator::Region::headerSize):
    (JSC::DFG::Allocator::Region::numberOfThingsPerRegion):
    (JSC::DFG::Allocator::Region::data):
    (JSC::DFG::Allocator::Region::isInThisRegion):
    (JSC::DFG::Allocator::Region::regionFor):
    (Region):
    (JSC::DFG::::Allocator):
    (JSC::DFG::::~Allocator):
    (JSC::DFG::::allocate):
    (JSC::DFG::::free):
    (JSC::DFG::::freeAll):
    (JSC::DFG::::reset):
    (JSC::DFG::::indexOf):
    (JSC::DFG::::allocatorOf):
    (JSC::DFG::::bumpAllocate):
    (JSC::DFG::::freeListAllocate):
    (JSC::DFG::::allocateSlow):
    (JSC::DFG::::freeRegionsStartingAt):
    (JSC::DFG::::startBumpingIn):
    * dfg/DFGArgumentsSimplificationPhase.cpp:
    (JSC::DFG::ArgumentsSimplificationPhase::run):
    (JSC::DFG::ArgumentsSimplificationPhase::observeBadArgumentsUse):
    (JSC::DFG::ArgumentsSimplificationPhase::observeBadArgumentsUses):
    (JSC::DFG::ArgumentsSimplificationPhase::observeProperArgumentsUse):
    (JSC::DFG::ArgumentsSimplificationPhase::isOKToOptimize):
    (JSC::DFG::ArgumentsSimplificationPhase::removeArgumentsReferencingPhantomChild):
    * dfg/DFGArrayMode.cpp:
    (JSC::DFG::ArrayMode::originalArrayStructure):
    (JSC::DFG::ArrayMode::alreadyChecked):
    * dfg/DFGArrayMode.h:
    (ArrayMode):
    * dfg/DFGArrayifySlowPathGenerator.h:
    (JSC::DFG::ArrayifySlowPathGenerator::ArrayifySlowPathGenerator):
    * dfg/DFGBasicBlock.h:
    (JSC::DFG::BasicBlock::node):
    (JSC::DFG::BasicBlock::isInPhis):
    (JSC::DFG::BasicBlock::isInBlock):
    (BasicBlock):
    * dfg/DFGBasicBlockInlines.h:
    (DFG):
    * dfg/DFGByteCodeParser.cpp:
    (ByteCodeParser):
    (JSC::DFG::ByteCodeParser::getDirect):
    (JSC::DFG::ByteCodeParser::get):
    (JSC::DFG::ByteCodeParser::setDirect):
    (JSC::DFG::ByteCodeParser::set):
    (JSC::DFG::ByteCodeParser::setPair):
    (JSC::DFG::ByteCodeParser::injectLazyOperandSpeculation):
    (JSC::DFG::ByteCodeParser::getLocal):
    (JSC::DFG::ByteCodeParser::setLocal):
    (JSC::DFG::ByteCodeParser::getArgument):
    (JSC::DFG::ByteCodeParser::setArgument):
    (JSC::DFG::ByteCodeParser::flushDirect):
    (JSC::DFG::ByteCodeParser::getToInt32):
    (JSC::DFG::ByteCodeParser::toInt32):
    (JSC::DFG::ByteCodeParser::getJSConstantForValue):
    (JSC::DFG::ByteCodeParser::getJSConstant):
    (JSC::DFG::ByteCodeParser::getCallee):
    (JSC::DFG::ByteCodeParser::getThis):
    (JSC::DFG::ByteCodeParser::setThis):
    (JSC::DFG::ByteCodeParser::isJSConstant):
    (JSC::DFG::ByteCodeParser::isInt32Constant):
    (JSC::DFG::ByteCodeParser::valueOfJSConstant):
    (JSC::DFG::ByteCodeParser::valueOfInt32Constant):
    (JSC::DFG::ByteCodeParser::constantUndefined):
    (JSC::DFG::ByteCodeParser::constantNull):
    (JSC::DFG::ByteCodeParser::one):
    (JSC::DFG::ByteCodeParser::constantNaN):
    (JSC::DFG::ByteCodeParser::cellConstant):
    (JSC::DFG::ByteCodeParser::addToGraph):
    (JSC::DFG::ByteCodeParser::insertPhiNode):
    (JSC::DFG::ByteCodeParser::addVarArgChild):
    (JSC::DFG::ByteCodeParser::addCall):
    (JSC::DFG::ByteCodeParser::addStructureTransitionCheck):
    (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
    (JSC::DFG::ByteCodeParser::getPrediction):
    (JSC::DFG::ByteCodeParser::getArrayModeAndEmitChecks):
    (JSC::DFG::ByteCodeParser::makeSafe):
    (JSC::DFG::ByteCodeParser::makeDivSafe):
    (JSC::DFG::ByteCodeParser::ConstantRecord::ConstantRecord):
    (ConstantRecord):
    (JSC::DFG::ByteCodeParser::PhiStackEntry::PhiStackEntry):
    (PhiStackEntry):
    (JSC::DFG::ByteCodeParser::handleCall):
    (JSC::DFG::ByteCodeParser::emitFunctionChecks):
    (JSC::DFG::ByteCodeParser::handleInlining):
    (JSC::DFG::ByteCodeParser::setIntrinsicResult):
    (JSC::DFG::ByteCodeParser::handleMinMax):
    (JSC::DFG::ByteCodeParser::handleIntrinsic):
    (JSC::DFG::ByteCodeParser::handleGetByOffset):
    (JSC::DFG::ByteCodeParser::handleGetById):
    (JSC::DFG::ByteCodeParser::getScope):
    (JSC::DFG::ByteCodeParser::parseResolveOperations):
    (JSC::DFG::ByteCodeParser::parseBlock):
    (JSC::DFG::ByteCodeParser::processPhiStack):
    (JSC::DFG::ByteCodeParser::linkBlock):
    (JSC::DFG::ByteCodeParser::parseCodeBlock):
    (JSC::DFG::ByteCodeParser::parse):
    * dfg/DFGCFAPhase.cpp:
    (JSC::DFG::CFAPhase::performBlockCFA):
    * dfg/DFGCFGSimplificationPhase.cpp:
    (JSC::DFG::CFGSimplificationPhase::run):
    (JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
    (JSC::DFG::CFGSimplificationPhase::fixPossibleGetLocal):
    (JSC::DFG::CFGSimplificationPhase::fixPhis):
    (JSC::DFG::CFGSimplificationPhase::removePotentiallyDeadPhiReference):
    (JSC::DFG::CFGSimplificationPhase::OperandSubstitution::OperandSubstitution):
    (JSC::DFG::CFGSimplificationPhase::OperandSubstitution::dump):
    (OperandSubstitution):
    (JSC::DFG::CFGSimplificationPhase::skipGetLocal):
    (JSC::DFG::CFGSimplificationPhase::recordNewTarget):
    (JSC::DFG::CFGSimplificationPhase::fixTailOperand):
    (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
    * dfg/DFGCSEPhase.cpp:
    (JSC::DFG::CSEPhase::canonicalize):
    (JSC::DFG::CSEPhase::endIndexForPureCSE):
    (JSC::DFG::CSEPhase::pureCSE):
    (JSC::DFG::CSEPhase::constantCSE):
    (JSC::DFG::CSEPhase::weakConstantCSE):
    (JSC::DFG::CSEPhase::getCalleeLoadElimination):
    (JSC::DFG::CSEPhase::getArrayLengthElimination):
    (JSC::DFG::CSEPhase::globalVarLoadElimination):
    (JSC::DFG::CSEPhase::scopedVarLoadElimination):
    (JSC::DFG::CSEPhase::globalVarWatchpointElimination):
    (JSC::DFG::CSEPhase::globalVarStoreElimination):
    (JSC::DFG::CSEPhase::scopedVarStoreElimination):
    (JSC::DFG::CSEPhase::getByValLoadElimination):
    (JSC::DFG::CSEPhase::checkFunctionElimination):
    (JSC::DFG::CSEPhase::checkExecutableElimination):
    (JSC::DFG::CSEPhase::checkStructureElimination):
    (JSC::DFG::CSEPhase::structureTransitionWatchpointElimination):
    (JSC::DFG::CSEPhase::putStructureStoreElimination):
    (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
    (JSC::DFG::CSEPhase::putByOffsetStoreElimination):
    (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
    (JSC::DFG::CSEPhase::checkArrayElimination):
    (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
    (JSC::DFG::CSEPhase::getMyScopeLoadElimination):
    (JSC::DFG::CSEPhase::getLocalLoadElimination):
    (JSC::DFG::CSEPhase::setLocalStoreElimination):
    (JSC::DFG::CSEPhase::performSubstitution):
    (JSC::DFG::CSEPhase::eliminateIrrelevantPhantomChildren):
    (JSC::DFG::CSEPhase::setReplacement):
    (JSC::DFG::CSEPhase::eliminate):
    (JSC::DFG::CSEPhase::performNodeCSE):
    (JSC::DFG::CSEPhase::performBlockCSE):
    (CSEPhase):
    * dfg/DFGCommon.cpp: Added.
    (DFG):
    (JSC::DFG::NodePointerTraits::dump):
    * dfg/DFGCommon.h:
    (DFG):
    (JSC::DFG::NodePointerTraits::defaultValue):
    (NodePointerTraits):
    (JSC::DFG::verboseCompilationEnabled):
    (JSC::DFG::shouldDumpGraphAtEachPhase):
    (JSC::DFG::validationEnabled):
    * dfg/DFGConstantFoldingPhase.cpp:
    (JSC::DFG::ConstantFoldingPhase::foldConstants):
    (JSC::DFG::ConstantFoldingPhase::isCapturedAtOrAfter):
    (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck):
    (JSC::DFG::ConstantFoldingPhase::paintUnreachableCode):
    * dfg/DFGDisassembler.cpp:
    (JSC::DFG::Disassembler::Disassembler):
    (JSC::DFG::Disassembler::createDumpList):
    (JSC::DFG::Disassembler::dumpDisassembly):
    * dfg/DFGDisassembler.h:
    (JSC::DFG::Disassembler::setForNode):
    (Disassembler):
    * dfg/DFGDriver.cpp:
    (JSC::DFG::compile):
    * dfg/DFGEdge.cpp: Added.
    (DFG):
    (JSC::DFG::Edge::dump):
    * dfg/DFGEdge.h:
    (JSC::DFG::Edge::Edge):
    (JSC::DFG::Edge::node):
    (JSC::DFG::Edge::operator*):
    (JSC::DFG::Edge::operator->):
    (Edge):
    (JSC::DFG::Edge::setNode):
    (JSC::DFG::Edge::useKind):
    (JSC::DFG::Edge::setUseKind):
    (JSC::DFG::Edge::isSet):
    (JSC::DFG::Edge::shift):
    (JSC::DFG::Edge::makeWord):
    (JSC::DFG::operator==):
    (JSC::DFG::operator!=):
    * dfg/DFGFixupPhase.cpp:
    (JSC::DFG::FixupPhase::fixupBlock):
    (JSC::DFG::FixupPhase::fixupNode):
    (JSC::DFG::FixupPhase::checkArray):
    (JSC::DFG::FixupPhase::blessArrayOperation):
    (JSC::DFG::FixupPhase::fixIntEdge):
    (JSC::DFG::FixupPhase::fixDoubleEdge):
    (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
    (FixupPhase):
    * dfg/DFGGenerationInfo.h:
    (JSC::DFG::GenerationInfo::GenerationInfo):
    (JSC::DFG::GenerationInfo::initConstant):
    (JSC::DFG::GenerationInfo::initInteger):
    (JSC::DFG::GenerationInfo::initJSValue):
    (JSC::DFG::GenerationInfo::initCell):
    (JSC::DFG::GenerationInfo::initBoolean):
    (JSC::DFG::GenerationInfo::initDouble):
    (JSC::DFG::GenerationInfo::initStorage):
    (GenerationInfo):
    (JSC::DFG::GenerationInfo::node):
    (JSC::DFG::GenerationInfo::noticeOSRBirth):
    (JSC::DFG::GenerationInfo::use):
    (JSC::DFG::GenerationInfo::appendFill):
    (JSC::DFG::GenerationInfo::appendSpill):
    * dfg/DFGGraph.cpp:
    (JSC::DFG::Graph::Graph):
    (JSC::DFG::Graph::~Graph):
    (DFG):
    (JSC::DFG::Graph::dumpCodeOrigin):
    (JSC::DFG::Graph::amountOfNodeWhiteSpace):
    (JSC::DFG::Graph::printNodeWhiteSpace):
    (JSC::DFG::Graph::dump):
    (JSC::DFG::Graph::dumpBlockHeader):
    (JSC::DFG::Graph::refChildren):
    (JSC::DFG::Graph::derefChildren):
    (JSC::DFG::Graph::predictArgumentTypes):
    (JSC::DFG::Graph::collectGarbage):
    (JSC::DFG::Graph::determineReachability):
    (JSC::DFG::Graph::resetExitStates):
    * dfg/DFGGraph.h:
    (Graph):
    (JSC::DFG::Graph::ref):
    (JSC::DFG::Graph::deref):
    (JSC::DFG::Graph::changeChild):
    (JSC::DFG::Graph::compareAndSwap):
    (JSC::DFG::Graph::clearAndDerefChild):
    (JSC::DFG::Graph::clearAndDerefChild1):
    (JSC::DFG::Graph::clearAndDerefChild2):
    (JSC::DFG::Graph::clearAndDerefChild3):
    (JSC::DFG::Graph::convertToConstant):
    (JSC::DFG::Graph::getJSConstantSpeculation):
    (JSC::DFG::Graph::addSpeculationMode):
    (JSC::DFG::Graph::valueAddSpeculationMode):
    (JSC::DFG::Graph::arithAddSpeculationMode):
    (JSC::DFG::Graph::addShouldSpeculateInteger):
    (JSC::DFG::Graph::mulShouldSpeculateInteger):
    (JSC::DFG::Graph::negateShouldSpeculateInteger):
    (JSC::DFG::Graph::isConstant):
    (JSC::DFG::Graph::isJSConstant):
    (JSC::DFG::Graph::isInt32Constant):
    (JSC::DFG::Graph::isDoubleConstant):
    (JSC::DFG::Graph::isNumberConstant):
    (JSC::DFG::Graph::isBooleanConstant):
    (JSC::DFG::Graph::isCellConstant):
    (JSC::DFG::Graph::isFunctionConstant):
    (JSC::DFG::Graph::isInternalFunctionConstant):
    (JSC::DFG::Graph::valueOfJSConstant):
    (JSC::DFG::Graph::valueOfInt32Constant):
    (JSC::DFG::Graph::valueOfNumberConstant):
    (JSC::DFG::Graph::valueOfBooleanConstant):
    (JSC::DFG::Graph::valueOfFunctionConstant):
    (JSC::DFG::Graph::valueProfileFor):
    (JSC::DFG::Graph::methodOfGettingAValueProfileFor):
    (JSC::DFG::Graph::numSuccessors):
    (JSC::DFG::Graph::successor):
    (JSC::DFG::Graph::successorForCondition):
    (JSC::DFG::Graph::isPredictedNumerical):
    (JSC::DFG::Graph::byValIsPure):
    (JSC::DFG::Graph::clobbersWorld):
    (JSC::DFG::Graph::varArgNumChildren):
    (JSC::DFG::Graph::numChildren):
    (JSC::DFG::Graph::varArgChild):
    (JSC::DFG::Graph::child):
    (JSC::DFG::Graph::voteNode):
    (JSC::DFG::Graph::voteChildren):
    (JSC::DFG::Graph::substitute):
    (JSC::DFG::Graph::substituteGetLocal):
    (JSC::DFG::Graph::addImmediateShouldSpeculateInteger):
    (JSC::DFG::Graph::mulImmediateShouldSpeculateInteger):
    * dfg/DFGInsertionSet.h:
    (JSC::DFG::Insertion::Insertion):
    (JSC::DFG::Insertion::element):
    (Insertion):
    (JSC::DFG::InsertionSet::insert):
    (InsertionSet):
    * dfg/DFGJITCompiler.cpp:
    * dfg/DFGJITCompiler.h:
    (JSC::DFG::JITCompiler::setForNode):
    (JSC::DFG::JITCompiler::addressOfDoubleConstant):
    (JSC::DFG::JITCompiler::noticeOSREntry):
    * dfg/DFGLongLivedState.cpp: Added.
    (DFG):
    (JSC::DFG::LongLivedState::LongLivedState):
    (JSC::DFG::LongLivedState::~LongLivedState):
    (JSC::DFG::LongLivedState::shrinkToFit):
    * dfg/DFGLongLivedState.h: Added.
    (DFG):
    (LongLivedState):
    * dfg/DFGMinifiedID.h:
    (JSC::DFG::MinifiedID::MinifiedID):
    (JSC::DFG::MinifiedID::node):
    * dfg/DFGMinifiedNode.cpp:
    (JSC::DFG::MinifiedNode::fromNode):
    * dfg/DFGMinifiedNode.h:
    (MinifiedNode):
    * dfg/DFGNode.cpp: Added.
    (DFG):
    (JSC::DFG::Node::index):
    (WTF):
    (WTF::printInternal):
    * dfg/DFGNode.h:
    (DFG):
    (JSC::DFG::Node::Node):
    (Node):
    (JSC::DFG::Node::convertToGetByOffset):
    (JSC::DFG::Node::convertToPutByOffset):
    (JSC::DFG::Node::ref):
    (JSC::DFG::Node::shouldSpeculateInteger):
    (JSC::DFG::Node::shouldSpeculateIntegerForArithmetic):
    (JSC::DFG::Node::shouldSpeculateIntegerExpectingDefined):
    (JSC::DFG::Node::shouldSpeculateDoubleForArithmetic):
    (JSC::DFG::Node::shouldSpeculateNumber):
    (JSC::DFG::Node::shouldSpeculateNumberExpectingDefined):
    (JSC::DFG::Node::shouldSpeculateFinalObject):
    (JSC::DFG::Node::shouldSpeculateArray):
    (JSC::DFG::Node::dumpChildren):
    (WTF):
    * dfg/DFGNodeAllocator.h: Added.
    (DFG):
    (operator new ):
    * dfg/DFGOSRExit.cpp:
    (JSC::DFG::OSRExit::OSRExit):
    * dfg/DFGOSRExit.h:
    (OSRExit):
    (SpeculationFailureDebugInfo):
    * dfg/DFGOSRExitCompiler.cpp:
    * dfg/DFGOSRExitCompiler32_64.cpp:
    (JSC::DFG::OSRExitCompiler::compileExit):
    * dfg/DFGOSRExitCompiler64.cpp:
    (JSC::DFG::OSRExitCompiler::compileExit):
    * dfg/DFGOperations.cpp:
    * dfg/DFGPhase.cpp:
    (DFG):
    (JSC::DFG::Phase::beginPhase):
    (JSC::DFG::Phase::endPhase):
    * dfg/DFGPhase.h:
    (Phase):
    (JSC::DFG::runAndLog):
    * dfg/DFGPredictionPropagationPhase.cpp:
    (JSC::DFG::PredictionPropagationPhase::setPrediction):
    (JSC::DFG::PredictionPropagationPhase::mergePrediction):
    (JSC::DFG::PredictionPropagationPhase::isNotNegZero):
    (JSC::DFG::PredictionPropagationPhase::isNotZero):
    (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwoForConstant):
    (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwoNonRecursive):
    (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwo):
    (JSC::DFG::PredictionPropagationPhase::propagate):
    (JSC::DFG::PredictionPropagationPhase::mergeDefaultFlags):
    (JSC::DFG::PredictionPropagationPhase::propagateForward):
    (JSC::DFG::PredictionPropagationPhase::propagateBackward):
    (JSC::DFG::PredictionPropagationPhase::doDoubleVoting):
    (PredictionPropagationPhase):
    (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
    * dfg/DFGScoreBoard.h:
    (JSC::DFG::ScoreBoard::ScoreBoard):
    (JSC::DFG::ScoreBoard::use):
    (JSC::DFG::ScoreBoard::useIfHasResult):
    (ScoreBoard):
    * dfg/DFGSilentRegisterSavePlan.h:
    (JSC::DFG::SilentRegisterSavePlan::SilentRegisterSavePlan):
    (JSC::DFG::SilentRegisterSavePlan::node):
    (SilentRegisterSavePlan):
    * dfg/DFGSlowPathGenerator.h:
    (JSC::DFG::SlowPathGenerator::SlowPathGenerator):
    (JSC::DFG::SlowPathGenerator::generate):
    (SlowPathGenerator):
    * dfg/DFGSpeculativeJIT.cpp:
    (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
    (JSC::DFG::SpeculativeJIT::speculationCheck):
    (JSC::DFG::SpeculativeJIT::speculationWatchpoint):
    (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward):
    (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):
    (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
    (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
    (JSC::DFG::SpeculativeJIT::silentSavePlanForFPR):
    (JSC::DFG::SpeculativeJIT::silentSpill):
    (JSC::DFG::SpeculativeJIT::silentFill):
    (JSC::DFG::SpeculativeJIT::checkArray):
    (JSC::DFG::SpeculativeJIT::arrayify):
    (JSC::DFG::SpeculativeJIT::fillStorage):
    (JSC::DFG::SpeculativeJIT::useChildren):
    (JSC::DFG::SpeculativeJIT::isStrictInt32):
    (JSC::DFG::SpeculativeJIT::isKnownInteger):
    (JSC::DFG::SpeculativeJIT::isKnownNumeric):
    (JSC::DFG::SpeculativeJIT::isKnownCell):
    (JSC::DFG::SpeculativeJIT::isKnownNotCell):
    (JSC::DFG::SpeculativeJIT::isKnownNotInteger):
    (JSC::DFG::SpeculativeJIT::isKnownNotNumber):
    (JSC::DFG::SpeculativeJIT::writeBarrier):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeCompare):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeStrictEq):
    (JSC::DFG::GPRTemporary::GPRTemporary):
    (JSC::DFG::FPRTemporary::FPRTemporary):
    (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
    (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
    (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
    (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
    (JSC::DFG::SpeculativeJIT::noticeOSRBirth):
    (JSC::DFG::SpeculativeJIT::compileMovHint):
    (JSC::DFG::SpeculativeJIT::compile):
    (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
    (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
    (JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
    (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
    (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
    (JSC::DFG::SpeculativeJIT::checkGeneratedTypeForToInt32):
    (JSC::DFG::SpeculativeJIT::compileValueToInt32):
    (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
    (JSC::DFG::SpeculativeJIT::compileDoubleAsInt32):
    (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
    (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
    (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
    (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
    (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
    (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject):
    (JSC::DFG::SpeculativeJIT::compileInstanceOf):
    (JSC::DFG::SpeculativeJIT::compileSoftModulo):
    (JSC::DFG::SpeculativeJIT::compileAdd):
    (JSC::DFG::SpeculativeJIT::compileArithSub):
    (JSC::DFG::SpeculativeJIT::compileArithNegate):
    (JSC::DFG::SpeculativeJIT::compileArithMul):
    (JSC::DFG::SpeculativeJIT::compileIntegerArithDivForX86):
    (JSC::DFG::SpeculativeJIT::compileArithMod):
    (JSC::DFG::SpeculativeJIT::compare):
    (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
    (JSC::DFG::SpeculativeJIT::compileStrictEq):
    (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
    (JSC::DFG::SpeculativeJIT::compileGetByValOnArguments):
    (JSC::DFG::SpeculativeJIT::compileGetArgumentsLength):
    (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
    (JSC::DFG::SpeculativeJIT::compileNewFunctionNoCheck):
    (JSC::DFG::SpeculativeJIT::compileNewFunctionExpression):
    (JSC::DFG::SpeculativeJIT::compileRegExpExec):
    (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage):
    (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage):
    * dfg/DFGSpeculativeJIT.h:
    (SpeculativeJIT):
    (JSC::DFG::SpeculativeJIT::canReuse):
    (JSC::DFG::SpeculativeJIT::isFilled):
    (JSC::DFG::SpeculativeJIT::isFilledDouble):
    (JSC::DFG::SpeculativeJIT::use):
    (JSC::DFG::SpeculativeJIT::isConstant):
    (JSC::DFG::SpeculativeJIT::isJSConstant):
    (JSC::DFG::SpeculativeJIT::isInt32Constant):
    (JSC::DFG::SpeculativeJIT::isDoubleConstant):
    (JSC::DFG::SpeculativeJIT::isNumberConstant):
    (JSC::DFG::SpeculativeJIT::isBooleanConstant):
    (JSC::DFG::SpeculativeJIT::isFunctionConstant):
    (JSC::DFG::SpeculativeJIT::valueOfInt32Constant):
    (JSC::DFG::SpeculativeJIT::valueOfNumberConstant):
    (JSC::DFG::SpeculativeJIT::valueOfNumberConstantAsInt32):
    (JSC::DFG::SpeculativeJIT::addressOfDoubleConstant):
    (JSC::DFG::SpeculativeJIT::valueOfJSConstant):
    (JSC::DFG::SpeculativeJIT::valueOfBooleanConstant):
    (JSC::DFG::SpeculativeJIT::valueOfFunctionConstant):
    (JSC::DFG::SpeculativeJIT::isNullConstant):
    (JSC::DFG::SpeculativeJIT::valueOfJSConstantAsImm64):
    (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
    (JSC::DFG::SpeculativeJIT::integerResult):
    (JSC::DFG::SpeculativeJIT::noResult):
    (JSC::DFG::SpeculativeJIT::cellResult):
    (JSC::DFG::SpeculativeJIT::booleanResult):
    (JSC::DFG::SpeculativeJIT::jsValueResult):
    (JSC::DFG::SpeculativeJIT::storageResult):
    (JSC::DFG::SpeculativeJIT::doubleResult):
    (JSC::DFG::SpeculativeJIT::initConstantInfo):
    (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
    (JSC::DFG::SpeculativeJIT::isInteger):
    (JSC::DFG::SpeculativeJIT::temporaryRegisterForPutByVal):
    (JSC::DFG::SpeculativeJIT::emitAllocateBasicStorage):
    (JSC::DFG::SpeculativeJIT::setNodeForOperand):
    (JSC::DFG::IntegerOperand::IntegerOperand):
    (JSC::DFG::IntegerOperand::node):
    (JSC::DFG::IntegerOperand::gpr):
    (JSC::DFG::IntegerOperand::use):
    (IntegerOperand):
    (JSC::DFG::DoubleOperand::DoubleOperand):
    (JSC::DFG::DoubleOperand::node):
    (JSC::DFG::DoubleOperand::fpr):
    (JSC::DFG::DoubleOperand::use):
    (DoubleOperand):
    (JSC::DFG::JSValueOperand::JSValueOperand):
    (JSC::DFG::JSValueOperand::node):
    (JSC::DFG::JSValueOperand::gpr):
    (JSC::DFG::JSValueOperand::fill):
    (JSC::DFG::JSValueOperand::use):
    (JSValueOperand):
    (JSC::DFG::StorageOperand::StorageOperand):
    (JSC::DFG::StorageOperand::node):
    (JSC::DFG::StorageOperand::gpr):
    (JSC::DFG::StorageOperand::use):
    (StorageOperand):
    (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
    (JSC::DFG::SpeculateIntegerOperand::node):
    (JSC::DFG::SpeculateIntegerOperand::gpr):
    (JSC::DFG::SpeculateIntegerOperand::use):
    (SpeculateIntegerOperand):
    (JSC::DFG::SpeculateStrictInt32Operand::SpeculateStrictInt32Operand):
    (JSC::DFG::SpeculateStrictInt32Operand::node):
    (JSC::DFG::SpeculateStrictInt32Operand::gpr):
    (JSC::DFG::SpeculateStrictInt32Operand::use):
    (SpeculateStrictInt32Operand):
    (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
    (JSC::DFG::SpeculateDoubleOperand::node):
    (JSC::DFG::SpeculateDoubleOperand::fpr):
    (JSC::DFG::SpeculateDoubleOperand::use):
    (SpeculateDoubleOperand):
    (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
    (JSC::DFG::SpeculateCellOperand::node):
    (JSC::DFG::SpeculateCellOperand::gpr):
    (JSC::DFG::SpeculateCellOperand::use):
    (SpeculateCellOperand):
    (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
    (JSC::DFG::SpeculateBooleanOperand::node):
    (JSC::DFG::SpeculateBooleanOperand::gpr):
    (JSC::DFG::SpeculateBooleanOperand::use):
    (SpeculateBooleanOperand):
    * dfg/DFGSpeculativeJIT32_64.cpp:
    (JSC::DFG::SpeculativeJIT::fillInteger):
    (JSC::DFG::SpeculativeJIT::fillDouble):
    (JSC::DFG::SpeculativeJIT::fillJSValue):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
    (JSC::DFG::SpeculativeJIT::cachedPutById):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
    (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
    (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
    (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
    (JSC::DFG::SpeculativeJIT::emitCall):
    (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
    (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
    (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
    (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
    (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
    (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
    (JSC::DFG::SpeculativeJIT::compileObjectEquality):
    (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
    (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
    (JSC::DFG::SpeculativeJIT::compileIntegerCompare):
    (JSC::DFG::SpeculativeJIT::compileDoubleCompare):
    (JSC::DFG::SpeculativeJIT::compileValueAdd):
    (JSC::DFG::SpeculativeJIT::compileNonStringCellOrOtherLogicalNot):
    (JSC::DFG::SpeculativeJIT::compileLogicalNot):
    (JSC::DFG::SpeculativeJIT::emitNonStringCellOrOtherBranch):
    (JSC::DFG::SpeculativeJIT::emitBranch):
    (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal):
    (JSC::DFG::SpeculativeJIT::compile):
    * dfg/DFGSpeculativeJIT64.cpp:
    (JSC::DFG::SpeculativeJIT::fillInteger):
    (JSC::DFG::SpeculativeJIT::fillDouble):
    (JSC::DFG::SpeculativeJIT::fillJSValue):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
    (JSC::DFG::SpeculativeJIT::cachedPutById):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
    (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
    (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
    (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
    (JSC::DFG::SpeculativeJIT::emitCall):
    (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
    (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
    (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
    (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
    (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
    (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
    (JSC::DFG::SpeculativeJIT::compileObjectEquality):
    (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
    (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
    (JSC::DFG::SpeculativeJIT::compileIntegerCompare):
    (JSC::DFG::SpeculativeJIT::compileDoubleCompare):
    (JSC::DFG::SpeculativeJIT::compileValueAdd):
    (JSC::DFG::SpeculativeJIT::compileNonStringCellOrOtherLogicalNot):
    (JSC::DFG::SpeculativeJIT::compileLogicalNot):
    (JSC::DFG::SpeculativeJIT::emitNonStringCellOrOtherBranch):
    (JSC::DFG::SpeculativeJIT::emitBranch):
    (JSC::DFG::SpeculativeJIT::compile):
    * dfg/DFGStructureAbstractValue.h:
    (StructureAbstractValue):
    * dfg/DFGStructureCheckHoistingPhase.cpp:
    (JSC::DFG::StructureCheckHoistingPhase::run):
    * dfg/DFGValidate.cpp:
    (DFG):
    (Validate):
    (JSC::DFG::Validate::validate):
    (JSC::DFG::Validate::reportValidationContext):
    * dfg/DFGValidate.h:
    * dfg/DFGValueSource.cpp:
    (JSC::DFG::ValueSource::dump):
    * dfg/DFGValueSource.h:
    (JSC::DFG::ValueSource::ValueSource):
    * dfg/DFGVirtualRegisterAllocationPhase.cpp:
    (JSC::DFG::VirtualRegisterAllocationPhase::run):
    * runtime/FunctionExecutableDump.cpp: Added.
    (JSC):
    (JSC::FunctionExecutableDump::dump):
    * runtime/FunctionExecutableDump.h: Added.
    (JSC):
    (FunctionExecutableDump):
    (JSC::FunctionExecutableDump::FunctionExecutableDump):
    * runtime/JSGlobalData.cpp:
    (JSC::JSGlobalData::JSGlobalData):
    * runtime/JSGlobalData.h:
    (JSC):
    (DFG):
    (JSGlobalData):
    * runtime/Options.h:
    (JSC):
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@141069 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    8ff092fc