Ignore:
Timestamp:
May 20, 2012, 3:00:08 AM (13 years ago)
Author:
[email protected]
Message:

Bytecompiler should emit trivially fewer jumps in loops
https://bugs.webkit.org/show_bug.cgi?id=85144

Reviewed by Oliver Hunt.

Merged r115587 from dfgopt.

1-2% across the board win.

  • bytecompiler/NodesCodegen.cpp:

(JSC::WhileNode::emitBytecode):
(JSC::ForNode::emitBytecode):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp

    r113136 r117706  
    15451545{
    15461546    RefPtr<LabelScope> scope = generator.newLabelScope(LabelScope::Loop);
    1547 
    1548     generator.emitJump(scope->continueTarget());
    1549 
    15501547    RefPtr<Label> topOfLoop = generator.newLabel();
     1548
     1549    generator.emitDebugHook(WillExecuteStatement, m_expr->lineNo(), m_expr->lineNo());
     1550    if (m_expr->hasConditionContextCodegen())
     1551        generator.emitNodeInConditionContext(m_expr, topOfLoop.get(), scope->breakTarget(), true);
     1552    else {
     1553        RegisterID* cond = generator.emitNode(m_expr);
     1554        generator.emitJumpIfFalse(cond, scope->breakTarget());
     1555    }
     1556
    15511557    generator.emitLabel(topOfLoop.get());
    15521558    generator.emitLoopHint();
     
    15801586    if (m_expr1)
    15811587        generator.emitNode(generator.ignoredResult(), m_expr1);
    1582 
    1583     RefPtr<Label> condition = generator.newLabel();
    1584     generator.emitJump(condition.get());
    1585 
     1588   
    15861589    RefPtr<Label> topOfLoop = generator.newLabel();
     1590    if (m_expr2) {
     1591        if (m_expr2->hasConditionContextCodegen())
     1592            generator.emitNodeInConditionContext(m_expr2, topOfLoop.get(), scope->breakTarget(), true);
     1593        else {
     1594            RegisterID* cond = generator.emitNode(m_expr2);
     1595            generator.emitJumpIfFalse(cond, scope->breakTarget());
     1596        }
     1597    }
     1598
    15871599    generator.emitLabel(topOfLoop.get());
    15881600    generator.emitLoopHint();
     
    15951607        generator.emitNode(generator.ignoredResult(), m_expr3);
    15961608
    1597     generator.emitLabel(condition.get());
    15981609    if (m_expr2) {
    15991610        if (m_expr2->hasConditionContextCodegen())
Note: See TracChangeset for help on using the changeset viewer.