Title: [117706] trunk/Source/_javascript_Core
Revision
117706
Author
[email protected]
Date
2012-05-20 03:00:08 -0700 (Sun, 20 May 2012)

Log 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):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (117705 => 117706)


--- trunk/Source/_javascript_Core/ChangeLog	2012-05-20 04:43:25 UTC (rev 117705)
+++ trunk/Source/_javascript_Core/ChangeLog	2012-05-20 10:00:08 UTC (rev 117706)
@@ -1,3 +1,18 @@
+2012-05-20  Filip Pizlo  <[email protected]>
+
+        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):
+
 2012-05-19  Vivek Galatage  <[email protected]>
 
         Windows build broken due to changes in the http://trac.webkit.org/changeset/117646

Modified: trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp (117705 => 117706)


--- trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp	2012-05-20 04:43:25 UTC (rev 117705)
+++ trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp	2012-05-20 10:00:08 UTC (rev 117706)
@@ -1544,10 +1544,16 @@
 RegisterID* WhileNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
 {
     RefPtr<LabelScope> scope = generator.newLabelScope(LabelScope::Loop);
+    RefPtr<Label> topOfLoop = generator.newLabel();
 
-    generator.emitJump(scope->continueTarget());
+    generator.emitDebugHook(WillExecuteStatement, m_expr->lineNo(), m_expr->lineNo());
+    if (m_expr->hasConditionContextCodegen())
+        generator.emitNodeInConditionContext(m_expr, topOfLoop.get(), scope->breakTarget(), true);
+    else {
+        RegisterID* cond = generator.emitNode(m_expr);
+        generator.emitJumpIfFalse(cond, scope->breakTarget());
+    }
 
-    RefPtr<Label> topOfLoop = generator.newLabel();
     generator.emitLabel(topOfLoop.get());
     generator.emitLoopHint();
     
@@ -1579,11 +1585,17 @@
 
     if (m_expr1)
         generator.emitNode(generator.ignoredResult(), m_expr1);
+    
+    RefPtr<Label> topOfLoop = generator.newLabel();
+    if (m_expr2) {
+        if (m_expr2->hasConditionContextCodegen())
+            generator.emitNodeInConditionContext(m_expr2, topOfLoop.get(), scope->breakTarget(), true);
+        else {
+            RegisterID* cond = generator.emitNode(m_expr2);
+            generator.emitJumpIfFalse(cond, scope->breakTarget());
+        }
+    }
 
-    RefPtr<Label> condition = generator.newLabel();
-    generator.emitJump(condition.get());
-
-    RefPtr<Label> topOfLoop = generator.newLabel();
     generator.emitLabel(topOfLoop.get());
     generator.emitLoopHint();
 
@@ -1594,7 +1606,6 @@
     if (m_expr3)
         generator.emitNode(generator.ignoredResult(), m_expr3);
 
-    generator.emitLabel(condition.get());
     if (m_expr2) {
         if (m_expr2->hasConditionContextCodegen())
             generator.emitNodeInConditionContext(m_expr2, topOfLoop.get(), scope->breakTarget(), false);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to