2008-10-21 Darin Adler <darin@apple.com>
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 21 Oct 2008 21:29:31 +0000 (21:29 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 21 Oct 2008 21:29:31 +0000 (21:29 +0000)
        Reviewed by Maciej Stachowiak.

        - convert post-increment to pre-increment in a couple more places for speed

        Speeds up V8 benchmarks a little on most computers. (But, strangely, slows
        them down a little on my computer.)

        * kjs/nodes.cpp:
        (JSC::statementListEmitCode): Removed default argument, since we always want
        to specify this explicitly.
        (JSC::ForNode::emitCode): Tolerate ignoredResult() as the dst -- means the
        same thing as 0.
        (JSC::ReturnNode::emitCode): Ditto.
        (JSC::ThrowNode::emitCode): Ditto.
        (JSC::FunctionBodyNode::emitCode): Pass ignoredResult() so that we know we
        don't have to compute the result of function statements.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@37763 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/nodes.cpp

index 9316878..439e092 100644 (file)
@@ -1,3 +1,22 @@
+2008-10-21  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        - convert post-increment to pre-increment in a couple more places for speed
+
+        Speeds up V8 benchmarks a little on most computers. (But, strangely, slows
+        them down a little on my computer.)
+
+        * kjs/nodes.cpp:
+        (JSC::statementListEmitCode): Removed default argument, since we always want
+        to specify this explicitly.
+        (JSC::ForNode::emitCode): Tolerate ignoredResult() as the dst -- means the
+        same thing as 0.
+        (JSC::ReturnNode::emitCode): Ditto.
+        (JSC::ThrowNode::emitCode): Ditto.
+        (JSC::FunctionBodyNode::emitCode): Pass ignoredResult() so that we know we
+        don't have to compute the result of function statements.
+
 2008-10-21  Peter Kasting  <pkasting@google.com>
 
         Reviewed by Maciej Stachowiak.
index 85502dc..d931991 100644 (file)
@@ -1057,7 +1057,7 @@ RegisterID* ConstStatementNode::emitCode(CodeGenerator& generator, RegisterID*)
 
 // ------------------------------ Helper functions for handling Vectors of StatementNode -------------------------------
 
-static inline RegisterID* statementListEmitCode(StatementVector& statements, CodeGenerator& generator, RegisterID* dst = 0)
+static inline RegisterID* statementListEmitCode(StatementVector& statements, CodeGenerator& generator, RegisterID* dst)
 {
     StatementVector::iterator end = statements.end();
     for (StatementVector::iterator it = statements.begin(); it != end; ++it) {
@@ -1227,6 +1227,9 @@ RegisterID* WhileNode::emitCode(CodeGenerator& generator, RegisterID* dst)
 
 RegisterID* ForNode::emitCode(CodeGenerator& generator, RegisterID* dst)
 {
+    if (dst == ignoredResult())
+        dst = 0;
+
     generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
 
     if (m_expr1)
@@ -1407,7 +1410,9 @@ RegisterID* ReturnNode::emitCode(CodeGenerator& generator, RegisterID* dst)
 {
     if (generator.codeType() != FunctionCode)
         return emitThrowError(generator, SyntaxError, "Invalid return statement.");
-        
+
+    if (dst == ignoredResult())
+        dst = 0;
     RegisterID* r0 = m_value ? generator.emitNode(dst, m_value.get()) : generator.emitLoad(dst, jsUndefined());
     if (generator.scopeDepth()) {
         RefPtr<LabelID> l0 = generator.newLabel();
@@ -1612,6 +1617,8 @@ RegisterID* LabelNode::emitCode(CodeGenerator& generator, RegisterID* dst)
 
 RegisterID* ThrowNode::emitCode(CodeGenerator& generator, RegisterID* dst)
 {
+    if (dst == ignoredResult())
+        dst = 0;
     RefPtr<RegisterID> expr = generator.emitNode(dst, m_expr.get());
     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     generator.emitThrow(expr.get());
@@ -1808,7 +1815,7 @@ void FunctionBodyNode::generateCode(ScopeChainNode* scopeChainNode)
 RegisterID* FunctionBodyNode::emitCode(CodeGenerator& generator, RegisterID*)
 {
     generator.emitDebugHook(DidEnterCallFrame, firstLine(), lastLine());
-    statementListEmitCode(m_children, generator);
+    statementListEmitCode(m_children, generator, ignoredResult());
     if (!m_children.size() || !m_children.last()->isReturnNode()) {
         RegisterID* r0 = generator.emitLoad(0, jsUndefined());
         generator.emitDebugHook(WillLeaveCallFrame, firstLine(), lastLine());