1. 12 May, 2021 1 commit
    • Jakob Gruber's avatar
      [compiler] Use acquire-release semantics for NativeContext fields · 35d4022c
      Jakob Gruber authored
      Reads from the compiler thread require either 1. the last write to
      happen before the compiler thread starts, or 2. acquire-release
      semantics. For simplicity, this CL converts all NativeContext field
      writes to be acq-rel. With the usual exception of writes from
      generated code (these are limited for NativeContexts though).
      
      The situation of context sets/gets is still somewhat complex:
      
      - Context::get/set are relaxed (but don't use the corresponding tag)
      - Context::get(.., kAcquireLoad) and Context::set(.., kReleaseStore)
        are acquire-release.
      - Context::set_foo (defined for all native context fields) uses
        kReleaseStore underneath.
      - Context::get_foo (defined for all native context fields) uses
        the default relaxed getter. The get_foo(kAcquireLoad) variant uses
        the acquire getter.
      - NativeContext hides the default relaxed setter since all
        NativeContext sets should be acq-rel.
      
      Ideally (future work), this should be simplified and made more explicit.
      For example, get/set_foo could move to the NativeContext class, and we
      could reevaluate whether we really need both relaxed and acq-rel
      semantics (the pairing non-atomic/acq-rel feels more natural lets
      tsan find concurrency issues).
      
      Bug: v8:7790
      Change-Id: I25efd37ece758da5a11dc11c6ae913e4975f4d20
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2891575Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#74524}
      35d4022c
  2. 10 May, 2021 2 commits
  3. 06 May, 2021 1 commit
    • Fanchen Kong's avatar
      Collect receiver to feedback for prototype.apply · 519c82ce
      Fanchen Kong authored
      When a function is invoked by prototype.apply, it may undergo following transformation in the JSCallReducer:
      	receiver.apply(this, args) ->
      	this.receiver(...args) Since the new target (also the receiver of apply()) is not collected to the feedback slot, further speculative optimization on the new target is not available if the new target
      is not a heapconstant.
      
      With this CL, the receiver will be collected to the feedback instead of the target if the target is a prototype.apply. It may improve the performance of the following usecase by ~80%.
      
      function reduceArray(func, arr, r) {
          for (var i = 0, len = arr.length; i < len; i++) {
                  r = func.apply(null, r, arr[i]);
          }
          return r;
      }
      
      var a = 0; for (var i = 0; i < 10000000; i++) {
          a += reduceArray(Math.imul, [5,6,2,3,7,6,8,3,7,9,2,5,], 1);
      }
      console.log(a);
      
      This CL also improves the runTime score of JetStream2/richards-wasm by ~45% in default, ~60% with --turbo-inline-js-wasm-calls.
      
      Change-Id: I542eb8d3fcb592f4e0993af93ba1af70e89c3982
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2639813
      Commit-Queue: Fanchen Kong <fanchen.kong@intel.com>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#74413}
      519c82ce
  4. 27 Apr, 2021 1 commit
  5. 20 Apr, 2021 1 commit
  6. 08 Apr, 2021 2 commits
  7. 03 Feb, 2021 1 commit
    • Seth Brenith's avatar
      [torque] Add @relaxedRead annotation · cffd8bc8
      Seth Brenith authored
      When generating getters, Torque needs to decide whether to perform a
      normal or relaxed load. Thus far, it has used the somewhat non-obvious
      logic that any indexed field with tagged non-smi data gets relaxed
      loads. This change adds a new annotation @relaxedRead to be consistent
      with the existing @relaxedWrite annotation. I added @relaxedRead
      annotations on any field that previously had this automatic behavior and
      whose getter is called, except for those in ScopeInfo because I'm
      relatively confident that it doesn't need relaxed access.
      
      Bug: v8:7793
      Change-Id: I9987eea13760b967f1b8a3189b69742e55140c30
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2600113
      Commit-Queue: Seth Brenith <seth.brenith@microsoft.com>
      Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Reviewed-by: 's avatarNico Hartmann <nicohartmann@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#72499}
      cffd8bc8
  8. 11 Nov, 2020 1 commit
  9. 06 Aug, 2020 2 commits
    • Tobias Tebbi's avatar
      Reland "[torque] typed context slot access" · 6647f292
      Tobias Tebbi authored
      This is a reland of 408e7240
      Change: Allow CSA load elimination accross code comments
      
      Original change's description:
      > [torque] typed context slot access
      >
      > This introduces a new type Slot<ContextType, SlotType> that is used
      > for enum values used to access context slots.
      > Together with new types for the various custom contexts used in
      > Torque, this results in fairly type-safe access to context slots,
      > including the NativeContext's slots.
      >
      > Drive-by changes:
      > - Introduce a new header file to specify headers needed for
      >   generated CSA headers, to reduce the amount of includes specified
      >   in implementation-visitor.cc
      > - Port AllocateSyntheticFunctionContext to Torque.
      >
      > Bug: v8:7793
      > Change-Id: I509a128916ca408eeeb636a9bcc376b2cc868532
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2335064
      > Commit-Queue: Tobias Tebbi <tebbi@chromium.org>
      > Reviewed-by: Seth Brenith <seth.brenith@microsoft.com>
      > Cr-Commit-Position: refs/heads/master@{#69249}
      
      Bug: v8:7793
      Change-Id: I1fe100d8d62e8220524eddb8ecc4faa85219748d
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2339462Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Commit-Queue: Tobias Tebbi <tebbi@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#69264}
      6647f292
    • Jakob Gruber's avatar
      Revert "[torque] typed context slot access" · a55a2447
      Jakob Gruber authored
      This reverts commit 408e7240.
      
      Reason for revert: debug builds fail
      
      is_component_build = true
      is_debug = true
      use_goma = true
      v8_enable_backtrace = true
      v8_enable_debugging_features = true
      v8_enable_fast_mksnapshot = true
      v8_enable_slow_dchecks = true
      v8_enable_snapshot_code_comments = true
      v8_enable_verify_csa = true
      v8_optimized_debug = false
      v8_use_multi_snapshots = false
      
      # Fatal error in ../../src/compiler/backend/instruction-selector.cc, line 3088
      # Expected Turbofan static assert to hold, but got non-true input:
        static_assert(nativeContext == LoadNativeContext(context)) at src/builtins/promise-resolve.tq:45:5
      
      
      Original change's description:
      > [torque] typed context slot access
      > 
      > This introduces a new type Slot<ContextType, SlotType> that is used
      > for enum values used to access context slots.
      > Together with new types for the various custom contexts used in
      > Torque, this results in fairly type-safe access to context slots,
      > including the NativeContext's slots.
      > 
      > Drive-by changes:
      > - Introduce a new header file to specify headers needed for
      >   generated CSA headers, to reduce the amount of includes specified
      >   in implementation-visitor.cc
      > - Port AllocateSyntheticFunctionContext to Torque.
      > 
      > Bug: v8:7793
      > Change-Id: I509a128916ca408eeeb636a9bcc376b2cc868532
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2335064
      > Commit-Queue: Tobias Tebbi <tebbi@chromium.org>
      > Reviewed-by: Seth Brenith <seth.brenith@microsoft.com>
      > Cr-Commit-Position: refs/heads/master@{#69249}
      
      TBR=tebbi@chromium.org,seth.brenith@microsoft.com
      
      Change-Id: I90c014022a808449aca4a9b9b3c3b8e036beb28e
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:7793
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2340903Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#69256}
      a55a2447
  10. 05 Aug, 2020 1 commit
    • Tobias Tebbi's avatar
      [torque] typed context slot access · 408e7240
      Tobias Tebbi authored
      This introduces a new type Slot<ContextType, SlotType> that is used
      for enum values used to access context slots.
      Together with new types for the various custom contexts used in
      Torque, this results in fairly type-safe access to context slots,
      including the NativeContext's slots.
      
      Drive-by changes:
      - Introduce a new header file to specify headers needed for
        generated CSA headers, to reduce the amount of includes specified
        in implementation-visitor.cc
      - Port AllocateSyntheticFunctionContext to Torque.
      
      Bug: v8:7793
      Change-Id: I509a128916ca408eeeb636a9bcc376b2cc868532
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2335064
      Commit-Queue: Tobias Tebbi <tebbi@chromium.org>
      Reviewed-by: 's avatarSeth Brenith <seth.brenith@microsoft.com>
      Cr-Commit-Position: refs/heads/master@{#69249}
      408e7240
  11. 03 Jul, 2020 1 commit
  12. 30 May, 2020 1 commit
  13. 28 May, 2020 1 commit
  14. 19 May, 2020 1 commit
  15. 15 May, 2020 1 commit
  16. 12 May, 2020 1 commit
  17. 11 May, 2020 1 commit
    • Seth Brenith's avatar
      [torque][cleanup] Simplify some Torque-defined classes · e7693985
      Seth Brenith authored
      This CL is pretty mechanical; I just iterated through some Torque
      classes making the following changes:
      
      - Use @generateCppClass if it seems easy to
      - Use @generatePrint if the existing printer doesn't do anything special
      - Fix up any imprecise field types
      
      It also includes two minor changes to implementation-visitor:
      
      - Add a new -inl.h file with the things needed for
        torque-generated/class-definitions-tq.cc so we don't need to keep
        changing the compiler when we add @generateCppClass.
      - Avoid emitting incorrect accessors for ExternalPointers. This isn't
        strictly necessary for correctness, as the accessors defined in C++
        already hide the ones inherited from generated code, but it makes me
        feel safer.
      
      Change-Id: I4d5a8ba6f86ebff57a0d147619212a3993b087c0
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2185824Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Commit-Queue: Seth Brenith <seth.brenith@microsoft.com>
      Cr-Commit-Position: refs/heads/master@{#67719}
      e7693985
  18. 08 May, 2020 1 commit
  19. 30 Apr, 2020 1 commit
  20. 06 Mar, 2020 1 commit
  21. 21 Jan, 2020 1 commit
  22. 09 Jan, 2020 1 commit
  23. 19 Dec, 2019 3 commits
  24. 18 Dec, 2019 1 commit
    • Nico Hartmann's avatar
      [torque] Enum language feature · fdc9fade
      Nico Hartmann authored
      This CL implements enums in Torque in three steps:
      
      1.) It implements necessary changes to Torque's type system. In
      particular, the constraints on constexpr types are relaxed such that
      constexpr types can exist without a corresponding non-constexpr
      version. Furthermore, constexpr and their non-constexpr counterpart
      need not be of the same kind of type. This allows an AbstractType to
      have a UnionType as its non-constexpr counterpart.
      
      2.) The enum feature itself is realized as a pure desugaring in the
      parser, where all required types, constants and macro specializations
      (like FromConstexpr<>) are generated from a simple enum declaration,
      such that enum entries are not just constants, but are namespace
      scoped and have distinct types so that they can be used within
      typeswitch constructs.
      
      3.) Almost all of the existing constants defined in torque
      (.tq files) are ported to new enum definitions.
      
      Bug: v8:10053
      Change-Id: I72426d3b1434f301fd690847e15603de0dc1021b
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1964392
      Commit-Queue: Nico Hartmann <nicohartmann@chromium.org>
      Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#65503}
      fdc9fade
  25. 18 Nov, 2019 1 commit
  26. 11 Nov, 2019 1 commit