1. 20 Feb, 2018 2 commits
  2. 13 Feb, 2018 1 commit
    • Mike Stanton's avatar
      [turbofan] Masking/poisoning in codegen (optimized code, x64) · 8f489e73
      Mike Stanton authored
      This introduces masking of loads with speculation bit during code generation.
      At the moment, this is done only for x64 optimized code, under the
      --branch-load-poisoning flag.
      
      Overview of changes:
      - new register configuration configuration with one register reserved for
        the speculation poison/mask (kSpeculationPoisonRegister).
      - in codegen, we introduce an update to the poison register at the starts
        of all successors of branches (and deopts) that are marked as safety
        branches (deopts).
      - in memory optimizer, we lower all field and element loads to PoisonedLoads.
      - poisoned loads are then masked in codegen with the poison register.
        * only integer loads are masked at the moment.
      
      Bug: chromium:798964
      Change-Id: Ie51fdbde578fc289dff029794f3cfe8eaf33e1ef
      Reviewed-on: https://chromium-review.googlesource.com/901625
      Commit-Queue: Michael Stanton <mvstanton@chromium.org>
      Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#51272}
      8f489e73
  3. 22 Jan, 2018 1 commit
  4. 04 Jan, 2018 1 commit
  5. 04 Dec, 2017 1 commit
    • Caitlin Potter's avatar
      [builtins] implement RunMicrotasks pump as a code stub · 52ff3ae4
      Caitlin Potter authored
      - Implement RunMicrotasks in CSA to prevent a potentially large number
        of jumps between C++ and JS code while consuming te queue. Appears to
        provide a ~60% speedup in microtask-heavy code, which from limited
        testing appears to scale linearly.
      
        The code-stub microtask pump bails out to the old C++ microtask pump
        if it encounters a CallHandlerInfo microtask, and remains in C++ for
        the remainder of the queue (returning to the JS/stub implementation
        after the bailed out queue is exhausted).
      
      - Add a variation of JSEntryStub which enters the new RunMicrotasks code
        stub.
      
      - Add a new RunMicrotasks helper to Execution, which uses the
        RunMicrotasks entry stub.
      
      Bug: 
      Change-Id: I4667d4dd633d24455ea5d7cef239da0af1a7365e
      Reviewed-on: https://chromium-review.googlesource.com/650486
      Commit-Queue: Caitlin Potter <caitp@igalia.com>
      Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
      Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#49842}
      52ff3ae4
  6. 15 Nov, 2017 1 commit
  7. 07 Nov, 2017 1 commit
  8. 06 Nov, 2017 1 commit
  9. 02 Nov, 2017 1 commit
  10. 30 Oct, 2017 2 commits
  11. 27 Oct, 2017 2 commits
  12. 26 Oct, 2017 2 commits
  13. 20 Oct, 2017 1 commit
  14. 18 Oct, 2017 2 commits
    • Pierre Langlois's avatar
      Simplify DoubleToI stub. · 9f4f3c28
      Pierre Langlois authored
      The DoubleToI stub is no longer called outside of TurboFan, and always in the
      same way:
      
        - The parameter is on top of the stack.
        - The stub is always called in a slow path.
        - It truncates.
      
      Therefore, we can simplify it to only support this case and remove dead
      code.
      
      On top of this, since the stub is always considered to be on a slow path for all
      backends, this patch takes the opportunity to remove the `skip_fastpath`
      optimisation. This would generate a stub which does not handle all inputs,
      assuming that the backend already handled some of the inputs in a fast
      path. Removing this allows the stub to have the same behaviour on all targets.
      
      On Arm, this patch reworks the stub a little. We could use ip instead of saving
      and restoring a register on the stack. Also, comments would mention that we
      assume the exponent to be greater than 31 when the it can be 30 or higher. As
      done for Arm64, let's check this at runtime in debug mode.
      
      On Arm64, we can also implement the stub without pushing and poping off the
      stack. It needs 2 general purpose and a double scratch registers which we have
      reserved already (ip0, ip1 and d30). This removes the need to check that the
      stack pointer is always 16-bytes aligned.
      
      Finally, this also fixes a potential bug on Arm64, in the
      `GetAllocatableRegisterThatIsNotOneOf` method which is now removed. We were
      picking an allocatable double register when we meant to pick a general one.
      
      Bug: v8:6644
      Change-Id: I88d4597f377c9fc05432d5922a0d7129b6d19b47
      Reviewed-on: https://chromium-review.googlesource.com/720963Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
      Commit-Queue: Pierre Langlois <pierre.langlois@arm.com>
      Cr-Commit-Position: refs/heads/master@{#48671}
      9f4f3c28
    • Clemens Hammacher's avatar
      [cleanup] Fix remaining (D)CHECK macro usages · 5f651082
      Clemens Hammacher authored
      This CL fixes all occurences that don't require special OWNER reviews,
      or can be reviewed by Michi.
      
      After this one, we should be able to reenable the readability/check
      cpplint check.
      
      R=mstarzinger@chromium.org
      
      Bug: v8:6837, v8:6921
      Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng;master.tryserver.v8:v8_linux_noi18n_rel_ng
      Change-Id: Ic81d68d5534eaa795b7197fed5c41ed158361d62
      Reviewed-on: https://chromium-review.googlesource.com/721120
      Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
      Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#48670}
      5f651082
  15. 13 Oct, 2017 4 commits
  16. 09 Oct, 2017 2 commits
  17. 13 Sep, 2017 1 commit
  18. 07 Sep, 2017 1 commit
  19. 06 Sep, 2017 3 commits
    • Caitlin Potter's avatar
      [cleanup] don't push useless nullptr on ia32/x64 JSEntryStub · 6ec1dbfc
      Caitlin Potter authored
      The stack value is unused and does not need to be pushed or popped on
      return from JSEntryTrampoline
      
      Bug: 
      Change-Id: I0e1920fc48b63cb0eea66454e5b74d9b3c2d5956
      Reviewed-on: https://chromium-review.googlesource.com/650810
      Commit-Queue: Caitlin Potter <caitp@igalia.com>
      Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47849}
      6ec1dbfc
    • Clemens Hammacher's avatar
      [assembler] Make Register et al. real classes · 9e995e12
      Clemens Hammacher authored
      Up to now, each architecture defined all Register types as structs,
      with lots of redundancy. An often found comment noted that they cannot
      be classes due to initialization order problems. As these problems are
      gone with C++11 constexpr constants, I now tried making Registers
      classes again.
      All register types now inherit from RegisterBase, which provides a
      default set of methods and named constructors (like ::from_code,
      code(), bit(), is_valid(), ...).
      This design allows to guarantee an interesting property: Each register
      is either valid, or it's the no_reg register. There are no other
      invalid registers. This is guaranteed statically by the constexpr
      constructor, and dynamically by ::from_code.
      
      I decided to disallow the default constructor completely, so instead of
      "Register reg;" you now need "Register reg = no_reg;". This makes
      explicit how the Register is initialized.
      
      I did this change to the x64, ia32, arm, arm64, mips and mips64 ports.
      Overall, code got much more compact and more safe. In theory, it should
      also increase performance (since the is_valid() check is simpler), but
      this is probably not measurable.
      
      R=mstarzinger@chromium.org
      
      Change-Id: I5ccfa4050daf4e146a557970e9d37fd3d2788d4a
      Reviewed-on: https://chromium-review.googlesource.com/650927Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
      Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
      Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47847}
      9e995e12
    • jing.bao's avatar
      [x64] Eliminate redundant code in RecordWriteStub · ac2801f1
      jing.bao authored
      Do conditional jump based on the second instruction rather than
      generate similar assembly code twice.
      
      Bug: 
      Change-Id: I8c10f3415f213f88d8222a92671e7104c65befdc
      Reviewed-on: https://chromium-review.googlesource.com/634631
      Commit-Queue: Jing Bao <jing.bao@intel.com>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47844}
      ac2801f1
  20. 24 Aug, 2017 1 commit
  21. 23 Aug, 2017 1 commit
  22. 14 Aug, 2017 1 commit
  23. 07 Aug, 2017 3 commits
    • Benedikt Meurer's avatar
      [ic] Properly integrate the CallIC into Ignition. · ee350c31
      Benedikt Meurer authored
      Drop the deprecated CallConstructStub and remove the use of CallICStub
      from fullcodegen, since that feedback is unused completely every since
      Crankshaft got removed, thus we can safely unlink all the CallIC stuff
      from fullcodegen nowadays, and completely nuke the CallICStub and the
      CallICTrampolineStub now (we can also transitively nuke the unused
      CreateAllocationSiteStub and CreateWeakCellStub).
      
      Instead the CallIC logic is integrated into Ignition now, and part of
      the bytecode handlers for [[Call]] and [[Construct]]. There's still some
      follow-up cleanup with the way the Array constructor feedback is
      integrated, but that's way easier now.
      
      Bug: v8:5517, v8:6399, v8:6409, v8:6679
      Change-Id: I0a6c6046faceca9b1606577bc9e63d9295e44619
      Reviewed-on: https://chromium-review.googlesource.com/603609
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47196}
      ee350c31
    • Michael Achenbach's avatar
      Revert "[ic] Properly integrate the CallIC into Ignition." · 018128a4
      Michael Achenbach authored
      This reverts commit 6c541561.
      
      Reason for revert:
      https://build.chromium.org/p/client.v8/builders/V8%20Linux%20-%20nosnap/builds/17240
      
      Original change's description:
      > [ic] Properly integrate the CallIC into Ignition.
      > 
      > Drop the deprecated CallConstructStub and remove the use of CallICStub
      > from fullcodegen, since that feedback is unused completely every since
      > Crankshaft got removed, thus we can safely unlink all the CallIC stuff
      > from fullcodegen nowadays, and completely nuke the CallICStub and the
      > CallICTrampolineStub now (we can also transitively nuke the unused
      > CreateAllocationSiteStub and CreateWeakCellStub).
      > 
      > Instead the CallIC logic is integrated into Ignition now, and part of
      > the bytecode handlers for [[Call]] and [[Construct]]. There's still some
      > follow-up cleanup with the way the Array constructor feedback is
      > integrated, but that's way easier now.
      > 
      > Bug: v8:5517, v8:6399, v8:6409, v8:6679
      > Change-Id: Ia0efc6145ee64633757a6c3fd1879d4906ea2835
      > Reviewed-on: https://chromium-review.googlesource.com/602134
      > Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      > Reviewed-by: Yang Guo <yangguo@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#47192}
      
      TBR=rmcilroy@chromium.org,yangguo@chromium.org,bmeurer@chromium.org
      
      Change-Id: I416ce6646f62ceb4127b3acee43912ee0d701c23
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:5517, v8:6399, v8:6409, v8:6679
      Reviewed-on: https://chromium-review.googlesource.com/603647Reviewed-by: 's avatarMichael Achenbach <machenbach@chromium.org>
      Commit-Queue: Michael Achenbach <machenbach@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47193}
      018128a4
    • Benedikt Meurer's avatar
      [ic] Properly integrate the CallIC into Ignition. · 6c541561
      Benedikt Meurer authored
      Drop the deprecated CallConstructStub and remove the use of CallICStub
      from fullcodegen, since that feedback is unused completely every since
      Crankshaft got removed, thus we can safely unlink all the CallIC stuff
      from fullcodegen nowadays, and completely nuke the CallICStub and the
      CallICTrampolineStub now (we can also transitively nuke the unused
      CreateAllocationSiteStub and CreateWeakCellStub).
      
      Instead the CallIC logic is integrated into Ignition now, and part of
      the bytecode handlers for [[Call]] and [[Construct]]. There's still some
      follow-up cleanup with the way the Array constructor feedback is
      integrated, but that's way easier now.
      
      Bug: v8:5517, v8:6399, v8:6409, v8:6679
      Change-Id: Ia0efc6145ee64633757a6c3fd1879d4906ea2835
      Reviewed-on: https://chromium-review.googlesource.com/602134
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47192}
      6c541561
  24. 04 Aug, 2017 1 commit
  25. 03 Aug, 2017 2 commits
  26. 02 Aug, 2017 1 commit
    • Yang Guo's avatar
      Support circular references between generated builtins. · 266be35b
      Yang Guo authored
      Until now, when generating a builtin, it can only embed builtins
      (as call targets) that have already been generated. This is either
      achieved by reordering the builtins list, or by loading the call
      target at runtime from the builtins list (see
      MacroAssembler::TailCallBuiltin).
      
      This patch works around this issue by filling the builtins list
      with dummy code objects, which are later replaced with the completed
      actual builtins. In release mode, this adds around 3ms to 140ms we
      previously needed to populate the builtins list. 
      
      Change-Id: I7d451b3c09a1db4b9e755548102a80c7f0dfada2
      Reviewed-on: https://chromium-review.googlesource.com/586531
      Commit-Queue: Yang Guo <yangguo@chromium.org>
      Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47062}
      266be35b