• oliver@apple.com's avatar
    fourthTier: DFG should refer to BasicBlocks by BasicBlock* and not BlockIndex · 426f5b02
    oliver@apple.com authored
    https://bugs.webkit.org/show_bug.cgi?id=118339
    
    Reviewed by Michael Saboff.
    
    This accomplishes two goals:
    
    1) Simplifies a bunch of code. You can now much more directly get to a successor
       or predecessor, since you just get the pointer directly. The backend(s) always
       hold onto a pointer to the block they're on, so you don't have to do work to
       get the block from the index.
    
    2) It allows for the possibility of inserting blocks into the program.
       Previously, if you did that, you'd have to edit all references to blocks since
       those references would have outdated indexing after an insertion. Now, if you
       change the indexing, you just have to invalidate some analyses and make sure
       that you change each block's BasicBlock::index accordingly.
    
    * dfg/DFGAbstractState.cpp:
    (JSC::DFG::AbstractState::initialize):
    (JSC::DFG::AbstractState::endBasicBlock):
    (JSC::DFG::AbstractState::mergeToSuccessors):
    * dfg/DFGAbstractState.h:
    (AbstractState):
    * dfg/DFGArgumentsSimplificationPhase.cpp:
    (JSC::DFG::ArgumentsSimplificationPhase::run):
    * dfg/DFGBackwardsPropagationPhase.cpp:
    (JSC::DFG::BackwardsPropagationPhase::run):
    * dfg/DFGBasicBlock.h:
    (DFG):
    (JSC::DFG::BasicBlock::BasicBlock):
    (JSC::DFG::BasicBlock::size):
    (JSC::DFG::BasicBlock::isEmpty):
    (JSC::DFG::BasicBlock::at):
    (JSC::DFG::BasicBlock::operator[]):
    (JSC::DFG::BasicBlock::last):
    (JSC::DFG::BasicBlock::resize):
    (JSC::DFG::BasicBlock::grow):
    (BasicBlock):
    (JSC::DFG::BasicBlock::append):
    (JSC::DFG::BasicBlock::numSuccessors):
    (JSC::DFG::BasicBlock::successor):
    (JSC::DFG::BasicBlock::successorForCondition):
    (JSC::DFG::BasicBlock::dump):
    (UnlinkedBlock):
    (JSC::DFG::UnlinkedBlock::UnlinkedBlock):
    (JSC::DFG::getBytecodeBeginForBlock):
    (JSC::DFG::blockForBytecodeOffset):
    * dfg/DFGByteCodeParser.cpp:
    (ByteCodeParser):
    (InlineStackEntry):
    (JSC::DFG::ByteCodeParser::handleInlining):
    (JSC::DFG::ByteCodeParser::parseBlock):
    (JSC::DFG::ByteCodeParser::linkBlock):
    (JSC::DFG::ByteCodeParser::linkBlocks):
    (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
    (JSC::DFG::ByteCodeParser::parseCodeBlock):
    (JSC::DFG::ByteCodeParser::parse):
    * dfg/DFGCFAPhase.cpp:
    (JSC::DFG::CFAPhase::performBlockCFA):
    (JSC::DFG::CFAPhase::performForwardCFA):
    * dfg/DFGCFGSimplificationPhase.cpp:
    (JSC::DFG::CFGSimplificationPhase::run):
    (JSC::DFG::CFGSimplificationPhase::convertToJump):
    * dfg/DFGCPSRethreadingPhase.cpp:
    (JSC::DFG::CPSRethreadingPhase::freeUnnecessaryNodes):
    (JSC::DFG::CPSRethreadingPhase::canonicalizeLocalsInBlocks):
    (JSC::DFG::CPSRethreadingPhase::propagatePhis):
    (CPSRethreadingPhase):
    * dfg/DFGCSEPhase.cpp:
    (JSC::DFG::CSEPhase::run):
    * dfg/DFGConstantFoldingPhase.cpp:
    (JSC::DFG::ConstantFoldingPhase::run):
    (JSC::DFG::ConstantFoldingPhase::foldConstants):
    * dfg/DFGDCEPhase.cpp:
    (JSC::DFG::DCEPhase::run):
    * dfg/DFGDisassembler.cpp:
    (JSC::DFG::Disassembler::Disassembler):
    (JSC::DFG::Disassembler::createDumpList):
    * dfg/DFGDisassembler.h:
    (JSC::DFG::Disassembler::setForBlockIndex):
    * dfg/DFGDominators.cpp:
    (JSC::DFG::Dominators::compute):
    (JSC::DFG::Dominators::iterateForBlock):
    * dfg/DFGDominators.h:
    (JSC::DFG::Dominators::dominates):
    * dfg/DFGFixupPhase.cpp:
    (JSC::DFG::FixupPhase::run):
    (JSC::DFG::FixupPhase::fixupNode):
    * dfg/DFGGraph.cpp:
    (JSC::DFG::Graph::dump):
    (JSC::DFG::Graph::dumpBlockHeader):
    (JSC::DFG::Graph::handleSuccessor):
    (JSC::DFG::Graph::determineReachability):
    (JSC::DFG::Graph::resetReachability):
    * dfg/DFGGraph.h:
    (JSC::DFG::Graph::numBlocks):
    (JSC::DFG::Graph::block):
    (JSC::DFG::Graph::lastBlock):
    (Graph):
    (JSC::DFG::Graph::appendBlock):
    (JSC::DFG::Graph::killBlock):
    (DFG):
    * dfg/DFGJITCompiler.cpp:
    (JSC::DFG::JITCompiler::JITCompiler):
    (JSC::DFG::JITCompiler::link):
    * dfg/DFGJITCompiler.h:
    (JSC::DFG::JITCompiler::setForBlockIndex):
    * dfg/DFGNaturalLoops.cpp:
    (JSC::DFG::NaturalLoop::dump):
    (JSC::DFG::NaturalLoops::compute):
    (JSC::DFG::NaturalLoops::loopsOf):
    * dfg/DFGNaturalLoops.h:
    (JSC::DFG::NaturalLoop::NaturalLoop):
    (JSC::DFG::NaturalLoop::addBlock):
    (JSC::DFG::NaturalLoop::header):
    (JSC::DFG::NaturalLoop::at):
    (JSC::DFG::NaturalLoop::operator[]):
    (JSC::DFG::NaturalLoop::contains):
    (NaturalLoop):
    (JSC::DFG::NaturalLoops::headerOf):
    (NaturalLoops):
    * dfg/DFGNode.h:
    (DFG):
    (JSC::DFG::SwitchCase::SwitchCase):
    (JSC::DFG::SwitchCase::withBytecodeIndex):
    (SwitchCase):
    (JSC::DFG::SwitchCase::targetBytecodeIndex):
    (JSC::DFG::SwitchData::SwitchData):
    (JSC::DFG::SwitchData::setFallThroughBytecodeIndex):
    (JSC::DFG::SwitchData::fallThroughBytecodeIndex):
    (SwitchData):
    (JSC::DFG::Node::setTakenBlock):
    (JSC::DFG::Node::setNotTakenBlock):
    (JSC::DFG::Node::takenBlock):
    (JSC::DFG::Node::notTakenBlock):
    (JSC::DFG::Node::successor):
    (JSC::DFG::Node::successorForCondition):
    * dfg/DFGPredictionInjectionPhase.cpp:
    (JSC::DFG::PredictionInjectionPhase::run):
    * dfg/DFGPredictionPropagationPhase.cpp:
    (JSC::DFG::PredictionPropagationPhase::propagateForward):
    (JSC::DFG::PredictionPropagationPhase::propagateBackward):
    (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
    * dfg/DFGSpeculativeJIT.cpp:
    (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeCompare):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeStrictEq):
    (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
    (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
    (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
    (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
    (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
    (JSC::DFG::SpeculativeJIT::compile):
    (JSC::DFG::SpeculativeJIT::createOSREntries):
    (JSC::DFG::SpeculativeJIT::linkOSREntries):
    (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
    (JSC::DFG::SpeculativeJIT::compileStrictEq):
    (JSC::DFG::SpeculativeJIT::compileRegExpExec):
    (JSC::DFG::SpeculativeJIT::addBranch):
    (JSC::DFG::SpeculativeJIT::linkBranches):
    * dfg/DFGSpeculativeJIT.h:
    (JSC::DFG::SpeculativeJIT::nextBlock):
    (SpeculativeJIT):
    (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
    (JSC::DFG::SpeculativeJIT::branchDouble):
    (JSC::DFG::SpeculativeJIT::branchDoubleNonZero):
    (JSC::DFG::SpeculativeJIT::branch32):
    (JSC::DFG::SpeculativeJIT::branchTest32):
    (JSC::DFG::SpeculativeJIT::branch64):
    (JSC::DFG::SpeculativeJIT::branch8):
    (JSC::DFG::SpeculativeJIT::branchPtr):
    (JSC::DFG::SpeculativeJIT::branchTestPtr):
    (JSC::DFG::SpeculativeJIT::branchTest8):
    (JSC::DFG::SpeculativeJIT::jump):
    (JSC::DFG::SpeculativeJIT::addBranch):
    (JSC::DFG::SpeculativeJIT::StringSwitchCase::StringSwitchCase):
    (StringSwitchCase):
    (JSC::DFG::SpeculativeJIT::BranchRecord::BranchRecord):
    (BranchRecord):
    * dfg/DFGSpeculativeJIT32_64.cpp:
    (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
    (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
    (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
    (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
    (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
    (JSC::DFG::SpeculativeJIT::emitBranch):
    (JSC::DFG::SpeculativeJIT::compile):
    * dfg/DFGSpeculativeJIT64.cpp:
    (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
    (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
    (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
    (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
    (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
    (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
    (JSC::DFG::SpeculativeJIT::emitBranch):
    (JSC::DFG::SpeculativeJIT::compile):
    * dfg/DFGTypeCheckHoistingPhase.cpp:
    (JSC::DFG::TypeCheckHoistingPhase::run):
    (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantStructureChecks):
    (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantArrayChecks):
    (JSC::DFG::TypeCheckHoistingPhase::disableHoistingAcrossOSREntries):
    * dfg/DFGUnificationPhase.cpp:
    (JSC::DFG::UnificationPhase::run):
    * dfg/DFGValidate.cpp:
    (JSC::DFG::Validate::validate):
    (JSC::DFG::Validate::checkOperand):
    (JSC::DFG::Validate::reportValidationContext):
    * dfg/DFGVirtualRegisterAllocationPhase.cpp:
    (JSC::DFG::VirtualRegisterAllocationPhase::run):
    * ftl/FTLCapabilities.cpp:
    (JSC::FTL::canCompile):
    * ftl/FTLLowerDFGToLLVM.cpp:
    (JSC::FTL::LowerDFGToLLVM::LowerDFGToLLVM):
    (JSC::FTL::LowerDFGToLLVM::lower):
    (JSC::FTL::LowerDFGToLLVM::compileBlock):
    (JSC::FTL::LowerDFGToLLVM::compileJump):
    (JSC::FTL::LowerDFGToLLVM::compileBranch):
    (JSC::FTL::LowerDFGToLLVM::lowBlock):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@153267 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    426f5b02