Skip to content
  • fpizlo@apple.com's avatar
    DFG::operationNewArray is unnecessarily slow, and may use the wrong array · 6c89cd3f
    fpizlo@apple.com authored
    prototype when inlined
    https://bugs.webkit.org/show_bug.cgi?id=89821
    
    Source/JavaScriptCore: 
    
    Reviewed by Geoffrey Garen.
            
    Fixes all array allocations to use the right structure, and hence the right prototype. Adds
    inlining of new Array(...) with a non-zero number of arguments. Optimizes allocations of
    empty arrays.
    
    * dfg/DFGAbstractState.cpp:
    (JSC::DFG::AbstractState::execute):
    * dfg/DFGByteCodeParser.cpp:
    (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
    * dfg/DFGCCallHelpers.h:
    (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
    (CCallHelpers):
    * dfg/DFGNodeType.h:
    (DFG):
    * dfg/DFGOperations.cpp:
    * dfg/DFGOperations.h:
    * dfg/DFGPredictionPropagationPhase.cpp:
    (JSC::DFG::PredictionPropagationPhase::propagate):
    * dfg/DFGSpeculativeJIT.h:
    (JSC::DFG::SpeculativeJIT::callOperation):
    * dfg/DFGSpeculativeJIT32_64.cpp:
    (JSC::DFG::SpeculativeJIT::compile):
    * dfg/DFGSpeculativeJIT64.cpp:
    (JSC::DFG::SpeculativeJIT::compile):
    * runtime/JSArray.h:
    (JSC):
    (JSC::constructArray):
    * runtime/JSGlobalObject.h:
    (JSC):
    (JSC::constructArray):
    
    LayoutTests: 
    
    Rubber stamped by Geoffrey Garen.
    
    * fast/js/dfg-cross-global-object-inline-new-array-expected.txt: Added.
    * fast/js/dfg-cross-global-object-inline-new-array-literal-expected.txt: Added.
    * fast/js/dfg-cross-global-object-inline-new-array-literal-with-variables-expected.txt: Added.
    * fast/js/dfg-cross-global-object-inline-new-array-literal-with-variables.html: Added.
    * fast/js/dfg-cross-global-object-inline-new-array-literal.html: Added.
    * fast/js/dfg-cross-global-object-inline-new-array-with-elements-expected.txt: Added.
    * fast/js/dfg-cross-global-object-inline-new-array-with-elements.html: Added.
    * fast/js/dfg-cross-global-object-inline-new-array-with-size-expected.txt: Added.
    * fast/js/dfg-cross-global-object-inline-new-array-with-size.html: Added.
    * fast/js/dfg-cross-global-object-inline-new-array.html: Added.
    * fast/js/script-tests/cross-global-object-inline-global-var.js:
    (done):
    * fast/js/script-tests/dfg-cross-global-object-inline-new-array-literal-with-variables.js: Added.
    (foo):
    (done):
    (doit):
    * fast/js/script-tests/dfg-cross-global-object-inline-new-array-literal.js: Added.
    (foo):
    (done):
    (doit):
    * fast/js/script-tests/dfg-cross-global-object-inline-new-array-with-elements.js: Added.
    (foo):
    (done):
    (doit):
    * fast/js/script-tests/dfg-cross-global-object-inline-new-array-with-size.js: Added.
    (foo):
    (done):
    (doit):
    * fast/js/script-tests/dfg-cross-global-object-inline-new-array.js: Added.
    (foo):
    (done):
    (doit):
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@121280 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    6c89cd3f