1. 27 Jan, 2022 1 commit
    • Manos Koukoutos's avatar
      [wasm-gc] Implement iso-recursive types · fe531e1f
      Manos Koukoutos authored
      This CL replaces the equirecursive type system for wasm-gc with the
      isorecursive hybrid type system presented here:
      https://github.com/WebAssembly/gc/issues/257.
      
      In broad strokes, this includes the following changes:
      - In the module decoder, remove equirecursive types. Implement recursive
        type groups, subtype definitions, and function/struct/array
        definitions. Treat nominal modules as syntactic sugar of an
        isorecursive module, where all types belong in the same recursive
        group.
      - Remove rtt.sub and all related infrastructure.
      - Change subtyping to work with explicit supertypes only.
      - Add ValidSubtypeDefinition in subtyping, to check that subtype
        declarations are valid during decoding.
      - Remove the subtyping cache.
      - Add support for functions to have specific signature index in
        WasmModuleBuilder and in test-gc.cc.
      - Adapt tests.
      
      Current restrictions:
      - Recursive groups are not stored beyond decoding.
      - Type canonicalization is not implemented. No tests relying on types
        being considered identical post-canonicalization.
      - No cross-module subtyping is possible. Tests relying on cross-module
        subtyping have been commented out.
      
      Bug: v8:7748
      Change-Id: I69fd04ecc5611f6230c95d5c89d1c520163fffae
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3416239Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
      Commit-Queue: Manos Koukoutos <manoskouk@chromium.org>
      Cr-Commit-Position: refs/heads/main@{#78816}
      fe531e1f
  2. 10 Nov, 2021 1 commit
  3. 02 Nov, 2021 1 commit
    • Manos Koukoutos's avatar
      [wasm] Simplify 'ref' field for API-defined functions · 48b2b891
      Manos Koukoutos authored
      Design doc:  https://bit.ly/3jEVgzz
      
      Summary:
      We change the context for WasmJSFunction and WasmCapiFunction from a
      tuple containing the instance to a triple WasmAPIFunctionRef =
      {isolate root, context, callable}. This way we do not have to maintain
      the correct instance at runtime. Also, a few places in the code get
      simplified.
      
      Changes:
      - In WasmGraphBuilder, support having a WasmAPIFunctionRef at parameter
        0.
      - Remove unpacking of (instance, callable) tuple from code generators.
      - Remove the part in WasmGraphBuilder and LiftoffCompiler that used to
        set the instance field of the function reference.
      - Modify code that handles the 'ref' field in wasm-objects.*, factory.*
        and c-api.cc.
      - Fix the recorded safepoint address for arm when calling a C function
        from wasm.
      - (Drive-by) Remove WasmAllocatePair.
      
      Bug: v8:11510
      Change-Id: I2a4ef3abaf9da36c4a2d85b434965a40a289b9ec
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3236719
      Commit-Queue: Manos Koukoutos <manoskouk@chromium.org>
      Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
      Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
      Reviewed-by: 's avatarMaya Lekova <mslekova@chromium.org>
      Cr-Commit-Position: refs/heads/main@{#77639}
      48b2b891
  4. 04 Aug, 2021 1 commit
  5. 19 Jul, 2021 1 commit
    • Jakob Gruber's avatar
      [compiler] Make JSFunction bg-serialized · 0dba97f8
      Jakob Gruber authored
      This wraps up the transition away from kSerialized ref kinds.
      
      Since JSFunctionRef is a complex type, we don't attempt full
      consistency on the background thread. Instead, we serialize functions
      on the background in a partially-racy manner, in which consistency
      between different JSFunction fields is *not* guaranteed. Consistency
      is later verified through a new compilation dependency kind during
      finalization.
      
      Bug: v8:7790, v8:12004
      Change-Id: Ic2b78af9c9fe183c8769d323132bb304b151dc75
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2968404
      Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#75789}
      0dba97f8
  6. 24 Jun, 2021 1 commit
  7. 07 Jun, 2021 1 commit
  8. 23 Mar, 2021 1 commit
  9. 26 Jan, 2021 1 commit
    • Paolo Severini's avatar
      [test][turbofan] Add %ObserveNode intrinsic for node-specific tests · 4e9f6513
      Paolo Severini authored
      (Initially copied from nicohartmann@ CL
      https://chromium-review.googlesource.com/c/v8/v8/+/2135631)
      
      This CL adds a new intrinsic %ObserveNode(expr) which has noop semantics
      but triggers the new NodeObserver set on the OptimizedCompilationInfo
      when the node generated for expr is created or changed in any phase
      (until EffectControlLinearization).
      
      This provides the infrastructure to write reasonable unit tests that
      check for the construction of or lowering to specific nodes (e.g.
      depending on feedback).
      
      When %ObserveNode(expr) is used an object of class ObserveNodeManager is
      registered to every Reducer/GraphReducer and is notified by the Reducer
      with all node changes. The same logic is added to classes
      SimplifiedLowering/RepresentationSelector, which do not inherit from
      class Reducer.
      
      Observed Node modifications currently are:
       * The Node Operator
       * The Node type
       * Node replacements
      
      A first use case (cctest/test-sloppy-equality.cc) is included in this CL.
      
      Change-Id: Idc5a5e38af8b1d9a2ec5021bf821c4e4e1406220
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2555219
      Commit-Queue: Paolo Severini <paolosev@microsoft.com>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Reviewed-by: 's avatarNico Hartmann <nicohartmann@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#72331}
      4e9f6513
  10. 10 Nov, 2020 1 commit
  11. 09 Nov, 2020 2 commits
  12. 05 Nov, 2020 2 commits
  13. 28 Oct, 2020 1 commit
  14. 03 Apr, 2020 1 commit
    • Ross McIlroy's avatar
      [TurboProp] Remove unreachable successor basic blocks from schedule. · 4a2ef63c
      Ross McIlroy authored
      Effect-control-linearizer will update a basic block to connect it
      directly to the end node if it has an Unreachable node. Usually the
      block would already have been connected directly to end (via a Throw
      node) already, however in some cases it can be connected indirectly
      (via a branch, where both end in a throw node).
      
      If this happens, and the Effect-control-linearizer is maintaining the
      schedule (e.g., for TurboProp), it will cause the end block to have
      unreachable predecessor blocks, which can cause issues with the
      register allocator.
      
      To fix this, have the BasicBlockUpdater remove all successor blocks
      from the schedule, when they become Unreachable. Also add some tests
      to cover this in effect-control-linearizer-unittests.
      
      BUG=v8:10332,v8:9684
      
      Change-Id: Ibce140e6d1f61751a86247e6f8c36075723a1e55
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2120537
      Commit-Queue: Ross McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#66994}
      4a2ef63c
  15. 19 Feb, 2020 1 commit
  16. 10 Dec, 2019 1 commit
  17. 05 Dec, 2019 1 commit
  18. 30 Aug, 2019 1 commit
  19. 28 Aug, 2019 1 commit
  20. 05 Jul, 2019 1 commit
  21. 01 Jul, 2019 1 commit
  22. 23 May, 2019 2 commits
  23. 03 May, 2019 2 commits
  24. 02 May, 2019 1 commit
  25. 12 Apr, 2019 1 commit
  26. 18 Mar, 2019 2 commits
  27. 25 Feb, 2019 1 commit
  28. 08 Feb, 2019 1 commit
  29. 02 Nov, 2018 1 commit
  30. 22 Oct, 2018 1 commit
  31. 18 Oct, 2018 2 commits
  32. 16 Oct, 2018 1 commit
  33. 12 Oct, 2018 1 commit
  34. 21 Sep, 2018 1 commit