• 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