1. 20 Jul, 2017 1 commit
  2. 14 Jul, 2017 2 commits
    • Caitlin Potter's avatar
      [generators] remove SuspendFlags enum and related code · 53553f5d
      Caitlin Potter authored
      SuspendFlags was originally used by the suspend operation to determine
      which field to record the bytecode offset of a suspended generator, and
      the value the generator was resumed with. For async generators, await
      operations would use a separate field, in order to preserve the previous
      yield input value. This was important to ensure `function.sent`
      continued to function correctly.
      
      As function.sent is being retired, this allows the removal of support
      for that. Given that this was the only real need for SuspendFlags in the
      first place (with other uses tacked on as a hack), this involves several
      other changes as well:
      
      - Modification of MacroAssembler AssertGeneratorObject. No longer
        accepts a SuspendFlags parameter to determine which type of check to
        perform.
      - Removal of `flags` operand from SuspendGenerator bytecode, and the
        GeneratorStore js-operator.
      - Removal of `flags` parameter from ResumeGeneratorTrampoline builtins.
      - Removal of Runtime functions, interpreter intrinsics and
        AccessBuilders associated with the [[await_input_or_debug_pos]] field
        in JSAsyncGeneratorObject, as this field no longer exists.
      - Addition of a new `Yield` AST node (subclass of Suspend) in order to
        prevent the need for the other SuspendFlag values.
      
      BUG=v8:5855
      TBR=bmeurer@chromium.org
      
      Change-Id: Iff2881e4742497fe5b774915e988c3d9d8fbe487
      Reviewed-on: https://chromium-review.googlesource.com/570485
      Commit-Queue: Caitlin Potter <caitp@igalia.com>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46683}
      53553f5d
    • Benedikt Meurer's avatar
      [turbofan] Inline Map and Set iterators into optimized code. · 1287688c
      Benedikt Meurer authored
      This CL inlines the following builtins into TurboFan
      
        - %MapIteratorPrototype%.next
        - %SetIteratorPrototype%.next
      
      following the design that we are using for Array iteration already
      (different instance types for the different kinds of iterators). Details
      can be found in the relevant design document at:
      
        https://docs.google.com/document/d/13z1fvRVpe_oEroplXEEX0a3WK94fhXorHjcOMsDmR-8
      
      The key to great performance here is to ensure that the inlined code
      allows escape analysis and scalar replacement of aggregates to remove
      the allocations for the iterator itself as well as the iterator results
      and potential key/value arrays in the simple case of a for-of loop (and
      by extension also in other constructs that reduce to for-of loops
      internally), i.e.:
      
        const s = new Set;
        // ... do something with s
        for (const x of s) {
          // ...
        }
      
      Here the for-of loop shouldn't perform any allocations of helper
      objects.
      
      Drive-by-fix: Replace the ExistsJSMapWithness in JSBuiltinReducer with a more
      general HasInstanceTypeWitness, similar to what's in JSCallReducer. Also
      migrate the {Map,Set}.prototype.size getter inlining to the
      JSBuiltinReducer, so that everything is in a single place.
      
      R=jgruber@chromium.org
      
      Bug: v8:6344, v8:6571, chromium:740122
      Change-Id: I09cb506fe26ed3e10d7dcb2f95ec4415e639582d
      Reviewed-on: https://chromium-review.googlesource.com/570159Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46655}
      1287688c
  3. 13 Jul, 2017 3 commits
  4. 11 Jul, 2017 1 commit
  5. 03 Jul, 2017 1 commit
    • Mathias Bynens's avatar
      [elements] Rename Has*Elements and Is*ElementsKind methods · 7915cf93
      Mathias Bynens authored
      Commit 26c00f4a improved the names of
      most FAST_* elements kinds in the enum. This patch updates the matching
      Has*Elements and Is*ElementsKind method names accordingly.
      
      - HasFastSmiElements => HasSmiElements
      - IsFastSmiElementsKind => IsSmiElementsKind
      - HasFastObjectElements => HasObjectElements
      - IsFastObjectElementsKind => IsObjectElementsKind
      - HasFastSmiOrObjectElements => HasSmiOrObjectElements
      - IsFastSmiOrObjectElementsKind => IsSmiOrObjectElementsKind
      - HasFastDoubleElements => HasDoubleElements
      - IsFastDoubleElementsKind => IsDoubleElementsKind
      - HasFastHoleyElements => HasHoleyElements
      - IsFastHoleyElementsKind => IsHoleyElementsKind
      
      Additionally, FastHoleyElementsUsage is renamed to HoleyElementsUsage.
      
      BUG=v8:6548
      
      Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng
      Change-Id: Ie8f3d01eb43e909cbc6c372d88c5fbc4dfc2ac04
      Reviewed-on: https://chromium-review.googlesource.com/558356Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Commit-Queue: Mathias Bynens <mathias@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46376}
      7915cf93
  6. 30 Jun, 2017 1 commit
    • Mathias Bynens's avatar
      [elements] Rename FAST elements kinds · 26c00f4a
      Mathias Bynens authored
      The `FAST_` prefix doesn’t make much sense — they’re all just different cases
      with their own optimizations. Packedness being implicit (e.g. `FAST_ELEMENTS`
      vs. `FAST_HOLEY_ELEMENTS`) is not ideal, either.
      
      This patch renames the FAST elements kinds as follows:
      
      - e.g. FAST_ELEMENTS => PACKED_ELEMENTS
      - e.g. FAST_HOLEY_ELEMENTS => HOLEY_ELEMENTS
      
      The following exceptions are left intact, for lack of a better name:
      
      - FAST_SLOPPY_ARGUMENTS_ELEMENTS
      - SLOW_SLOPPY_ARGUMENTS_ELEMENTS
      - FAST_STRING_WRAPPER_ELEMENTS
      - SLOW_STRING_WRAPPER_ELEMENTS
      
      This makes it easier to reason about elements kinds, and less confusing to
      explain how they’re used.
      
      R=jkummerow@chromium.org, cbruni@chromium.org
      BUG=v8:6548
      
      Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng
      Change-Id: Ie7c6bee85583c3d84b730f7aebbd70c1efa38af9
      Reviewed-on: https://chromium-review.googlesource.com/556032Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
      Reviewed-by: 's avatarCamillo Bruni <cbruni@chromium.org>
      Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
      Reviewed-by: 's avatarAndreas Haas <ahaas@chromium.org>
      Commit-Queue: Mathias Bynens <mathias@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46361}
      26c00f4a
  7. 26 Jun, 2017 1 commit
  8. 21 Jun, 2017 1 commit
  9. 02 Jun, 2017 1 commit
  10. 09 May, 2017 1 commit
  11. 28 Apr, 2017 1 commit
  12. 27 Apr, 2017 1 commit
  13. 26 Apr, 2017 1 commit
  14. 13 Apr, 2017 1 commit
  15. 29 Mar, 2017 1 commit
    • Caitlin Potter's avatar
      [async-iteration] implement AsyncGenerator · bf463c4d
      Caitlin Potter authored
      - Introduce new struct AsyncGeneratorRequest, which holds
        information pertinent to resuming execution of an
        AsyncGenerator, such as the Promise associated with the async
        generator request. It is intended to be used as a singly
        linked list, and holds a pointer to the next item in te queue.
      
      - Introduce JSAsyncGeneratorObject (subclass of
        JSGeneratorObject), which includes several new internal fields
        (`queue` which contains a singly linked list of
        AsyncGeneratorRequest objects, and `await_input` which
        contains the sent value from an Await expression (This is
        necessary to prevent function.sent (used by yield*) from
        having the sent value observably overwritten during
        execution).
      
      - Modify SuspendGenerator to accept a set of Flags, which
        indicate whether the suspend is for a Yield or Await, and
        whether it takes place on an async generator or ES6
        generator.
      
      - Introduce interpreter intrinsics and TF intrinsic lowering for
        accessing the await input of an async generator
      
      - Modify the JSGeneratorStore operator to understand whether or
        not it's suspending for a normal yield, or an AsyncGenerator
        Await. This ensures appropriate registers are stored.
      
      - Add versions of ResumeGeneratorTrampoline which store the
        input value in a different field depending on wether it's an
        AsyncGenerator Await resume, or an ordinary resume. Also modifies
        whether debug code will assert that the generator object is a
        JSGeneratorObject or a JSAsyncGeneratorObject depending on the
        resume type.
      
      BUG=v8:5855
      R=bmeurer@chromium.org, rmcilroy@chromium.org, jgruber@chromium.org,
      littledan@chromium.org, neis@chromium.org
      TBR=marja@chromium.org
      
      Change-Id: I9d58df1d344465fc937fe7eed322424204497187
      Reviewed-on: https://chromium-review.googlesource.com/446961
      Commit-Queue: Caitlin Potter <caitp@igalia.com>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarHannes Payer <hpayer@chromium.org>
      Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#44240}
      bf463c4d
  16. 30 Jan, 2017 1 commit
    • mvstanton's avatar
      [TypeFeedbackVector] Combine the literals array and the feedback vector. · 93f05b64
      mvstanton authored
      They have the same lifetime. It's a match!
      
      Both structures are native context dependent and dealt with (creation,
      clearing, gathering feedback) at the same time. By treating the spaces used
      for literal boilerplates as feedback vector slots, we no longer have to keep
      track of the materialized literal count elsewhere.
      
      A follow-on CL removes even more parser infrastructure related to this count.
      
      BUG=v8:5456
      
      Review-Url: https://codereview.chromium.org/2655853010
      Cr-Commit-Position: refs/heads/master@{#42771}
      93f05b64
  17. 19 Jan, 2017 2 commits
    • bmeurer's avatar
      [turbofan] Recognize a couple of collection.js intrinsics. · d389e49b
      bmeurer authored
      Right now running the Map and Set builtins with I+TF would tank
      seriously because these builtins are still built on top of a
      couple of classic intrinsics that TurboFan doesn't understand.
      Middle-term the idea is to replace the Map and Set builtins with
      a CodeStubAssembler based solution, but for that might not be
      ready in time, so adding support for a couple of the critical
      intrinsics to mitigate the tankage a bit, namely
      
       - %_JSCollectionGetTable,
       - %_TheHole, and
       - %_StringGetRawHashField.
      
      Together these double the score on most of the existing performance
      tests for collections.
      
      R=yangguo@chromium.org
      BUG=v8:5267
      
      Review-Url: https://codereview.chromium.org/2647733002
      Cr-Commit-Position: refs/heads/master@{#42521}
      d389e49b
    • jkummerow's avatar
      Internalize strings in-place (reland^3) · 3e915e12
      jkummerow authored
      using newly introduced ThinStrings, which store a pointer to the actual,
      internalized string they represent.
      
      BUG=v8:4520
      
      (Previously landed as #42168 / af51befe)
      (Previously landed as #42193 / 4c699e34)
      (Previously landed as #42235 / ec45e6ed)
      
      Review-Url: https://codereview.chromium.org/2549773002
      Cr-Commit-Position: refs/heads/master@{#42503}
      3e915e12
  18. 18 Jan, 2017 1 commit
  19. 13 Jan, 2017 3 commits
  20. 12 Jan, 2017 1 commit
  21. 11 Jan, 2017 2 commits
  22. 10 Jan, 2017 3 commits
  23. 09 Jan, 2017 1 commit
  24. 02 Jan, 2017 1 commit
  25. 04 Dec, 2016 1 commit
  26. 21 Nov, 2016 1 commit
  27. 14 Nov, 2016 1 commit
  28. 11 Nov, 2016 1 commit
    • bmeurer's avatar
      [turbofan] Introduce an ExternalPointer type. · 7d24f1ae
      bmeurer authored
      This adds a new ExternalPointer type, which is an Internal type that is
      used for ExternalReferences and other pointer values, like the pointers
      into the asm.js heap. It also adds a PointerConstant operator, which we
      use to represents these raw constants (we can probably remove that
      particular operator again once WebAssembly ships with the validator).
      
      R=mvstanton@chromium.org
      BUG=v8:5267,v8:5270
      
      Review-Url: https://codereview.chromium.org/2494753003
      Cr-Commit-Position: refs/heads/master@{#40923}
      7d24f1ae
  29. 10 Nov, 2016 2 commits
  30. 05 Oct, 2016 1 commit