Ignore:
Timestamp:
Dec 16, 2011, 3:36:10 PM (13 years ago)
Author:
[email protected]
Message:

PutByVal[Alias] unnecessarily reloads the storage buffer
https://bugs.webkit.org/show_bug.cgi?id=74747

Reviewed by Gavin Barraclough.

Make PutByVal use GetIndexedStorage to load the storage buffer.
This required switching PutByVal to a vararg node (which is
responsible for most of the noise in this patch). This fixes the
remaining portion of the kraken regression caused by the GetByVal
storage load elimination, and a 1-5% win on some of the sub tests of
the typed array benchmark at:
http://stepheneb.github.com/webgl-matrix-benchmarks/matrix_benchmark.html

  • dfg/DFGAbstractState.cpp:

(JSC::DFG::AbstractState::execute):

  • dfg/DFGByteCodeParser.cpp:

(JSC::DFG::ByteCodeParser::parseBlock):

  • dfg/DFGNode.h:
  • dfg/DFGPropagator.cpp:

(JSC::DFG::Propagator::propagateArithNodeFlags):
(JSC::DFG::Propagator::fixupNode):
(JSC::DFG::Propagator::byValIndexIsPure):
(JSC::DFG::Propagator::clobbersWorld):
(JSC::DFG::Propagator::getByValLoadElimination):
(JSC::DFG::Propagator::checkStructureLoadElimination):
(JSC::DFG::Propagator::getByOffsetLoadElimination):
(JSC::DFG::Propagator::getPropertyStorageLoadElimination):
(JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):
(JSC::DFG::Propagator::performNodeCSE):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
(JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
(JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):

  • dfg/DFGSpeculativeJIT.h:
  • dfg/DFGSpeculativeJIT32_64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

  • dfg/DFGSpeculativeJIT64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/dfg/DFGNode.h

    r102442 r103120  
    226226    /* this must be the directly subsequent property put. */\
    227227    macro(GetByVal, NodeResultJS | NodeMustGenerate | NodeMightClobber) \
    228     macro(PutByVal, NodeMustGenerate | NodeClobbersWorld) \
    229     macro(PutByValAlias, NodeMustGenerate | NodeClobbersWorld) \
     228    macro(PutByVal, NodeMustGenerate | NodeClobbersWorld | NodeHasVarArgs) \
     229    macro(PutByValAlias, NodeMustGenerate | NodeClobbersWorld | NodeHasVarArgs) \
    230230    macro(GetById, NodeResultJS | NodeMustGenerate | NodeClobbersWorld) \
    231231    macro(PutById, NodeMustGenerate | NodeClobbersWorld) \
     
    234234    macro(PutStructure, NodeMustGenerate | NodeClobbersWorld) \
    235235    macro(GetPropertyStorage, NodeResultStorage) \
    236     macro(GetIndexedPropertyStorage, NodeMustGenerate | NodeResultStorage) \
     236    macro(GetIndexedPropertyStorage, NodeResultStorage) \
    237237    macro(GetByOffset, NodeResultJS) \
    238238    macro(PutByOffset, NodeMustGenerate | NodeClobbersWorld) \
Note: See TracChangeset for help on using the changeset viewer.