Skip to content
  • oliver@apple.com's avatar
    fourthTier: DFG should support op_switch_imm · 9b7647ba
    oliver@apple.com authored
    https://bugs.webkit.org/show_bug.cgi?id=117559
    
    Reviewed by Oliver Hunt.
    
    Implement integer (i.e. immediate) switches in the DFG. Reduce the minimum
    threshold for using op_switch.
    
    Also get rid of edge code support, since we haven't used it in the year since
    I introduced it. It was supposed to allow us to break critical edges late in
    the backend, thus enabling global register allocation from an SSA-form graph.
    But we aren't doing that so I figure we should just kill the code for now. It
    would have made implementing switch harder.
    
    * assembler/AbstractMacroAssembler.h:
    (JSC::AbstractMacroAssembler::timesPtr):
    * assembler/MacroAssemblerCodeRef.h:
    (JSC::MacroAssemblerCodePtr::dumpWithName):
    (MacroAssemblerCodePtr):
    (JSC::MacroAssemblerCodePtr::dump):
    (MacroAssemblerCodeRef):
    (JSC::MacroAssemblerCodeRef::dump):
    * bytecode/CodeBlock.cpp:
    (JSC::CodeBlock::shrinkToFit):
    * bytecode/JumpTable.h:
    (SimpleJumpTable):
    (JSC::SimpleJumpTable::clear):
    * dfg/DFGAbstractState.cpp:
    (JSC::DFG::AbstractState::executeEffects):
    (JSC::DFG::AbstractState::mergeToSuccessors):
    * dfg/DFGBackwardsPropagationPhase.cpp:
    (JSC::DFG::BackwardsPropagationPhase::propagate):
    * dfg/DFGByteCodeParser.cpp:
    (InlineStackEntry):
    (JSC::DFG::ByteCodeParser::parseBlock):
    (JSC::DFG::ByteCodeParser::linkBlock):
    (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
    * dfg/DFGCapabilities.cpp:
    (JSC::DFG::capabilityLevel):
    * dfg/DFGCommon.h:
    * dfg/DFGFixupPhase.cpp:
    (JSC::DFG::FixupPhase::fixupNode):
    * dfg/DFGGraph.cpp:
    (JSC::DFG::Graph::dump):
    (JSC::DFG::Graph::determineReachability):
    * dfg/DFGGraph.h:
    (Graph):
    * dfg/DFGJITCompiler.cpp:
    (JSC::DFG::JITCompiler::JITCompiler):
    (JSC::DFG::JITCompiler::link):
    * dfg/DFGJITCompiler.h:
    (JITCompiler):
    (JSC::DFG::JITCompiler::blockHeads):
    * dfg/DFGNode.h:
    (DFG):
    (JSC::DFG::SwitchCase::SwitchCase):
    (SwitchCase):
    (SwitchData):
    (JSC::DFG::SwitchData::SwitchData):
    (Node):
    (JSC::DFG::Node::isSwitch):
    (JSC::DFG::Node::isTerminal):
    (JSC::DFG::Node::switchData):
    (JSC::DFG::Node::numSuccessors):
    (JSC::DFG::Node::successor):
    * dfg/DFGNodeType.h:
    (DFG):
    * dfg/DFGOperations.cpp:
    * dfg/DFGOperations.h:
    * dfg/DFGPredictionPropagationPhase.cpp:
    (JSC::DFG::PredictionPropagationPhase::propagate):
    * dfg/DFGSpeculativeJIT.cpp:
    (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
    (JSC::DFG::SpeculativeJIT::compile):
    (JSC::DFG::SpeculativeJIT::createOSREntries):
    (JSC::DFG::SpeculativeJIT::emitSwitchImmIntJump):
    (DFG):
    (JSC::DFG::SpeculativeJIT::emitSwitchImm):
    (JSC::DFG::SpeculativeJIT::emitSwitch):
    (JSC::DFG::SpeculativeJIT::linkBranches):
    * dfg/DFGSpeculativeJIT.h:
    (JSC::DFG::SpeculativeJIT::callOperation):
    (SpeculativeJIT):
    (JSC::DFG::SpeculativeJIT::branchDouble):
    (JSC::DFG::SpeculativeJIT::branchDoubleNonZero):
    (JSC::DFG::SpeculativeJIT::branch32):
    (JSC::DFG::SpeculativeJIT::branchTest32):
    (JSC::DFG::SpeculativeJIT::branch64):
    (JSC::DFG::SpeculativeJIT::branchPtr):
    (JSC::DFG::SpeculativeJIT::branchTestPtr):
    (JSC::DFG::SpeculativeJIT::branchTest8):
    (JSC::DFG::SpeculativeJIT::jump):
    * dfg/DFGSpeculativeJIT32_64.cpp:
    (JSC::DFG::SpeculativeJIT::compile):
    * dfg/DFGSpeculativeJIT64.cpp:
    (JSC::DFG::SpeculativeJIT::compile):
    * jit/JITStubs.cpp:
    (JSC::DEFINE_STUB_FUNCTION):
    * parser/Nodes.h:
    (CaseBlockNode):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@153228 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    9b7647ba