Changeset 95170 in webkit


Ignore:
Timestamp:
Sep 14, 2011 10:44:07 PM (13 years ago)
Author:
fpizlo@apple.com
Message:

DFG JIT does not leverage integer speculations on branches
https://bugs.webkit.org/show_bug.cgi?id=68140

Reviewed by Oliver Hunt.

  • dfg/DFGJITCodeGenerator.cpp:

(JSC::DFG::JITCodeGenerator::isStrictInt32):

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

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

Location:
trunk/Source/JavaScriptCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r95168 r95170  
     12011-09-14  Filip Pizlo  <fpizlo@apple.com>
     2
     3        DFG JIT does not leverage integer speculations on branches
     4        https://bugs.webkit.org/show_bug.cgi?id=68140
     5
     6        Reviewed by Oliver Hunt.
     7
     8        * dfg/DFGJITCodeGenerator.cpp:
     9        (JSC::DFG::JITCodeGenerator::isStrictInt32):
     10        * dfg/DFGJITCodeGenerator.h:
     11        * dfg/DFGSpeculativeJIT.cpp:
     12        (JSC::DFG::SpeculativeJIT::compile):
     13
    1142011-09-14  Gavin Barraclough  <barraclough@apple.com>
    215
  • trunk/Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp

    r95147 r95170  
    351351}
    352352
     353bool JITCodeGenerator::isStrictInt32(NodeIndex nodeIndex)
     354{
     355    if (isInt32Constant(nodeIndex))
     356        return true;
     357   
     358    Node& node = m_jit.graph()[nodeIndex];
     359    GenerationInfo& info = m_generationInfo[node.virtualRegister()];
     360   
     361    return info.registerFormat() == DataFormatInteger;
     362}
     363
    353364bool JITCodeGenerator::isKnownInteger(NodeIndex nodeIndex)
    354365{
  • trunk/Source/JavaScriptCore/dfg/DFGJITCodeGenerator.h

    r95147 r95170  
    409409    }
    410410   
     411    bool isStrictInt32(NodeIndex);
     412   
    411413    bool isKnownInteger(NodeIndex);
    412414    bool isKnownNumeric(NodeIndex);
  • trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp

    r95147 r95170  
    12791279
    12801280    case Branch:
     1281        if (isStrictInt32(node.child1())) {
     1282            SpeculateStrictInt32Operand op(this, node.child1());
     1283           
     1284            BlockIndex taken = m_jit.graph().blockIndexForBytecodeOffset(node.takenBytecodeOffset());
     1285            BlockIndex notTaken = m_jit.graph().blockIndexForBytecodeOffset(node.notTakenBytecodeOffset());
     1286           
     1287            MacroAssembler::ResultCondition condition = MacroAssembler::NonZero;
     1288           
     1289            if (taken == (m_block + 1)) {
     1290                condition = MacroAssembler::Zero;
     1291                BlockIndex tmp = taken;
     1292                taken = notTaken;
     1293                notTaken = tmp;
     1294            }
     1295           
     1296            addBranch(m_jit.branchTest32(condition, op.gpr()), taken);
     1297            if (notTaken != (m_block + 1))
     1298                addBranch(m_jit.jump(), notTaken);
     1299           
     1300            noResult(m_compileIndex);
     1301            break;
     1302        }
     1303        if (shouldSpeculateInteger(node.child1())) {
     1304            SpeculateIntegerOperand op(this, node.child1());
     1305
     1306            BlockIndex taken = m_jit.graph().blockIndexForBytecodeOffset(node.takenBytecodeOffset());
     1307            BlockIndex notTaken = m_jit.graph().blockIndexForBytecodeOffset(node.notTakenBytecodeOffset());
     1308           
     1309            MacroAssembler::RelationalCondition condition = MacroAssembler::NotEqual;
     1310
     1311            if (taken == (m_block + 1)) {
     1312                condition = MacroAssembler::Equal;
     1313                BlockIndex tmp = taken;
     1314                taken = notTaken;
     1315                notTaken = tmp;
     1316            }
     1317           
     1318            addBranch(m_jit.branchPtr(condition, op.gpr(), GPRInfo::tagTypeNumberRegister), taken);
     1319
     1320            if (notTaken != (m_block + 1))
     1321                addBranch(m_jit.jump(), notTaken);
     1322           
     1323            noResult(m_compileIndex);
     1324            break;
     1325        }
    12811326        emitBranch(node);
    12821327        break;
Note: See TracChangeset for help on using the changeset viewer.