1. 01 Aug, 2017 2 commits
    • Leszek Swirski's avatar
      [heap] Remove IC age · 77cd8416
      Leszek Swirski authored
      Remove the concept of IC age from the heap and SFI, since it no
      longer does anything useful.
      
      Change-Id: I4ce466efc77c007c09c0889bae09ec6a0c907e33
      Reviewed-on: https://chromium-review.googlesource.com/593623
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47041}
      77cd8416
    • Benedikt Meurer's avatar
      [builtins] Speed-up Object.prototype.toString. · 31800120
      Benedikt Meurer authored
      The @@toStringTag lookup in Object.prototype.toString causes quite a
      lot of overhead and oftentimes dominates the builtin performance. These
      lookups are almost always negative, especially for primitive values,
      and Object.prototype.toString is often used to implement predicates
      (like in Node core or in AngularJS), so having a way to skip the
      negative lookup yields big performance gains.
      
      This CL introduces a "MayHaveInterestingSymbols" bit on every map,
      which says whether instances with this map may have an interesting
      symbol. Currently only @@toStringTag is considered an interesting
      symbol, but we can extend that in the future.
      
      In the Object.prototype.toString we can use the interesting symbols
      bit to do a quick check on the prototype chain to see if there are
      any maps that might have the @@toStringTag, and if not, we can just
      immediately return the result, which is very fast because it's derived
      from the instance type. This also avoids the ToObject conversions for
      primitive values, which is important, since this causes unnecessary
      GC traffic and in for example AngularJS, strings are also often probed
      via the Object.prototype.toString based predicates.
      
      This boosts Speedometer/AngularJS by over 3% and Speedometer overall
      by up to 1%. On the microbenchmark from the similar SpiderMonkey bug
      (https://bugzilla.mozilla.org/show_bug.cgi?id=1369042), we go from
      roughly 450ms to 70ms, which corresponds to a 6.5x improvement.
      
      ```
      function f() {
          var res = "";
          var a = [1, 2, 3];
          var toString = Object.prototype.toString;
          var t = new Date;
          for (var i = 0; i < 5000000; i++)
      	res = toString.call(a);
          print(new Date - t);
          return res;
      }
      f();
      ```
      
      The design document at https://goo.gl/e8CruQ has some additional
      data points.
      
      TBR=ulan@chromium.org
      
      Bug: v8:6654
      Change-Id: I31932cf41ecddad079d294e2c322a852af0ed244
      Reviewed-on: https://chromium-review.googlesource.com/593620
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarCamillo Bruni <cbruni@chromium.org>
      Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47034}
      31800120
  2. 31 Jul, 2017 3 commits
    • Alexey Kozyatinskiy's avatar
      [inspector] speedup Debugger.getPossibleBreakpoints · f455986f
      Alexey Kozyatinskiy authored
      In current implementation we call PrepareForBreakPoints during getting possible breakpoints, this call produce GC and iteration through heap, but it's not needed before we set real breakpoint.
      
      On my machine, get-possible-breakpoints-master.js without CL takes ~200ms, with CL it takes ~60 ms. Running test without getPossibleBreakpoints protocol call takes ~50 ms. It means that we have (200-50)/(60-50) = 15 times faster getPossibleBreakpoints.
      
      R=yangguo@chromium.org,jgrubber@chromium.org
      
      Bug: none
      Change-Id: If12e41cd87dbba11a89aa5895e3b4d88123d7d3d
      Reviewed-on: https://chromium-review.googlesource.com/591027
      Commit-Queue: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
      Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47021}
      f455986f
    • Leszek Swirski's avatar
      [objects] Move deopt_count to FeedbackVector · b34d2ec6
      Leszek Swirski authored
      Since any deopt-count-based heuristics should be native context
      dependent, it belongs in the feedback vector rather than the SFI.
      
      Bug: v8:6402
      Change-Id: I30804d58bc1dec9150558e6ee21ee5b4dbd36c8d
      Reviewed-on: https://chromium-review.googlesource.com/593661
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47014}
      b34d2ec6
    • Leszek Swirski's avatar
      [sfi] Remove opt_count · e47d1757
      Leszek Swirski authored
      Remove opt_count from SFI, which only had two real uses:
      
        1. Detecting OSR in tests -- replaced with a stack walk in
           %GetOptimizationStatus
        2. Naming optimization log files -- replaced with the
           optimization id
      
      This allows us to remove a field from the SFI, moving the
      bailout reason into the counters field.
      
      As a drive-by, add optimization marker information (e.g.
      marked for optimization) to the optimization status.
      
      Change-Id: Id77deb5dd5439dfba058a7e1e1748de26b717d0d
      Reviewed-on: https://chromium-review.googlesource.com/592028Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#47009}
      e47d1757
  3. 28 Jul, 2017 2 commits
    • Jakob Kummerow's avatar
      Refactor TransitionArray access · e567dd3a
      Jakob Kummerow authored
      in preparation for caching StoreIC-Transition handlers in there.
      This CL should not change behavior or performance.
      
      The TransitionArray class no longer serves a dual purpose; it is now
      simply the data structure serving that role. Further, it now supports
      storing transitioning handlers in its "target" slot, which in turn have
      a WeakCell pointing to the transition target (but this functionality
      is not being used yet).
      
      The interface for accessing a map's transitions, previously implemented
      as a set of static functions, is now handled by the TransitionsAccessor
      class. It distinguishes the following internal states:
      - kPrototypeInfo: map is a prototype map, will never cache any transitions.
      - kUninitialized: map can cache transitions, but doesn't have any.
      - kWeakCell: map caches a single transition, stored inline. Formerly known
                   as "IsSimpleTransition".
      - kFullTransitionArray: map uses a TransitionArray to store transitions.
      - kTuple3Handler, kFixedArrayHandler: to be used in the future for caching
                                            transitioning handlers.
      
      Change-Id: If2aa68390981f96f317b958445a6e0b935c2a14e
      Reviewed-on: https://chromium-review.googlesource.com/550118Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
      Commit-Queue: Jakob Kummerow <jkummerow@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46981}
      e567dd3a
    • Leszek Swirski's avatar
      [compiler] Kill the deoptimized too many times bailout · 1c02987d
      Leszek Swirski authored
      With TurboFan, there should no longer be any deopt loops (aside from
      bugs). So, the "too many deopts" bailout is no longer needed, at least
      in its current form.
      
      This fixes an issue where deopt counts are leaked between native
      contexts, resulting in optimization being disabled unnecessarily.
      
      Bug: v8:6402
      Change-Id: Ia06374ae6b5c2d473bcdd8eef1284bf02766c2fb
      Reviewed-on: https://chromium-review.googlesource.com/588894
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
      Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46961}
      1c02987d
  4. 27 Jul, 2017 3 commits
  5. 25 Jul, 2017 2 commits
  6. 24 Jul, 2017 6 commits
  7. 22 Jul, 2017 1 commit
  8. 21 Jul, 2017 2 commits
  9. 20 Jul, 2017 2 commits
    • Adam Klein's avatar
      Revert "[literals] Introduce CreateEmptyArrayLiteral Bytecode" · 62f83377
      Adam Klein authored
      This reverts commit 4851745f.
      
      Reason for revert: Top crasher on Canary, see https://crbug.com/746935
      
      Original change's description:
      > [literals] Introduce CreateEmptyArrayLiteral Bytecode
      > 
      > Empty Array literals are amongst the most commonly used literal types on our
      > top25 page list. Using a custom bytecode we can drop the boilerplate for empty
      > Array literals alltogether. However, we still need a proper AllocationSite to
      > track ElementsKind transitions.
      > 
      > Bug: v8:6211
      > Change-Id: Id5dbdac0ea8e24dd474e679c902c6e4a2957af1d
      > Reviewed-on: https://chromium-review.googlesource.com/567079
      > Commit-Queue: Camillo Bruni <cbruni@chromium.org>
      > Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
      > Reviewed-by: Igor Sheludko <ishell@chromium.org>
      > Reviewed-by: Michael Starzinger <mstarzinger@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#46752}
      
      TBR=rmcilroy@chromium.org,mstarzinger@chromium.org,cbruni@chromium.org,ishell@chromium.org,rmcilroy@google.com
      Bug: v8:6211, chromium:746935
      
      Change-Id: Ibf19a923688c071d03bad8661a10e08f8414db56
      Reviewed-on: https://chromium-review.googlesource.com/580193
      Commit-Queue: Adam Klein <adamk@chromium.org>
      Reviewed-by: 's avatarAdam Klein <adamk@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46804}
      62f83377
    • Michael Lippautz's avatar
      [heap] Parallel Scavenge · a45048e2
      Michael Lippautz authored
      Bug: chromium:738865
      Change-Id: Ie18574bb067438816238e2cf930e6d2a7bc5ecef
      Reviewed-on: https://chromium-review.googlesource.com/570579
      Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46798}
      a45048e2
  10. 19 Jul, 2017 4 commits
  11. 17 Jul, 2017 1 commit
    • Leszek Swirski's avatar
      Revert "[runtime] Move profiler ticks from SFI to feedback vector" · 14c5c4fd
      Leszek Swirski authored
      This reverts commit a2fcdc7c.
      
      Reason for revert: Large regressions in RCS (https://chromeperf.appspot.com/group_report?bug_id=740126)
      
      Original change's description:
      > [runtime] Move profiler ticks from SFI to feedback vector
      > 
      > Instead of counting profiler ticks on the shared function info (which is
      > shared between native contexts), count them on the feedback vector
      > (which is not). This allows us to continue pushing optimization
      > decisions off the SFI, onto the feedback vector.
      > 
      > Note that a side-effect of this is that ICs don't have to walk the stack
      > to reset profiler ticks, as they can access the feedback vector directly
      > from their feedback nexus.
      > 
      > Change-Id: I232ae9e759fca75cd89d393148a4ff42caa2646f
      > Reviewed-on: https://chromium-review.googlesource.com/544888
      > Reviewed-by: Igor Sheludko <ishell@chromium.org>
      > Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
      > Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#46411}
      
      TBR=rmcilroy@chromium.org,leszeks@chromium.org,ishell@chromium.org
      
      # Not skipping CQ checks because original CL landed > 1 day ago.
      
      Change-Id: Id587e4172e300c420f93c49744a2a0e66696edf8
      Reviewed-on: https://chromium-review.googlesource.com/574227
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46702}
      14c5c4fd
  12. 14 Jul, 2017 3 commits
  13. 13 Jul, 2017 3 commits
  14. 11 Jul, 2017 1 commit
  15. 10 Jul, 2017 4 commits
    • jgruber's avatar
      Add Smi::ToInt helper method · 14e80e5c
      jgruber authored
      This adds a convenience method for the common Smi to int conversion
      pattern.
      
      Bug: 
      Change-Id: I7d7b171c36cfec5f6d10c60f1d9c3e06e3aed0fa
      Reviewed-on: https://chromium-review.googlesource.com/563205
      Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
      Reviewed-by: 's avatarAndreas Rossberg <rossberg@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46516}
      14e80e5c
    • Jaroslav Sevcik's avatar
      Initial optimization of Map.prototype.(get|has) in Turbofan. · aba708a1
      Jaroslav Sevcik authored
      This introduces a new builtin (MapLookupHashIndex) and uses it
      in Turbofan to compute Map.p.get and Map.p.has.
      
      I have also refactored the existing CSA builtins for Map.p.get and 
      Map.p.has to use the new builtin under the hood.
      
      The code for the lookup has been also improved.
      - Specialized lookups for smis, strings, heap numbers and everything else.
        - the advantage is that we can use fast equalities for the lookup.
        - strings can likely be optimized further if we care about the 
          internalized string fast case.
      - Instead of a call to runtime to get the hash code, we now call C directly.
      
      In the Turbofan implementation itself, there are no special optimizations yet.
      The next step is to teach load elimination to reuse the indexes from
      previous calls of MapLookupHashIndex. 
      
      BUG=v8:6410
      
      Change-Id: I0b1a70493eb031d444e51002f6b2cc1f30ea2b68
      Reviewed-on: https://chromium-review.googlesource.com/560169Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Commit-Queue: Jaroslav Sevcik <jarin@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46510}
      aba708a1
    • Benedikt Meurer's avatar
      [builtins] Port Map and Set iterators to CodeStubAssembler. · 3b84cbfe
      Benedikt Meurer authored
      This is the next step towards faster Map and Set iteration. It
      introduces the appropriate instance types for Map and Set
      iterators (following the pattern for Array iterators) and migrates
      the following builtins to the CodeStubAssembler:
      
        - Set.prototype.entries
        - Set.prototype.values
        - Map.prototype.entries
        - Map.prototype.keys
        - Map.prototype.values
        - %SetIteratorPrototype%.next
        - %MapIteratorPrototype%.next
      
      This already provides a significant performance boost for regular
      for-of iteration of Sets and Maps, by a factor of 5-10 depending
      on the input. The final step will be to inline some fast-paths
      into TurboFan.
      
      Drive-by-fix: Remove obsolete %IsJSSetIterator and %IsJSMapIterator
      intrinsics and runtime functions.
      
      TBR=jgruber@chromium.org
      
      Bug: v8:6344, v8:6571, chromium:740122
      Change-Id: I3ab0ee49e2afe8d4295707a5ecbd51adda621918
      Reviewed-on: https://chromium-review.googlesource.com/563626
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46497}
      3b84cbfe
    • Michael Achenbach's avatar
      Revert "[builtins] Port Map and Set iterators to CodeStubAssembler." · 5a6e24e9
      Michael Achenbach authored
      This reverts commit 3f22832b.
      
      Reason for revert: Layout tests:
      https://build.chromium.org/p/client.v8.fyi/builders/V8-Blink%20Linux%2064/builds/16849
      
      Original change's description:
      > [builtins] Port Map and Set iterators to CodeStubAssembler.
      > 
      > This is the next step towards faster Map and Set iteration. It
      > introduces the appropriate instance types for Map and Set
      > iterators (following the pattern for Array iterators) and migrates
      > the following builtins to the CodeStubAssembler:
      > 
      >   - Set.prototype.entries
      >   - Set.prototype.values
      >   - Map.prototype.entries
      >   - Map.prototype.keys
      >   - Map.prototype.values
      >   - %SetIteratorPrototype%.next
      >   - %MapIteratorPrototype%.next
      > 
      > This already provides a significant performance boost for regular
      > for-of iteration of Sets and Maps, by a factor of 5-10 depending
      > on the input. The final step will be to inline some fast-paths
      > into TurboFan.
      > 
      > Drive-by-fix: Remove obsolete %IsJSSetIterator and %IsJSMapIterator
      > intrinsics and runtime functions.
      > 
      > Bug: v8:6571, chromium:740122
      > Change-Id: Iad7a7dec643d8f8b5799327f89a351108ae856bf
      > Reviewed-on: https://chromium-review.googlesource.com/563399
      > Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      > Reviewed-by: Jakob Gruber <jgruber@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#46492}
      
      TBR=jgruber@chromium.org,bmeurer@chromium.org
      
      # Not skipping CQ checks because original CL landed > 1 day ago.
      
      Bug: v8:6571, chromium:740122
      Change-Id: Iadb48d72e3b85ec8ad880e50ab7912c5502caf07
      Reviewed-on: https://chromium-review.googlesource.com/564419Reviewed-by: 's avatarMichael Achenbach <machenbach@chromium.org>
      Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46495}
      5a6e24e9
  16. 08 Jul, 2017 1 commit
    • Benedikt Meurer's avatar
      [builtins] Port Map and Set iterators to CodeStubAssembler. · 3f22832b
      Benedikt Meurer authored
      This is the next step towards faster Map and Set iteration. It
      introduces the appropriate instance types for Map and Set
      iterators (following the pattern for Array iterators) and migrates
      the following builtins to the CodeStubAssembler:
      
        - Set.prototype.entries
        - Set.prototype.values
        - Map.prototype.entries
        - Map.prototype.keys
        - Map.prototype.values
        - %SetIteratorPrototype%.next
        - %MapIteratorPrototype%.next
      
      This already provides a significant performance boost for regular
      for-of iteration of Sets and Maps, by a factor of 5-10 depending
      on the input. The final step will be to inline some fast-paths
      into TurboFan.
      
      Drive-by-fix: Remove obsolete %IsJSSetIterator and %IsJSMapIterator
      intrinsics and runtime functions.
      
      Bug: v8:6571, chromium:740122
      Change-Id: Iad7a7dec643d8f8b5799327f89a351108ae856bf
      Reviewed-on: https://chromium-review.googlesource.com/563399
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46492}
      3f22832b