1. 15 Oct, 2019 1 commit
    • Clemens Backes's avatar
      [Liftoff] Improve initialization for many locals · a8cdda99
      Clemens Backes authored
      WebAssembly locals are specified to be zero on function entry. Liftoff
      implements this by just storing the constant 0 in the virtual stack for
      integer types, and using one floating point register initialized to
      zero for all floating point types.
      For big counts of locals this leads to problems (manifesting as huge
      blocks of code being generated) once we hit a merge point: All those
      constants (for int) and all duplicate register uses (for floats) need to
      be fixed up, by using separate registers for the locals or spilling to
      the stack if no more registers are available. All this spilling
      generates a lot of code, and can even happen multiple times within a
      function.
      
      This CL optimizes for such cases by spilling all locals to the stack
      initially. All merges within the function body get much smaller then.
      The spilled values rarely have to be loaded anyway, because the initial
      zero value is usually overwritten before the first use.
      
      To optimize the code size for initializing big numbers of locals on the
      stack, this CL also introduces the platform-specific
      {FillStackSlotsWithZero} method which uses a loop for bigger local
      counts.
      
      This often saves dozens of kilobytes for very big functions, and shows
      an overall code size reduction of 4-5 percent for big modules.
      
      R=jkummerow@chromium.org
      
      Bug: v8:9830
      Change-Id: I23fa4145847827420f09e043a11e0e7b606e94cc
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1856004
      Commit-Queue: Clemens Backes <clemensb@chromium.org>
      Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#64282}
      a8cdda99
  2. 14 Oct, 2019 16 commits
  3. 13 Oct, 2019 1 commit
  4. 12 Oct, 2019 4 commits
  5. 11 Oct, 2019 18 commits