1. 20 Sep, 2016 1 commit
  2. 18 Apr, 2016 1 commit
    • jarin's avatar
      [turbofan] Effect linearization after representation inference. · b9e287c6
      jarin authored
      This introduces a compiler pass that schedules the graph and re-wires effect chain according to the schedule. It also connects allocating representation changes to the effect chain, and removes the BeginRegion and EndRegion nodes - they should not be needed anymore because all effectful nodes should be already wired-in.
      
      This is an intermediate CL - the next step is to move lowering of the Change*ToTaggedEffect nodes to StateEffectIntroduction so that we do not have to introduce the effectful versions of nodes.
      
      Review URL: https://codereview.chromium.org/1849603002
      
      Cr-Commit-Position: refs/heads/master@{#35565}
      b9e287c6
  3. 04 Apr, 2016 1 commit
    • titzer's avatar
      [turbofan] Handle dead diamonds in scheduling and add a test. · 45d75bca
      titzer authored
      The background here is that graphs generated from WASM are not trimmed.
      That means there can be some floating control diamonds that are not
      reachable from end. An assertion in the scheduler for phis from floating
      diamonds checks that the use edge in this situation is the control edge,
      but in general, any edge could cause this.
      
      Scheduling still works without this assertion. The longer term fix
      is to either trim the graphs (more compile time overhead for WASM)
      or improve the scheduler's handling of dead code in the graph. Currently
      it does not schedule dead code but the potential use positions of
      dead code are used in the computation of the common dominator of uses. We could
      recognize dead nodes in PrepareUses() and check in GetBlockForUse()
      as per TODO.
      
      R=bradnelson@chromium.org, mstarzinger@chromium.org
      BUG=
      
      Review URL: https://codereview.chromium.org/1846933002
      
      Cr-Commit-Position: refs/heads/master@{#35245}
      45d75bca
  4. 11 Jan, 2016 1 commit
  5. 14 Oct, 2015 1 commit
    • jarin's avatar
      [turbofan] Introduce node regions for protection from scheduling. · 59c616cc
      jarin authored
      This CL re-purposes ValueEffect and Finish as delimiters for regions
      that are scheduled atomically (renamed to BeginRegion, FinishRegion).
      
      The BeginRegion node takes and produces an effect. For the uses that do
      not care about the placement in the effect chain, it is ok to feed
      graph->start() as an effect input.
      
      The FinishRegion takes a value and an effect and produces a value and
      an effect. It is important that any value or effect produced inside the
      region is not used outside the region. The FinishRegion node is the only
      way to smuggle an effect and a value out.
      
      At the moment, this does not support control flow inside the region. Control flow would be hard.
      
      During scheduling we do some sanity check, but the checks are not exhaustive. Here is what we check:
      - the effect chain between begin and finish is linear (no splitting,
        single effect input and output).
      - any value produced is consumed by the FinishRegion node.
      - no control flow outputs.
      
      Review URL: https://codereview.chromium.org/1399423002
      
      Cr-Commit-Position: refs/heads/master@{#31265}
      59c616cc
  6. 19 Jun, 2015 1 commit
  7. 06 May, 2015 1 commit
  8. 05 May, 2015 1 commit
    • bmeurer's avatar
      [turbofan] Fix tail call optimization. · d21de2a4
      bmeurer authored
      Tail calls are matched on the graph, with a dedicated tail call
      optimization that is actually testable. The instruction selection can
      still fall back to a regular if the platform constraints don't allow to
      emit a tail call (i.e. the return locations of caller and callee differ
      or the callee takes non-register parameters, which is a restriction that
      will be removed in the future).
      
      Also explicitly limit tail call optimization to stubs for now and drop
      the global flag.
      
      BUG=v8:4076
      LOG=n
      
      Review URL: https://codereview.chromium.org/1114163005
      
      Cr-Commit-Position: refs/heads/master@{#28219}
      d21de2a4
  9. 04 May, 2015 1 commit
  10. 30 Apr, 2015 1 commit
    • svenpanne's avatar
      Detect simple tail calls · 4b122b75
      svenpanne authored
      This CL contains the first steps towards tail call optimization:
      
        * Structurally detect tail calls during instruction selection,
          looking for special return/call combinations.
      
        * Added new architecture-specific instructions for tail calls which
          jump instead of call and take care of frame adjustment.
      
        * Moved some code around.
      
      Currently we restrict tail calls to callees which only use registers
      for arguments/return value and to call sites which are explicitly
      marked as being OK for tail calls. This excludes, among other things,
      call sites in sloppy JS functions and our IC machinery (both need in
      general to be able to access the caller's frame).
      
      All this is behind a flag --turbo-tail-calls, which is currently off
      by default, so it can easily be toggled.
      
      Review URL: https://codereview.chromium.org/1108563002
      
      Cr-Commit-Position: refs/heads/master@{#28150}
      4b122b75
  11. 20 Apr, 2015 1 commit
  12. 19 Mar, 2015 1 commit
  13. 17 Mar, 2015 1 commit
  14. 04 Mar, 2015 1 commit
  15. 25 Feb, 2015 3 commits
  16. 24 Feb, 2015 1 commit
  17. 23 Feb, 2015 1 commit
  18. 20 Feb, 2015 1 commit
  19. 18 Feb, 2015 1 commit
  20. 17 Feb, 2015 1 commit
    • bmeurer's avatar
      [turbofan] Optimize certain chains of Branch into a Switch. · acd9c46c
      bmeurer authored
      This adds a new ControlFlowOptimizer that - for now - recognizes chains
      of Branches generated by the SwitchBuilder for a subset of javascript
      switches into Switch nodes. Those Switch nodes are then lowered to
      either table or lookup switches.
      
      Also rename Case to IfValue (and introduce IfDefault) for consistency.
      
      BUG=v8:3872
      LOG=n
      
      Review URL: https://codereview.chromium.org/931623002
      
      Cr-Commit-Position: refs/heads/master@{#26691}
      acd9c46c
  21. 12 Feb, 2015 1 commit
  22. 09 Feb, 2015 1 commit
  23. 03 Feb, 2015 2 commits
  24. 30 Jan, 2015 3 commits
  25. 29 Jan, 2015 2 commits
  26. 27 Jan, 2015 1 commit
    • bmeurer's avatar
      [turbofan] Ensure that NTLs are always properly connected to the end. · 59a02ebd
      bmeurer authored
      Up until now we used a special Terminate node to artifically connect non
      terminating loops to the End node, but this was kind of adhoc and didn't
      work for the CFG. So without all kinds of weird hacks, the end block in
      the CFG will not be connected to NTLs, which makes it impossible to
      compute post dominance / control dependence in the current setting.
      
      So instead of Terminate, we add a special Branch to NTLs, whose
      condition is the special Always node, which corresponds to True, except
      that it cannot be folded away. This way we don't need any special
      machinery in the scheduler, since it's just a regular Branch.
      
      R=titzer@chromium.org
      
      Review URL: https://codereview.chromium.org/875263004
      
      Cr-Commit-Position: refs/heads/master@{#26294}
      59a02ebd
  27. 23 Jan, 2015 1 commit
  28. 22 Jan, 2015 1 commit
  29. 20 Jan, 2015 1 commit
  30. 16 Jan, 2015 1 commit
  31. 12 Jan, 2015 1 commit
  32. 07 Jan, 2015 1 commit
    • bmeurer's avatar
      [turbofan] Cleanup Graph and related classes. · e53845d4
      bmeurer authored
      - Move NodeMarker to its own file, and introduce a non
        templatized base class.
      - Cleanup the include hell.
      - Sanitize the Node construction methods now that we
        got rid of that GenericNode/GenericGraph stuff.
      - Protect against NodeId overflow in Graph.
      - Various minor cleanups.
      
      TEST=cctest,mjsunit,unittests
      
      Review URL: https://codereview.chromium.org/838783002
      
      Cr-Commit-Position: refs/heads/master@{#25977}
      e53845d4
  33. 17 Dec, 2014 1 commit
  34. 02 Dec, 2014 1 commit