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