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/DFGByteCodeParser.cpp

    r102917 r103120  
    16631663            NodeIndex property = get(currentInstruction[2].u.operand);
    16641664            NodeIndex value = get(currentInstruction[3].u.operand);
    1665 
    1666             addToGraph(PutByVal, base, property, value);
     1665            NodeIndex propertyStorage = addToGraph(GetIndexedPropertyStorage, base, property);
     1666
     1667            addVarArgChild(base);
     1668            addVarArgChild(property);
     1669            addVarArgChild(value);
     1670            addVarArgChild(propertyStorage);
     1671           
     1672            addToGraph(Node::VarArg, PutByVal, OpInfo(0), OpInfo(0));
    16671673
    16681674            NEXT_OPCODE(op_put_by_val);
Note: See TracChangeset for help on using the changeset viewer.