• mhahnenberg@apple.com's avatar
    op_to_this shouldn't use value profiling · c5684714
    mhahnenberg@apple.com authored
    https://bugs.webkit.org/show_bug.cgi?id=121920
    
    Reviewed by Geoffrey Garen.
    
    Source/JavaScriptCore:
    
    Currently it's the only opcode that uses m_singletonValue, which is unnecessary. Our current plan is
    to remove m_singletonValue so that GenGC can have a simpler story for handling CodeBlocks/FunctionExecutables
    during nursery collections.
    
    This patch adds an inline cache for the Structure of to_this so it no longer depends on the ValueProfile's
    m_singletonValue. Since nobody uses m_singletonValue now, this patch also removes m_singletonValue from
    ValueProfile.
    
    * bytecode/CodeBlock.cpp:
    (JSC::CodeBlock::CodeBlock):
    (JSC::CodeBlock::finalizeUnconditionally):
    (JSC::CodeBlock::stronglyVisitStrongReferences):
    (JSC::CodeBlock::updateAllPredictionsAndCountLiveness):
    (JSC::CodeBlock::updateAllValueProfilePredictions):
    (JSC::CodeBlock::updateAllPredictions):
    (JSC::CodeBlock::shouldOptimizeNow):
    * bytecode/CodeBlock.h:
    (JSC::CodeBlock::updateAllValueProfilePredictions):
    (JSC::CodeBlock::updateAllPredictions):
    * bytecode/LazyOperandValueProfile.cpp:
    (JSC::CompressedLazyOperandValueProfileHolder::computeUpdatedPredictions):
    * bytecode/LazyOperandValueProfile.h:
    * bytecode/ValueProfile.h:
    (JSC::ValueProfileBase::ValueProfileBase):
    (JSC::ValueProfileBase::briefDescription):
    (JSC::ValueProfileBase::dump):
    (JSC::ValueProfileBase::computeUpdatedPrediction):
    * bytecompiler/BytecodeGenerator.cpp:
    (JSC::BytecodeGenerator::BytecodeGenerator):
    * dfg/DFGByteCodeParser.cpp:
    (JSC::DFG::ByteCodeParser::parseBlock):
    * jit/JITOpcodes.cpp:
    (JSC::JIT::emit_op_to_this):
    (JSC::JIT::emitSlow_op_to_this):
    * jit/JITOpcodes32_64.cpp:
    (JSC::JIT::emit_op_to_this):
    (JSC::JIT::emitSlow_op_to_this):
    * llint/LowLevelInterpreter32_64.asm:
    * llint/LowLevelInterpreter64.asm:
    * runtime/CommonSlowPaths.cpp:
    (JSC::SLOW_PATH_DECL):
    
    LayoutTests:
    
    Updated a couple tests that waited for two DFG compiles, but with this patch we
    don't do two compiles any more, so we don't want to wait forever.
    
    * js/script-tests/dfg-convert-this-polymorphic-object-then-exit-on-other.js:
    * js/script-tests/dfg-convert-this-polymorphic-object-then-exit-on-string.js:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@156468 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    c5684714
DFGByteCodeParser.cpp 156 KB