1. 10 Oct, 2016 1 commit
  2. 27 Jun, 2016 1 commit
  3. 04 Feb, 2016 1 commit
    • mtrofin's avatar
      [turbofan] fine grained in-block move optimization · 1ecf58f4
      mtrofin authored
      So far, we've been moving down gaps wholesale. This change moves
      individual move operations instead. This improves some benchmarks,
      and should overall reduce code size, because it improves the chance of
      reducing the number of moves.
      
      For example, there are improvements on x64 in Emscripten (Bullet, in
      particular) , JetStream geomean, Embenchen (zlib).
      
      In the process of making this change, I noticed we can separate the
      tasks performed by the move optimizer, as follows:
      
      - group gaps into 1
      - push gaps down, jumping instructions (these 2 were together before)
      - merge blocks (and then push gaps down)
      - finalize
      
      We can do without a finalization list. This avoids duplicating storage -
      we already have the list of instructions; it also simplifies the logic, since,
      with this change, we may process an instruction's gap twice.
      
      Compile time doesn't regress much (see pathological cases), but we
      may want to avoid the allocations of the few sets used in the new code.
      I'll do that in a subsequent change.
      
      BUG=
      
      Review URL: https://codereview.chromium.org/1634093002
      
      Cr-Commit-Position: refs/heads/master@{#33715}
      1ecf58f4
  4. 25 Jan, 2016 1 commit
    • mtrofin's avatar
      If all the predecessors of a node have, at the last gap, the exact same · 78b55f2e
      mtrofin authored
      moves, we move those to the node, and remove them from the
      predecessors ("merge" them to the common node).
      
      If only some of the moves are common, we don't do anything. This is
      what this change addresses.
      
      The bug linked below should be addressed by this change. The only
      difference in codegen before/after the change that introduced the bug
      was un-merged moves.
      
      BUG=chromium:549262
      LOG=N
      
      Review URL: https://codereview.chromium.org/1527203002
      
      Cr-Commit-Position: refs/heads/master@{#33481}
      78b55f2e
  5. 10 Dec, 2015 1 commit
    • jarin's avatar
      [turbofan] Make MachineType a pair of enums. · bb2a830d
      jarin authored
      MachineType is now a class with two enum fields:
      - MachineRepresentation
      - MachineSemantic
      
      Both enums are usable on their own, and this change switches some places from using MachineType to use just MachineRepresentation. Most notably:
      - register allocator now uses just the representation.
      - Phi and Select nodes only refer to representations.
      
      Review URL: https://codereview.chromium.org/1513543003
      
      Cr-Commit-Position: refs/heads/master@{#32738}
      bb2a830d
  6. 29 Oct, 2015 1 commit
    • mtrofin's avatar
      When we split above an instruction (for example because of splintering), · 46878c1d
      mtrofin authored
      we may introduce moves that are redundant in the context of
      moves on subsequent instructions. Currently, we only detect such
      redundancies by allowing moves to skip over Nop instructions (true
      nops, with no input/output). We can also skip over other cases, for
      example over constant definitions (nop with an output), since whatever
      moves happen above it do not influence the instruction's outcome.
      
      We may be able to handle other cases, too - in subsequent CLs.
      
      BUG=
      
      Review URL: https://codereview.chromium.org/1422333003
      
      Cr-Commit-Position: refs/heads/master@{#31662}
      46878c1d
  7. 28 Oct, 2015 1 commit
  8. 27 Oct, 2015 1 commit
    • danno's avatar
      [turbofan] Create ExplicitOperands to specify operands without virtual registers · f1aa5562
      danno authored
      Up until now, if one wanted to specify an explicit stack location                                                                                                                                                                                                or register as an operand for an instruction, it had to also be
      explicitly associated with a virtual register as a so-called
      FixedRegister or FixedStackSlot.
      
      For the implementation of tail calls, the plan is to use the gap
      resolver needs to shuffle stack locations from the caller to the
      tail-called callee. In order to do this, it must be possible to
      explicitly address operand locations on the stack that are not
      associated with virtual registers.
      
      This CL introduces ExplictOperands, which can specify a specific
      register or stack location that is not associated with virtual
      register. This will allow tail calls to specify the target
      locations for the necessary stack moves in the gap for the tail
      call without the core register allocation having to know about
      the target of the stack moves at all.
      
      In the process this CL:
      * creates a new Operand kind, ExplicitOperand, with which
        instructions can specify register and stack slots without an
        associated virtual register.
      * creates a LocationOperand class from which AllocatedOperand and
        ExplicitOperand are derived and provides a common interface to
        get Register, DoubleRegister and spill slot information.
      * removes RegisterOperand, DoubleRegisterOperand,
        StackSlotOperand and DoubleStackSlotOperand, they are subsumed
        by LocationOperand.
      * addresses a cleanup TODO in AllocatedOperand to reduce the
        redundancy of AllocatedOperand::Kind by using machine_type() to
        determine if an operand corresponds to a general purpose or
        double register.
      
      BUG=v8:4076
      LOG=n
      
      Review URL: https://codereview.chromium.org/1389373002
      
      Cr-Commit-Position: refs/heads/master@{#31603}
      f1aa5562
  9. 30 Apr, 2015 1 commit
  10. 29 Apr, 2015 3 commits
  11. 15 Apr, 2015 1 commit
    • dcarney's avatar
      [turbofan] cleanup ParallelMove · 00aec790
      dcarney authored
      - make ParallelMove into a ZoneVector, removing an annoying level of indirection
      - make MoveOperands hold InstructionOperands instead of pointers, so there's no more operand aliasing for moves
      - opens up possibility of storing MachineType in allocated operands
      
      R=bmeurer@chromium.org
      BUG=
      
      Review URL: https://codereview.chromium.org/1081373002
      
      Cr-Commit-Position: refs/heads/master@{#27842}
      00aec790
  12. 09 Apr, 2015 1 commit
    • dcarney's avatar
      [turbofan] cleanup InstructionOperand a little · 07ff6d9f
      dcarney authored
      - ConstantOperand was using a too-small field too store its virtual register
      - drop ConvertTo, replace it with simple copy
      - split AllocatedOperand off from Immediate and Constant to make assignment clearer, also paving the way for small Immediates
      - put zone first in *Operand::New
      - driveby: drop delayed ssa deconstruction experiment
      
      R=titzer@chromium.org
      BUG=
      
      Review URL: https://codereview.chromium.org/1050803002
      
      Cr-Commit-Position: refs/heads/master@{#27692}
      07ff6d9f
  13. 31 Mar, 2015 1 commit
  14. 24 Feb, 2015 1 commit
  15. 06 Feb, 2015 1 commit
  16. 15 Jan, 2015 1 commit
  17. 18 Dec, 2014 1 commit
  18. 17 Dec, 2014 1 commit
  19. 27 Nov, 2014 1 commit