1. 22 Mar, 2018 1 commit
  2. 27 Feb, 2018 1 commit
  3. 23 Jan, 2018 1 commit
    • Leszek Swirski's avatar
      [ignition] Single-switch generator bytecode · c869d40d
      Leszek Swirski authored
      Currently, yields and awaits inside loops compile to bytecode which
      switches to the top of the loop header, and switch again once inside the
      loop. This is to make loops reducible.
      
      This replaces this switching logic with a single switch bytecode that
      directly jumps to the bytecode being resumed. Among other things, this
      allows us to no longer maintain the generator state after the switch at
      the top of the function, and avoid having to track loop suspend counts.
      
      TurboFan still needs to have reducible loops, so we now insert loop
      header switches during bytecode graph building, for suspends that are
      discovered to be inside loops during bytecode analysis. We do, however,
      do some environment magic across loop headers since we know that we will
      continue switching if and only if we reached that loop header via a
      generator resume. This allows us to generate fewer phis and tighten
      liveness.
      
      Change-Id: Id2720ce1d6955be9a48178322cc209b3a4b8d385
      Reviewed-on: https://chromium-review.googlesource.com/866734
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#50804}
      c869d40d
  4. 22 Jan, 2018 1 commit
    • Leszek Swirski's avatar
      [compiler] Propagate liveness across suspends · 41b80eef
      Leszek Swirski authored
      Suspend points (inside generators and async functions) have slightly
      funky semantics when it comes to liveness, as they save and restore a
      chunk of the register file as-is. In particular, this means that
      granular liveness information is lost, as it is assumed that all
      registers in that chunk of the register file are live in a suspend.
      
      Rather than marking that entire chunk of register as live/dead in
      suspend/restore, we can instead pattern-match the set of bytecodes in a
      suspend point, and propagate liveness across them. This tightens
      liveness estimates, and could be used to optimize which values TurboFan
      actually saves when suspending.
      
      Bug: chromium:798137
      Change-Id: I5840cdbfc2c6edb1d3a48cf025f52615b629cdfc
      Reviewed-on: https://chromium-review.googlesource.com/848895
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#50757}
      41b80eef
  5. 05 Sep, 2017 1 commit
  6. 31 Aug, 2017 1 commit
  7. 25 Aug, 2017 1 commit
  8. 17 Aug, 2017 1 commit
    • Leszek Swirski's avatar
      [turbofan] Never generate loop exit phis for the accumulator · 1a302730
      Leszek Swirski authored
      The accumulator should never be alive when jumping back to a loop
      header, or jumping out of a loop. This means that as far as far as
      TurboFan is concerned, we never need to create Phis or LoopExitValues
      for the accumulator, as its value should not escape the loop.
      
      For safety, this also augments the IsLivenessValid DCHECK in the
      liveness analysis to check that the accumulator is not live in these
      cases, and amends the bytecode analysis tests to kill the accumulator
      where necessary to ensure this.
      
      As a drive-by, added some comments to the more complex bytecode analysis
      tests, since figuring out what they were for and how to fix them took a
      non-trivial amount of time.
      
      Change-Id: Idecf76a36681d724134c59768650c23cc6b0e9ef
      Reviewed-on: https://chromium-review.googlesource.com/615168
      Commit-Queue: Jaroslav Sevcik <jarin@chromium.org>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47388}
      1a302730
  9. 16 Aug, 2017 1 commit
  10. 02 Aug, 2017 1 commit
  11. 02 Jun, 2017 1 commit
    • jarin's avatar
      This is a first step towards reducing the number of stores/loads when... · f0645612
      jarin authored
      This is a first step towards reducing the number of stores/loads when suspending/resuming a generator.
      
      Unfortunately, even for an empty generator, we still use 8 register for various things (try-finally, copies of generator object, parser-introduced temporaries). I will try to get rid of these in separate CLs.
      
      Changes:
      
      - SuspendGenerator bytecode now takes register list to save.
      - ResumeGenerator was split into two bytecodes:
        * Resume generator reads the state out and marks the generator as
            'executing'.
        * RestoreGeneratorRegisters reloads the registers from
            the generator.
          + this required adding support for output register list.
      
      - Introduced generator_object_ register in the bytecode generator.
        * in subsequent CLs, I will make better use of it, the goal is
            to get rid if the .generator_object local variable.
      
      - Taught register optimizer to flush unassigned registers.
      
      BUG=v8:6379
      
      Review-Url: https://codereview.chromium.org/2894293003
      Cr-Commit-Position: refs/heads/master@{#45675}
      f0645612
  12. 15 May, 2017 1 commit
  13. 26 Apr, 2017 1 commit
  14. 25 Jan, 2017 1 commit
    • mstarzinger's avatar
      [turbofan] Fix accumulator use in bytecode analysis. · efc8cb16
      mstarzinger authored
      This fixes the checks of accumulator usage flags in the computation of
      the interpreter register liveness during bytecode analysis. The usage
      flags at hand are bit patterns as opposed to flat enum values. Use the
      safe accessors instead of plain comparison.
      
      R=jarin@chromium.org
      TEST=mjsunit/regress/regress-crbug-683581
      BUG=chromium:683581
      
      Review-Url: https://codereview.chromium.org/2651653005
      Cr-Commit-Position: refs/heads/master@{#42648}
      efc8cb16
  15. 15 Dec, 2016 1 commit
  16. 08 Dec, 2016 1 commit
  17. 05 Dec, 2016 1 commit
  18. 01 Dec, 2016 1 commit
    • mstarzinger's avatar
      [turbofan] Move OSR BailoutId translation into graph builder. · 8893d4ff
      mstarzinger authored
      This moves the location of the bytecode-offset translation that turns
      offsets of back jumps into offsets of loop headers. This translation is
      now done by the {BytecodeGraphBuilder} after loop analysis has been
      performed. It safes one redudant iteration over the bytecode array. Note
      that this changes the semantics of the BailoutId used as an {osr_ast_id}
      throughout the compiler pipeline for OSR from Ignition.
      
      R=jarin@chromium.org
      
      Review-Url: https://codereview.chromium.org/2465913002
      Cr-Commit-Position: refs/heads/master@{#41431}
      8893d4ff
  19. 29 Nov, 2016 4 commits
  20. 22 Nov, 2016 1 commit
    • leszeks's avatar
      [ignition] Replace branch+loop analysis with a single pass · 292c4a0a
      leszeks authored
      Now that we have a JumpLoop bytecode, we can heavily simplify the
      branch/loop analysis by assuming that only JumpLoop bytecodes are
      backwards edges, and performing the loop analysis as a single
      (backwards) pass.
      
      This allows us to get rid of the branch analysis entirely, and builds a
      framework to do liveness analysis in the same pass.
      
      Review-Url: https://codereview.chromium.org/2519983002
      Cr-Commit-Position: refs/heads/master@{#41194}
      292c4a0a