1. 24 Feb, 2021 1 commit
    • Manos Koukoutos's avatar
      [wasm][turbofan] Implement loop unrolling for wasm · 40ebe845
      Manos Koukoutos authored
      Design doc: https://docs.google.com/document/d/1AsUCqslMUB6fLdnGq0ZoPk2kn50jIJAWAL77lKXXP5g/
      
      Currently, wasm loop unrolling is disabled by default. We intend to
      further investigate its compilation time cost and running time benefits
      before enabling it.
      
      Additional changes:
      - Introduce LoopFinder::FindUnnestedLoopFromHeader() as a lightweight
        loop analysis.
      - Move EliminateLoopExit into LoopPeeling and expose it.
      - Introduce loop_info_ field into WasmGraphBuildingInterface, fill it
        up in Loop().
      - Break after encountering the first loop in BuildNestedLoopExits.
      - Introduce struct WasmLoopInfo. A WasmLoopInfo vector is instantiated
        in ExecuteTurbofanWasmCompilation, passed to BuildGraphForWasmFunction
        to be filled up by WasmGraphBuildingInterface, and then passed to
        GenerateCodeForWasmFunction to be used in WasmLoopUnrollingPhase.
      - Introduce WasmLoopUnrollingPhase and insert it into the wasm
        compilation pipeline.
      - Fix an issue where exception values were not wrapped in
        WasmGraphBuilderInterface.
      - Update --wasm-loop-unrolling flag description.
      
      Bug: v8:11298
      Change-Id: I4b57cf2ea8520931f60769f843ffd57b3ca6399b
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2697349
      Commit-Queue: Manos Koukoutos <manoskouk@chromium.org>
      Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Reviewed-by: 's avatarNico Hartmann <nicohartmann@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#73009}
      40ebe845
  2. 06 Feb, 2021 1 commit
    • Manos Koukoutos's avatar
      [turbofan] Refactor loop peeling/analysis infrastructure for unrolling · a6e01fb9
      Manos Koukoutos authored
      In preparation of loop unrolling, we move some loop analysis
      infrastructure out of loop-peeling.{h, cc}, and implement some
      additional required functionality.
      
      Changes:
      - Implement inner_loops() in loop-analysis.h. Change some parameters
        in other functions from Loop* to (const Loop*) to accommodate this
        change.
      - Move Peeling class into loop-analysis, rename it to NodeCopier.
      - Simplify NodeCopier::CopyNodes().
      - Allow NodeCopier to produce multiple copies of the targeted Nodes.
      - Introduce LoopFinder::HasMarkedExits(). Move the implementation of
        LoopPeeling::CanPeel() there. CanPeel() is now an alias for
        HasMarkedExits().
      
      Bug: v8:11298
      Change-Id: I245b2e937393e4a78ce4d355e1290aaf6e617114
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2672019
      Commit-Queue: Manos Koukoutos <manoskouk@chromium.org>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#72555}
      a6e01fb9
  3. 24 May, 2019 1 commit
  4. 17 Sep, 2018 1 commit
  5. 18 May, 2018 1 commit
  6. 13 Dec, 2017 1 commit
  7. 17 Oct, 2016 1 commit
  8. 15 Jul, 2016 1 commit
  9. 14 Jul, 2016 1 commit
    • jarin's avatar
      [turbofan] Introduce explicit loop exits markers. · 7a61bbcf
      jarin authored
      This CL introduces explicit LoopExit control nodes at loop exits.
      We also attach explicit value renames (LoopExitMarker) and effect
      rename (LoopExitEffect) to each loop exit. This is in preparation
      to loop peeling, which will replace LoopExit, LoopExitMarker and
      LoopExitEffect with Merge, Phi and EffectPhi respectively.
      
      At the moment, we insert loop exit at every return, break,
      continue and locally caught throw. We do not yet handle
      uncaught throws (including error throws, such as ReferenceError).
      
      Review-Url: https://codereview.chromium.org/2140673007
      Cr-Commit-Position: refs/heads/master@{#37769}
      7a61bbcf
  10. 07 Apr, 2015 1 commit
  11. 20 Jan, 2015 1 commit