1. 08 May, 2019 1 commit
  2. 03 May, 2019 2 commits
  3. 24 Oct, 2017 1 commit
    • Benedikt Meurer's avatar
      [turbofan] Properly handle smis in monomorphic loads/stores. · a9da0ce7
      Benedikt Meurer authored
      When lowering a monomorphic load/store, where multiple receiver maps
      have been recorded, but the action to be performed is the same (i.e.
      yielding undefined because the property is not found), TurboFan used
      to ignore the Smi case, leading to a pretty terrible deoptimization
      loop, as the LOAD_IC/STORE_IC properly recorded that state and thus
      didn't change it's state.
      
      Fixing this issue gives a 18-20% boost on the prettier test of the
      web-tooling-benchmark, which was suffering a lot from this problem.
      
      Bug: v8:6936, v8:6991
      Change-Id: Id208ec7129a7f6b190d989bda31f936040393226
      Reviewed-on: https://chromium-review.googlesource.com/735342Reviewed-by: 's avatarMichael Stanton <mvstanton@chromium.org>
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#48865}
      a9da0ce7
  4. 20 Oct, 2017 1 commit
    • Benedikt Meurer's avatar
      [ic] Ensure that we make progress on KeyedLoadIC polymorphic name. · d5c19aa9
      Benedikt Meurer authored
      In the special case of KeyedLoadIC, where the key that is passed in is a
      Name that is always the same we only checked for identity in both the
      stub and the TurboFan case, which works fine for symbols and internalized
      strings, but doesn't really work with non-internalized strings, where
      the identity check will fail, the runtime will internalize the string,
      and the IC will then see the original internalized string again and not
      progress in the feedback lattice. This leads to tricky deoptimization
      loops in TurboFan and constantly missing ICs.
      
      This adds fixes the stub to always try to internalize strings first
      when the identity check fails and then doing the check again. If the
      name is not found in the string table we miss, since in that case the
      string cannot match the previously recorded feedback name (which is
      always a unique name).
      
      In TurboFan we represent this checks with new CheckEqualsSymbol and
      CheckEqualsInternalizedString operators, which validate the previously
      recorded feedback, and the CheckEqualsInternalizedString operator does
      the attempt to internalize the input.
      
      Bug: v8:6936, v8:6948, v8:6969
      Change-Id: I3f3b4a587c67f00f7c4b60d239eb98a9626fe04a
      Reviewed-on: https://chromium-review.googlesource.com/730224Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
      Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#48784}
      d5c19aa9
  5. 16 Oct, 2017 1 commit
  6. 28 Apr, 2017 1 commit
  7. 26 Jan, 2017 1 commit
  8. 02 Jan, 2017 1 commit
    • bmeurer's avatar
      [crankshaft] Don't bailout on uninitialized access to arguments object. · 380a0207
      bmeurer authored
      When Crankshaft compiles a keyed load to arguments, it disabled
      optimization unless the KEYED_LOAD_IC for the access was monomorphic.
      But that's too restrictive, since it will also disable optimization
      for this function when the access is on a path that was never executed
      so far.
      
      This was spotted in the Node.js core function EventEmitter.prototype.emit,
      which was no longer optimizable with Crankshaft using latest V8.
      
      R=jarin@chromium.org
      BUG=v8:5790
      
      Review-Url: https://codereview.chromium.org/2607303002
      Cr-Commit-Position: refs/heads/master@{#42005}
      380a0207