Changes between Version 23 and Version 24 of squirrelfish


Ignore:
Timestamp:
Mar 30, 2008 7:46:42 PM (16 years ago)
Author:
cwzwarich@uwaterloo.ca
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • squirrelfish

    v23 v24  
    2020Investigating performance regressions caused by the introduction of new opcodes. In particular, a simple for loop with no body regresses about 25%. It seemed at first that this has to do with the fact that these instructions call arbitrary external functions, but some odd performance differences still occur without these calls. '''Done''': the regression seems to be related to inlining of large function bodies into Machine::privateExecute(). In order to solve this, we have to remove ALWAYS_INLINE from some larger functions, and move some opcodes out into individual functions marked NEVER_INLINE. This is suboptimal, and we still don't know the exact reason why it is happening, but hopefully it will be easy enough to work around for now. Geoff and I worked this out and he landed [http://trac.webkit.org/projects/webkit/changeset/31277 r31277], which fixes the problems we have seen thusfar.
    2121
    22 Implementing all of the left-over binary and unary operations.
    23 
    2422Better code generation. We have been pondering whether to have a separate peephole optimization pass or to incorporate peephole optimization into code generation. Either way, we should look at some code generation algorithms based on tile matching. We also want to choose an approach that will be compatible with planned extensions, e.g. superinstructions.
    2523
     24Function-related nodes
     25
    2626'''Oliver is working on:
    2727'''
     
    3939'''
    4040
    41 CommaNode (since it is needed for the var codegen for various SunSpider tests)
     41Dot nodes
    4242
    4343'''You could take something from Geoff, or make something up yourself, or do one of these:'''
     44
     45Leftover opcodes:
     46
     47 * ArgumentsNode
     48 * ArrayNode
     49 * AssignBracketNode
     50 * AssignErrorNode
     51 * BracketAccessorNode
     52 * BreakpointCheckStatement
     53 * CaseBlockNode
     54 * CaseClauseNode
     55 * ClauseListNode
     56 * ConstDeclNode
     57 * ConstStatementNode
     58 * DeleteBracketNode
     59 * DeleteDotNode
     60 * DeleteResolveNode
     61 * DeleteValueNode
     62 * ElementNode
     63 * EvalFunctionCallNode
     64 * ForInNode
     65 * FuncExprNode
     66 * FunctionCallBracketNode
     67 * FunctionCallDotNode
     68 * FunctionCallValueNode
     69 * InNode
     70 * LocalVarDeleteNode
     71 * LocalVarTypeOfNode
     72 * NewExprNode
     73 * ParameterNode
     74 * PostDecBracketNode
     75 * PostDecConstNode
     76 * PostDecDotNode
     77 * PostDecLocalVarNode
     78 * PostDecResolveNode
     79 * PostIncBracketNode
     80 * PostIncDotNode
     81 * PostfixErrorNode
     82 * PreDecBracketNode
     83 * PreDecConstNode
     84 * PreDecDotNode
     85 * PreDecLocalVarNode
     86 * PreDecResolveNode
     87 * PreIncBracketNode
     88 * PreIncDotNode
     89 * PrefixErrorNode
     90 * PropertyNode
     91 * ReadModifyBracketNode
     92 * ReadModifyConstNode
     93 * ReadModifyDotNode
     94 * ReadModifyLocalVarNode
     95 * ReadModifyResolveNode
     96 * RegExpNode
     97 * SwitchNode
     98 * ThrowNode
     99 * TryNode
     100 * TypeOfResolveNode
     101 * TypeOfValueNode
    44102
    45103Optimize dynamic scopes that aren't closures not to save the environment on return