1. 21 Oct, 2020 1 commit
    • Jakob Gruber's avatar
      Reland "Reland "[deoptimizer] Change deopt entries into builtins"" · c7cb9bec
      Jakob Gruber authored
      This is a reland of fbfa9bf4
      
      The arm64 was missing proper codegen for CFI, thus sizes were off.
      
      Original change's description:
      > Reland "[deoptimizer] Change deopt entries into builtins"
      >
      > This is a reland of 7f58ced7
      >
      > It fixes the different exit size emitted on x64/Atom CPUs due to
      > performance tuning in TurboAssembler::Call. Additionally, add
      > cctests to verify the fixed size exits.
      >
      > Original change's description:
      > > [deoptimizer] Change deopt entries into builtins
      > >
      > > While the overall goal of this commit is to change deoptimization
      > > entries into builtins, there are multiple related things happening:
      > >
      > > - Deoptimization entries, formerly stubs (i.e. Code objects generated
      > >   at runtime, guaranteed to be immovable), have been converted into
      > >   builtins. The major restriction is that we now need to preserve the
      > >   kRootRegister, which was formerly used on most architectures to pass
      > >   the deoptimization id. The solution differs based on platform.
      > > - Renamed DEOPT_ENTRIES_OR_FOR_TESTING code kind to FOR_TESTING.
      > > - Removed heap/ support for immovable Code generation.
      > > - Removed the DeserializerData class (no longer needed).
      > > - arm64: to preserve 4-byte deopt exits, introduced a new optimization
      > >   in which the final jump to the deoptimization entry is generated
      > >   once per Code object, and deopt exits can continue to emit a
      > >   near-call.
      > > - arm,ia32,x64: change to fixed-size deopt exits. This reduces exit
      > >   sizes by 4/8, 5, and 5 bytes, respectively.
      > >
      > > On arm the deopt exit size is reduced from 12 (or 16) bytes to 8 bytes
      > > by using the same strategy as on arm64 (recalc deopt id from return
      > > address). Before:
      > >
      > >  e300a002       movw r10, <id>
      > >  e59fc024       ldr ip, [pc, <entry offset>]
      > >  e12fff3c       blx ip
      > >
      > > After:
      > >
      > >  e59acb35       ldr ip, [r10, <entry offset>]
      > >  e12fff3c       blx ip
      > >
      > > On arm64 the deopt exit size remains 4 bytes (or 8 bytes in same cases
      > > with CFI). Additionally, up to 4 builtin jumps are emitted per Code
      > > object (max 32 bytes added overhead per Code object). Before:
      > >
      > >  9401cdae       bl <entry offset>
      > >
      > > After:
      > >
      > >  # eager deoptimization entry jump.
      > >  f95b1f50       ldr x16, [x26, <eager entry offset>]
      > >  d61f0200       br x16
      > >  # lazy deoptimization entry jump.
      > >  f95b2b50       ldr x16, [x26, <lazy entry offset>]
      > >  d61f0200       br x16
      > >  # the deopt exit.
      > >  97fffffc       bl <eager deoptimization entry jump offset>
      > >
      > > On ia32 the deopt exit size is reduced from 10 to 5 bytes. Before:
      > >
      > >  bb00000000     mov ebx,<id>
      > >  e825f5372b     call <entry>
      > >
      > > After:
      > >
      > >  e8ea2256ba     call <entry>
      > >
      > > On x64 the deopt exit size is reduced from 12 to 7 bytes. Before:
      > >
      > >  49c7c511000000 REX.W movq r13,<id>
      > >  e8ea2f0700     call <entry>
      > >
      > > After:
      > >
      > >  41ff9560360000 call [r13+<entry offset>]
      > >
      > > Bug: v8:8661,v8:8768
      > > Change-Id: I13e30aedc360474dc818fecc528ce87c3bfeed42
      > > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2465834
      > > Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      > > Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
      > > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > > Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
      > > Cr-Commit-Position: refs/heads/master@{#70597}
      >
      > Tbr: ulan@chromium.org, tebbi@chromium.org, rmcilroy@chromium.org
      > Bug: v8:8661,v8:8768,chromium:1140165
      > Change-Id: Ibcd5c39c58a70bf2b2ac221aa375fc68d495e144
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2485506
      > Reviewed-by: Jakob Gruber <jgruber@chromium.org>
      > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#70655}
      
      Tbr: ulan@chromium.org, tebbi@chromium.org, rmcilroy@chromium.org
      Bug: v8:8661
      Bug: v8:8768
      Bug: chromium:1140165
      Change-Id: I471cc94fc085e527dc9bfb5a84b96bd907c2333f
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2488682Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#70672}
      c7cb9bec
  2. 20 Oct, 2020 3 commits
    • Maya Lekova's avatar
      Revert "Reland "[deoptimizer] Change deopt entries into builtins"" · 7c7aa4fa
      Maya Lekova authored
      This reverts commit fbfa9bf4.
      
      Reason for revert: Seems to break arm64 sim CFI build (please see DeoptExitSizeIfFixed) - https://ci.chromium.org/p/v8/builders/ci/V8%20Linux%20-%20arm64%20-%20sim%20-%20CFI/2808
      
      Original change's description:
      > Reland "[deoptimizer] Change deopt entries into builtins"
      >
      > This is a reland of 7f58ced7
      >
      > It fixes the different exit size emitted on x64/Atom CPUs due to
      > performance tuning in TurboAssembler::Call. Additionally, add
      > cctests to verify the fixed size exits.
      >
      > Original change's description:
      > > [deoptimizer] Change deopt entries into builtins
      > >
      > > While the overall goal of this commit is to change deoptimization
      > > entries into builtins, there are multiple related things happening:
      > >
      > > - Deoptimization entries, formerly stubs (i.e. Code objects generated
      > >   at runtime, guaranteed to be immovable), have been converted into
      > >   builtins. The major restriction is that we now need to preserve the
      > >   kRootRegister, which was formerly used on most architectures to pass
      > >   the deoptimization id. The solution differs based on platform.
      > > - Renamed DEOPT_ENTRIES_OR_FOR_TESTING code kind to FOR_TESTING.
      > > - Removed heap/ support for immovable Code generation.
      > > - Removed the DeserializerData class (no longer needed).
      > > - arm64: to preserve 4-byte deopt exits, introduced a new optimization
      > >   in which the final jump to the deoptimization entry is generated
      > >   once per Code object, and deopt exits can continue to emit a
      > >   near-call.
      > > - arm,ia32,x64: change to fixed-size deopt exits. This reduces exit
      > >   sizes by 4/8, 5, and 5 bytes, respectively.
      > >
      > > On arm the deopt exit size is reduced from 12 (or 16) bytes to 8 bytes
      > > by using the same strategy as on arm64 (recalc deopt id from return
      > > address). Before:
      > >
      > >  e300a002       movw r10, <id>
      > >  e59fc024       ldr ip, [pc, <entry offset>]
      > >  e12fff3c       blx ip
      > >
      > > After:
      > >
      > >  e59acb35       ldr ip, [r10, <entry offset>]
      > >  e12fff3c       blx ip
      > >
      > > On arm64 the deopt exit size remains 4 bytes (or 8 bytes in same cases
      > > with CFI). Additionally, up to 4 builtin jumps are emitted per Code
      > > object (max 32 bytes added overhead per Code object). Before:
      > >
      > >  9401cdae       bl <entry offset>
      > >
      > > After:
      > >
      > >  # eager deoptimization entry jump.
      > >  f95b1f50       ldr x16, [x26, <eager entry offset>]
      > >  d61f0200       br x16
      > >  # lazy deoptimization entry jump.
      > >  f95b2b50       ldr x16, [x26, <lazy entry offset>]
      > >  d61f0200       br x16
      > >  # the deopt exit.
      > >  97fffffc       bl <eager deoptimization entry jump offset>
      > >
      > > On ia32 the deopt exit size is reduced from 10 to 5 bytes. Before:
      > >
      > >  bb00000000     mov ebx,<id>
      > >  e825f5372b     call <entry>
      > >
      > > After:
      > >
      > >  e8ea2256ba     call <entry>
      > >
      > > On x64 the deopt exit size is reduced from 12 to 7 bytes. Before:
      > >
      > >  49c7c511000000 REX.W movq r13,<id>
      > >  e8ea2f0700     call <entry>
      > >
      > > After:
      > >
      > >  41ff9560360000 call [r13+<entry offset>]
      > >
      > > Bug: v8:8661,v8:8768
      > > Change-Id: I13e30aedc360474dc818fecc528ce87c3bfeed42
      > > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2465834
      > > Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      > > Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
      > > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > > Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
      > > Cr-Commit-Position: refs/heads/master@{#70597}
      >
      > Tbr: ulan@chromium.org, tebbi@chromium.org, rmcilroy@chromium.org
      > Bug: v8:8661,v8:8768,chromium:1140165
      > Change-Id: Ibcd5c39c58a70bf2b2ac221aa375fc68d495e144
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2485506
      > Reviewed-by: Jakob Gruber <jgruber@chromium.org>
      > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#70655}
      
      TBR=ulan@chromium.org,rmcilroy@chromium.org,jgruber@chromium.org,tebbi@chromium.org
      
      Change-Id: I4739a3475bfd8ee0cfbe4b9a20382f91a6ef1bf0
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:8661
      Bug: v8:8768
      Bug: chromium:1140165
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2485223Reviewed-by: 's avatarMaya Lekova <mslekova@chromium.org>
      Commit-Queue: Maya Lekova <mslekova@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#70658}
      7c7aa4fa
    • Jakob Gruber's avatar
      Reland "[deoptimizer] Change deopt entries into builtins" · fbfa9bf4
      Jakob Gruber authored
      This is a reland of 7f58ced7
      
      It fixes the different exit size emitted on x64/Atom CPUs due to
      performance tuning in TurboAssembler::Call. Additionally, add
      cctests to verify the fixed size exits.
      
      Original change's description:
      > [deoptimizer] Change deopt entries into builtins
      >
      > While the overall goal of this commit is to change deoptimization
      > entries into builtins, there are multiple related things happening:
      >
      > - Deoptimization entries, formerly stubs (i.e. Code objects generated
      >   at runtime, guaranteed to be immovable), have been converted into
      >   builtins. The major restriction is that we now need to preserve the
      >   kRootRegister, which was formerly used on most architectures to pass
      >   the deoptimization id. The solution differs based on platform.
      > - Renamed DEOPT_ENTRIES_OR_FOR_TESTING code kind to FOR_TESTING.
      > - Removed heap/ support for immovable Code generation.
      > - Removed the DeserializerData class (no longer needed).
      > - arm64: to preserve 4-byte deopt exits, introduced a new optimization
      >   in which the final jump to the deoptimization entry is generated
      >   once per Code object, and deopt exits can continue to emit a
      >   near-call.
      > - arm,ia32,x64: change to fixed-size deopt exits. This reduces exit
      >   sizes by 4/8, 5, and 5 bytes, respectively.
      >
      > On arm the deopt exit size is reduced from 12 (or 16) bytes to 8 bytes
      > by using the same strategy as on arm64 (recalc deopt id from return
      > address). Before:
      >
      >  e300a002       movw r10, <id>
      >  e59fc024       ldr ip, [pc, <entry offset>]
      >  e12fff3c       blx ip
      >
      > After:
      >
      >  e59acb35       ldr ip, [r10, <entry offset>]
      >  e12fff3c       blx ip
      >
      > On arm64 the deopt exit size remains 4 bytes (or 8 bytes in same cases
      > with CFI). Additionally, up to 4 builtin jumps are emitted per Code
      > object (max 32 bytes added overhead per Code object). Before:
      >
      >  9401cdae       bl <entry offset>
      >
      > After:
      >
      >  # eager deoptimization entry jump.
      >  f95b1f50       ldr x16, [x26, <eager entry offset>]
      >  d61f0200       br x16
      >  # lazy deoptimization entry jump.
      >  f95b2b50       ldr x16, [x26, <lazy entry offset>]
      >  d61f0200       br x16
      >  # the deopt exit.
      >  97fffffc       bl <eager deoptimization entry jump offset>
      >
      > On ia32 the deopt exit size is reduced from 10 to 5 bytes. Before:
      >
      >  bb00000000     mov ebx,<id>
      >  e825f5372b     call <entry>
      >
      > After:
      >
      >  e8ea2256ba     call <entry>
      >
      > On x64 the deopt exit size is reduced from 12 to 7 bytes. Before:
      >
      >  49c7c511000000 REX.W movq r13,<id>
      >  e8ea2f0700     call <entry>
      >
      > After:
      >
      >  41ff9560360000 call [r13+<entry offset>]
      >
      > Bug: v8:8661,v8:8768
      > Change-Id: I13e30aedc360474dc818fecc528ce87c3bfeed42
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2465834
      > Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      > Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
      > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#70597}
      
      Tbr: ulan@chromium.org, tebbi@chromium.org, rmcilroy@chromium.org
      Bug: v8:8661,v8:8768,chromium:1140165
      Change-Id: Ibcd5c39c58a70bf2b2ac221aa375fc68d495e144
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2485506Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#70655}
      fbfa9bf4
    • Jakob Gruber's avatar
      Revert "[deoptimizer] Change deopt entries into builtins" · 8bc9a794
      Jakob Gruber authored
      This reverts commit 7f58ced7.
      
      Reason for revert: Segfaults on Atom_x64 https://ci.chromium.org/p/v8-internal/builders/ci/v8_linux64_atom_perf/5686?
      
      Original change's description:
      > [deoptimizer] Change deopt entries into builtins
      >
      > While the overall goal of this commit is to change deoptimization
      > entries into builtins, there are multiple related things happening:
      >
      > - Deoptimization entries, formerly stubs (i.e. Code objects generated
      >   at runtime, guaranteed to be immovable), have been converted into
      >   builtins. The major restriction is that we now need to preserve the
      >   kRootRegister, which was formerly used on most architectures to pass
      >   the deoptimization id. The solution differs based on platform.
      > - Renamed DEOPT_ENTRIES_OR_FOR_TESTING code kind to FOR_TESTING.
      > - Removed heap/ support for immovable Code generation.
      > - Removed the DeserializerData class (no longer needed).
      > - arm64: to preserve 4-byte deopt exits, introduced a new optimization
      >   in which the final jump to the deoptimization entry is generated
      >   once per Code object, and deopt exits can continue to emit a
      >   near-call.
      > - arm,ia32,x64: change to fixed-size deopt exits. This reduces exit
      >   sizes by 4/8, 5, and 5 bytes, respectively.
      >
      > On arm the deopt exit size is reduced from 12 (or 16) bytes to 8 bytes
      > by using the same strategy as on arm64 (recalc deopt id from return
      > address). Before:
      >
      >  e300a002       movw r10, <id>
      >  e59fc024       ldr ip, [pc, <entry offset>]
      >  e12fff3c       blx ip
      >
      > After:
      >
      >  e59acb35       ldr ip, [r10, <entry offset>]
      >  e12fff3c       blx ip
      >
      > On arm64 the deopt exit size remains 4 bytes (or 8 bytes in same cases
      > with CFI). Additionally, up to 4 builtin jumps are emitted per Code
      > object (max 32 bytes added overhead per Code object). Before:
      >
      >  9401cdae       bl <entry offset>
      >
      > After:
      >
      >  # eager deoptimization entry jump.
      >  f95b1f50       ldr x16, [x26, <eager entry offset>]
      >  d61f0200       br x16
      >  # lazy deoptimization entry jump.
      >  f95b2b50       ldr x16, [x26, <lazy entry offset>]
      >  d61f0200       br x16
      >  # the deopt exit.
      >  97fffffc       bl <eager deoptimization entry jump offset>
      >
      > On ia32 the deopt exit size is reduced from 10 to 5 bytes. Before:
      >
      >  bb00000000     mov ebx,<id>
      >  e825f5372b     call <entry>
      >
      > After:
      >
      >  e8ea2256ba     call <entry>
      >
      > On x64 the deopt exit size is reduced from 12 to 7 bytes. Before:
      >
      >  49c7c511000000 REX.W movq r13,<id>
      >  e8ea2f0700     call <entry>
      >
      > After:
      >
      >  41ff9560360000 call [r13+<entry offset>]
      >
      > Bug: v8:8661,v8:8768
      > Change-Id: I13e30aedc360474dc818fecc528ce87c3bfeed42
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2465834
      > Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      > Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
      > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#70597}
      
      TBR=ulan@chromium.org,rmcilroy@chromium.org,jgruber@chromium.org,tebbi@chromium.org
      
      # Not skipping CQ checks because original CL landed > 1 day ago.
      
      Bug: v8:8661,v8:8768,chromium:1140165
      Change-Id: I3df02ab42f6e02233d9f6fb80e8bb18f76870d91
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2485504Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
      Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#70649}
      8bc9a794
  3. 19 Oct, 2020 1 commit
    • Jakob Gruber's avatar
      [deoptimizer] Change deopt entries into builtins · 7f58ced7
      Jakob Gruber authored
      While the overall goal of this commit is to change deoptimization
      entries into builtins, there are multiple related things happening:
      
      - Deoptimization entries, formerly stubs (i.e. Code objects generated
        at runtime, guaranteed to be immovable), have been converted into
        builtins. The major restriction is that we now need to preserve the
        kRootRegister, which was formerly used on most architectures to pass
        the deoptimization id. The solution differs based on platform.
      - Renamed DEOPT_ENTRIES_OR_FOR_TESTING code kind to FOR_TESTING.
      - Removed heap/ support for immovable Code generation.
      - Removed the DeserializerData class (no longer needed).
      - arm64: to preserve 4-byte deopt exits, introduced a new optimization
        in which the final jump to the deoptimization entry is generated
        once per Code object, and deopt exits can continue to emit a
        near-call.
      - arm,ia32,x64: change to fixed-size deopt exits. This reduces exit
        sizes by 4/8, 5, and 5 bytes, respectively.
      
      On arm the deopt exit size is reduced from 12 (or 16) bytes to 8 bytes
      by using the same strategy as on arm64 (recalc deopt id from return
      address). Before:
      
       e300a002       movw r10, <id>
       e59fc024       ldr ip, [pc, <entry offset>]
       e12fff3c       blx ip
      
      After:
      
       e59acb35       ldr ip, [r10, <entry offset>]
       e12fff3c       blx ip
      
      On arm64 the deopt exit size remains 4 bytes (or 8 bytes in same cases
      with CFI). Additionally, up to 4 builtin jumps are emitted per Code
      object (max 32 bytes added overhead per Code object). Before:
      
       9401cdae       bl <entry offset>
      
      After:
      
       # eager deoptimization entry jump.
       f95b1f50       ldr x16, [x26, <eager entry offset>]
       d61f0200       br x16
       # lazy deoptimization entry jump.
       f95b2b50       ldr x16, [x26, <lazy entry offset>]
       d61f0200       br x16
       # the deopt exit.
       97fffffc       bl <eager deoptimization entry jump offset>
      
      On ia32 the deopt exit size is reduced from 10 to 5 bytes. Before:
      
       bb00000000     mov ebx,<id>
       e825f5372b     call <entry>
      
      After:
      
       e8ea2256ba     call <entry>
      
      On x64 the deopt exit size is reduced from 12 to 7 bytes. Before:
      
       49c7c511000000 REX.W movq r13,<id>
       e8ea2f0700     call <entry>
      
      After:
      
       41ff9560360000 call [r13+<entry offset>]
      
      Bug: v8:8661,v8:8768
      Change-Id: I13e30aedc360474dc818fecc528ce87c3bfeed42
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2465834
      Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#70597}
      7f58ced7
  4. 13 Oct, 2020 3 commits
    • Igor Sheludko's avatar
      Reland^2 "[csa] Fix semantics of PopAndReturn" · d2ab873d
      Igor Sheludko authored
      This is a reland of 3593ee83
      
      The MSAN doesn't seem to be considering initializing stores via inline
      assembly as such (in a new cctest helper GetStackPointer()), so this
      reland attempt fixes the issue and ensures that the MSAN bot is happy.
      
      Original change's description:
      > Reland "[csa] Fix semantics of PopAndReturn"
      >
      > This is a reland of 5e5eaf79
      >
      > This CL fixes the "function returns address of local variable" issue
      > which GCC was complaining about by using inline assembly instead of
      > address of a local for getting stack pointer approximation.
      >
      > Original change's description:
      > > [csa] Fix semantics of PopAndReturn
      > >
      > > This CL prohibits using PopAndReturn from the builtins that
      > > have calling convention with arguments on the stack.
      > >
      > > This CL also updates the PopAndReturn tests so that even off-by-one
      > > errors in the number of poped arguments are caught which was not the
      > > case before.
      > >
      > > Motivation:
      > >
      > > PopAndReturn is supposed to be using ONLY in CSA/Torque builtins for
      > > dropping ALL JS arguments that are currently located on the stack.
      > > Disallowing PopAndReturn in builtins with stack arguments simplifies
      > > semantics of this instruction because in case of presence of declared
      > > stack parameters it's impossible to distinguish the following cases:
      > > 1) stack parameter is included in JS arguments (and therefore it will
      > >    be dropped as a part of 'pop' number of arguments),
      > > 2) stack parameter is NOT included in JS arguments (and therefore it
      > >    should be dropped in ADDITION to the 'pop' number of arguments).
      > >
      > > This issue wasn't noticed before because builtins with stack parameters
      > > relied on adapter frames machinery to ensure that the expected
      > > parameters are present on the stack, but on the same time the adapter
      > > frame tearing down code was effectively recovering the stack pointer
      > > potentially broken by the CSA builtin.
      > >
      > > Once we get rid of the arguments adapter frames keeping stack pointer
      > > in a valid state becomes crucial.
      > >
      > > Bug: v8:5269, v8:10201
      > > Change-Id: Id3ea9730bb0d41d17999c73136c4dfada374a822
      > > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2460819
      > > Commit-Queue: Igor Sheludko <ishell@chromium.org>
      > > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > > Cr-Commit-Position: refs/heads/master@{#70454}
      >
      > Tbr: tebbi@chromium.org
      > Bug: v8:5269
      > Bug: v8:10201
      > Change-Id: Ic1a05fcc4efd2068538bff28189545cfd2617d9b
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2465839
      > Reviewed-by: Igor Sheludko <ishell@chromium.org>
      > Reviewed-by: Victor Gomes <victorgomes@chromium.org>
      > Commit-Queue: Igor Sheludko <ishell@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#70483}
      
      Tbr: tebbi@chromium.org
      Cq-Include-Trybots: luci.v8.try:v8_linux64_msan_rel_ng
      Bug: v8:5269
      Bug: v8:10201
      Change-Id: Ib09af2d1260bb42ac26aabface14e6b83b3efec4
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2467847
      Commit-Queue: Igor Sheludko <ishell@chromium.org>
      Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
      Reviewed-by: 's avatarVictor Gomes <victorgomes@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#70492}
      d2ab873d
    • Clemens Backes's avatar
      Revert "Reland "[csa] Fix semantics of PopAndReturn"" · c40b2b7e
      Clemens Backes authored
      This reverts commit 3593ee83.
      
      Reason for revert: MSan issues: https://ci.chromium.org/p/v8/builders/ci/V8%20Linux%20-%20arm64%20-%20sim%20-%20MSAN/34798
      
      Original change's description:
      > Reland "[csa] Fix semantics of PopAndReturn"
      >
      > This is a reland of 5e5eaf79
      >
      > This CL fixes the "function returns address of local variable" issue
      > which GCC was complaining about by using inline assembly instead of
      > address of a local for getting stack pointer approximation.
      >
      > Original change's description:
      > > [csa] Fix semantics of PopAndReturn
      > >
      > > This CL prohibits using PopAndReturn from the builtins that
      > > have calling convention with arguments on the stack.
      > >
      > > This CL also updates the PopAndReturn tests so that even off-by-one
      > > errors in the number of poped arguments are caught which was not the
      > > case before.
      > >
      > > Motivation:
      > >
      > > PopAndReturn is supposed to be using ONLY in CSA/Torque builtins for
      > > dropping ALL JS arguments that are currently located on the stack.
      > > Disallowing PopAndReturn in builtins with stack arguments simplifies
      > > semantics of this instruction because in case of presence of declared
      > > stack parameters it's impossible to distinguish the following cases:
      > > 1) stack parameter is included in JS arguments (and therefore it will
      > >    be dropped as a part of 'pop' number of arguments),
      > > 2) stack parameter is NOT included in JS arguments (and therefore it
      > >    should be dropped in ADDITION to the 'pop' number of arguments).
      > >
      > > This issue wasn't noticed before because builtins with stack parameters
      > > relied on adapter frames machinery to ensure that the expected
      > > parameters are present on the stack, but on the same time the adapter
      > > frame tearing down code was effectively recovering the stack pointer
      > > potentially broken by the CSA builtin.
      > >
      > > Once we get rid of the arguments adapter frames keeping stack pointer
      > > in a valid state becomes crucial.
      > >
      > > Bug: v8:5269, v8:10201
      > > Change-Id: Id3ea9730bb0d41d17999c73136c4dfada374a822
      > > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2460819
      > > Commit-Queue: Igor Sheludko <ishell@chromium.org>
      > > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > > Cr-Commit-Position: refs/heads/master@{#70454}
      >
      > Tbr: tebbi@chromium.org
      > Bug: v8:5269
      > Bug: v8:10201
      > Change-Id: Ic1a05fcc4efd2068538bff28189545cfd2617d9b
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2465839
      > Reviewed-by: Igor Sheludko <ishell@chromium.org>
      > Reviewed-by: Victor Gomes <victorgomes@chromium.org>
      > Commit-Queue: Igor Sheludko <ishell@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#70483}
      
      TBR=tebbi@chromium.org,ishell@chromium.org,victorgomes@chromium.org
      
      Change-Id: Icbd71d744a519a58e49feb917109228631b9d9a3
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:5269
      Bug: v8:10201
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2467846Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
      Commit-Queue: Clemens Backes <clemensb@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#70485}
      c40b2b7e
    • Igor Sheludko's avatar
      Reland "[csa] Fix semantics of PopAndReturn" · 3593ee83
      Igor Sheludko authored
      This is a reland of 5e5eaf79
      
      This CL fixes the "function returns address of local variable" issue
      which GCC was complaining about by using inline assembly instead of
      address of a local for getting stack pointer approximation.
      
      Original change's description:
      > [csa] Fix semantics of PopAndReturn
      >
      > This CL prohibits using PopAndReturn from the builtins that
      > have calling convention with arguments on the stack.
      >
      > This CL also updates the PopAndReturn tests so that even off-by-one
      > errors in the number of poped arguments are caught which was not the
      > case before.
      >
      > Motivation:
      >
      > PopAndReturn is supposed to be using ONLY in CSA/Torque builtins for
      > dropping ALL JS arguments that are currently located on the stack.
      > Disallowing PopAndReturn in builtins with stack arguments simplifies
      > semantics of this instruction because in case of presence of declared
      > stack parameters it's impossible to distinguish the following cases:
      > 1) stack parameter is included in JS arguments (and therefore it will
      >    be dropped as a part of 'pop' number of arguments),
      > 2) stack parameter is NOT included in JS arguments (and therefore it
      >    should be dropped in ADDITION to the 'pop' number of arguments).
      >
      > This issue wasn't noticed before because builtins with stack parameters
      > relied on adapter frames machinery to ensure that the expected
      > parameters are present on the stack, but on the same time the adapter
      > frame tearing down code was effectively recovering the stack pointer
      > potentially broken by the CSA builtin.
      >
      > Once we get rid of the arguments adapter frames keeping stack pointer
      > in a valid state becomes crucial.
      >
      > Bug: v8:5269, v8:10201
      > Change-Id: Id3ea9730bb0d41d17999c73136c4dfada374a822
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2460819
      > Commit-Queue: Igor Sheludko <ishell@chromium.org>
      > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#70454}
      
      Tbr: tebbi@chromium.org
      Bug: v8:5269
      Bug: v8:10201
      Change-Id: Ic1a05fcc4efd2068538bff28189545cfd2617d9b
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2465839Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
      Reviewed-by: 's avatarVictor Gomes <victorgomes@chromium.org>
      Commit-Queue: Igor Sheludko <ishell@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#70483}
      3593ee83
  5. 12 Oct, 2020 2 commits
    • Zhi An Ng's avatar
      Revert "[csa] Fix semantics of PopAndReturn" · d813f56c
      Zhi An Ng authored
      This reverts commit 5e5eaf79.
      
      Reason for revert: Failure on V8 Linux gcc https://ci.chromium.org/p/v8/builders/ci/V8%20Linux%20gcc/8929?
      
      Original change's description:
      > [csa] Fix semantics of PopAndReturn
      >
      > This CL prohibits using PopAndReturn from the builtins that
      > have calling convention with arguments on the stack.
      >
      > This CL also updates the PopAndReturn tests so that even off-by-one
      > errors in the number of poped arguments are caught which was not the
      > case before.
      >
      > Motivation:
      >
      > PopAndReturn is supposed to be using ONLY in CSA/Torque builtins for
      > dropping ALL JS arguments that are currently located on the stack.
      > Disallowing PopAndReturn in builtins with stack arguments simplifies
      > semantics of this instruction because in case of presence of declared
      > stack parameters it's impossible to distinguish the following cases:
      > 1) stack parameter is included in JS arguments (and therefore it will
      >    be dropped as a part of 'pop' number of arguments),
      > 2) stack parameter is NOT included in JS arguments (and therefore it
      >    should be dropped in ADDITION to the 'pop' number of arguments).
      >
      > This issue wasn't noticed before because builtins with stack parameters
      > relied on adapter frames machinery to ensure that the expected
      > parameters are present on the stack, but on the same time the adapter
      > frame tearing down code was effectively recovering the stack pointer
      > potentially broken by the CSA builtin.
      >
      > Once we get rid of the arguments adapter frames keeping stack pointer
      > in a valid state becomes crucial.
      >
      > Bug: v8:5269, v8:10201
      > Change-Id: Id3ea9730bb0d41d17999c73136c4dfada374a822
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2460819
      > Commit-Queue: Igor Sheludko <ishell@chromium.org>
      > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#70454}
      
      TBR=tebbi@chromium.org,ishell@chromium.org
      
      Change-Id: I2673982a8f51cbecf421af11b0ce5ad5031fb406
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:5269
      Bug: v8:10201
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2465656Reviewed-by: 's avatarZhi An Ng <zhin@chromium.org>
      Commit-Queue: Zhi An Ng <zhin@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#70458}
      d813f56c
    • Igor Sheludko's avatar
      [csa] Fix semantics of PopAndReturn · 5e5eaf79
      Igor Sheludko authored
      This CL prohibits using PopAndReturn from the builtins that
      have calling convention with arguments on the stack.
      
      This CL also updates the PopAndReturn tests so that even off-by-one
      errors in the number of poped arguments are caught which was not the
      case before.
      
      Motivation:
      
      PopAndReturn is supposed to be using ONLY in CSA/Torque builtins for
      dropping ALL JS arguments that are currently located on the stack.
      Disallowing PopAndReturn in builtins with stack arguments simplifies
      semantics of this instruction because in case of presence of declared
      stack parameters it's impossible to distinguish the following cases:
      1) stack parameter is included in JS arguments (and therefore it will
         be dropped as a part of 'pop' number of arguments),
      2) stack parameter is NOT included in JS arguments (and therefore it
         should be dropped in ADDITION to the 'pop' number of arguments).
      
      This issue wasn't noticed before because builtins with stack parameters
      relied on adapter frames machinery to ensure that the expected
      parameters are present on the stack, but on the same time the adapter
      frame tearing down code was effectively recovering the stack pointer
      potentially broken by the CSA builtin.
      
      Once we get rid of the arguments adapter frames keeping stack pointer
      in a valid state becomes crucial.
      
      Bug: v8:5269, v8:10201
      Change-Id: Id3ea9730bb0d41d17999c73136c4dfada374a822
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2460819
      Commit-Queue: Igor Sheludko <ishell@chromium.org>
      Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#70454}
      5e5eaf79
  6. 07 Oct, 2020 2 commits
  7. 01 Oct, 2020 1 commit
    • Dan Elphick's avatar
      [CSA] Tnodify CodeAssembler::Parameter · 74a9b9c4
      Dan Elphick authored
      CodeAssembler::Parameter now takes a Type template parameter and
      performs a checked cast to it. There is also UncheckedParameter which
      returns a TNode but doesn't check the cast. The original Parameter
      method is still there as UntypedParameter.
      
      Parameter<T>(x) in many cases replaces CAST(Parameter(x)), where the
      cast is performed inside Parameter. Since Parameter is not a macro,
      this means it cannot see the original expression or its file name and
      line number. So the error messages are vaguely useful, Parameter<T>()
      takes a SourceLocation parameter which with a default value of
      SourceLocation::Current(), which at least gives us the file name and
      line number for the error message.
      
      Bug: v8:6949, v8:10933
      Change-Id: I27157bec7dc7462210c1eb9c430c0180217d25c1
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2435106Reviewed-by: 's avatarBill Budge <bbudge@chromium.org>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarSantiago Aboy Solanes <solanes@chromium.org>
      Commit-Queue: Dan Elphick <delphick@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#70264}
      74a9b9c4
  8. 30 Sep, 2020 1 commit
    • Jakob Gruber's avatar
      Rename legacy code kinds · 29bcdaad
      Jakob Gruber authored
      CodeKind::OPTIMIZED_CODE -> TURBOFAN
      
      Kinds are now more fine-grained and distinguish between TF, TP, NCI.
      
      CodeKind::STUB -> DEOPT_ENTRIES_OR_FOR_TESTING
      
      Code stubs (like builtins, but generated at runtime) were removed from
      the codebase years ago, this is the last remnant. This kind is used
      only for deopt entries (which should be converted into builtins) and
      for tests.
      
      Change-Id: I67beb15377cb60f395e9b051b25f3e5764982e93
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2440335
      Auto-Submit: Jakob Gruber <jgruber@chromium.org>
      Commit-Queue: Mythri Alle <mythria@chromium.org>
      Reviewed-by: 's avatarMythri Alle <mythria@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#70234}
      29bcdaad
  9. 28 Sep, 2020 2 commits
  10. 22 Sep, 2020 1 commit
  11. 21 Sep, 2020 1 commit
  12. 11 Sep, 2020 1 commit
  13. 25 Aug, 2020 1 commit
  14. 19 Aug, 2020 1 commit
  15. 13 Aug, 2020 1 commit
  16. 12 Aug, 2020 1 commit
    • Santiago Aboy Solanes's avatar
      [compiler] Have one unique PersistentHandles container · 64828a54
      Santiago Aboy Solanes authored
      The (now unique)PersistentHandles container follows this path:
        1) PersistentHandles created via PersistentHandlesScope inside of
           CompilationHandleScope
        2) Owned by OptimizedCompilationInfo
        3) Owned by JSHeapBroker
        4) Owned by the broker's LocalHeap
        5) Back to the broker for a brief moment (after tearing down the
          LocalHeap as part of exiting LocalHeapScope)
        6) Back to OptimizedCompilationInfo when exiting the LocalHeapScope.
      
      There is a special case in GenerateCodeForTesting where the JSHeapBroker
      will not be retired in that same method. In this case, we need to
      re-attach the PersistentHandles container to the JSHeapBroker.
      
      The identity map of the persistent & canonical handles also gets passed
      around like the persistent handles. The only difference is that is
      created in the CanonicalHandleScope (i.e step 1) is different).
      
      Bug: v8:7790
      Change-Id: I2da77a7e08f3fd360a46b606c5fbda08c0af27df
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2332811
      Commit-Queue: Santiago Aboy Solanes <solanes@chromium.org>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Reviewed-by: 's avatarDominik Inführ <dinfuehr@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#69360}
      64828a54
  17. 05 Aug, 2020 1 commit
    • Jakob Gruber's avatar
      [nci] Replace CompilationTarget with a new Code::Kind value · c51041f4
      Jakob Gruber authored
      With the new Turbofan variants (NCI and Turboprop), we need a way to
      distinguish between them both during and after compilation. We
      initially introduced CompilationTarget to track the variant during
      compilation, but decided to reuse the code kind as the canonical spot to
      store this information instead.
      
      Why? Because it is an established mechanism, already available in most
      of the necessary spots (inside the pipeline, on Code objects, in
      profiling traces).
      
      This CL removes CompilationTarget and adds a new
      NATIVE_CONTEXT_INDEPENDENT kind, plus helper functions to determine
      various things about a given code kind (e.g.: does this code kind
      deopt?).
      
      As a (very large) drive-by, refactor both Code::Kind and
      AbstractCode::Kind into a new CodeKind enum class.
      
      Bug: v8:8888
      Change-Id: Ie858b9a53311b0731630be35cf5cd108dee95b39
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2336793
      Commit-Queue: Jakob Gruber <jgruber@chromium.org>
      Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarDominik Inführ <dinfuehr@chromium.org>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#69244}
      c51041f4
  18. 31 Jul, 2020 3 commits
  19. 29 Jul, 2020 1 commit
  20. 28 Jul, 2020 2 commits
  21. 24 Jul, 2020 1 commit
  22. 22 Jul, 2020 3 commits
    • Seth Brenith's avatar
      Profile-guided optimization of builtins · 922983df
      Seth Brenith authored
      Design doc:
      https://docs.google.com/document/d/1szInbXZfaErWW70d30hJsOLL0Es-l5_g8d2rXm1ZBqI/edit?usp=sharing
      
      V8 can already collect data about how many times each basic block in the
      builtins is run. This change enables using that data for profile-guided
      optimization. New comments in BUILD.gn describe how to use this feature.
      
      A few implementation details worth mentioning, which aren't covered in
      the design doc:
      
      - BasicBlockProfilerData currently contains an array of RPO numbers.
        However, this array is always just [0, 1, 2, 3, ...], so this change
        removes that array. A new DCHECK in BasicBlockInstrumentor::Instrument
        ensures that the removal is valid.
      
      - RPO numbers, while useful for printing data that matches with the
        stringified schedule, are not useful for matching profiling data with
        blocks that haven't been scheduled yet. This change adds a new array
        of block IDs in BasicBlockProfilerData, so that block counters can be
        used for PGO.
      
      - Basic block counters need to be written to a file so that they can be
        provided to a subsequent run of mksnapshot, but the design doc doesn't
        specify the transfer format or what file is used. In this change, I
        propose using the existing v8.log file for that purpose. Block count
        records look like this:
      
        block,TestLessThanHandler,37,29405
      
        This line indicates that block ID 37 in TestLessThanHandler was run
        29405 times. If multiple lines refer to the same block, the reader
        adds them all together. I like this format because it's easy to use:
        - V8 already has robust logic for creating the log file, naming it to
          avoid conflicts in multi-process situations, etc.
        - Line order doesn't matter, and interleaved writes from various
          logging sources are fine, given that V8 writes each line atomically.
        - Combining multiple sources of profiling data is as simple as
          concatenating their v8.log files together.
      
      - It is a good idea to avoid making any changes based on profiling data
        if the function being compiled doesn't match the one that was
        profiled, since it is common to use profiling data downloaded from a
        central lab which is updated only periodically. To check whether a
        function matches, I propose using a hash of the Graph state right
        before scheduling. This might be stricter than necessary, as some
        changes to the function might be small enough that the profile data is
        still relevant, but I'd rather err on the side of not making incorrect
        changes. This hash is also written to the v8.log file, in a line that
        looks like this:
      
        builtin_hash,LdaZeroHandler,3387822046
      
      Bug: v8:10470
      Change-Id: I429e5ce5efa94e01e7489deb3996012cf860cf13
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2220765
      Commit-Queue: Seth Brenith <seth.brenith@microsoft.com>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#69008}
      922983df
    • Richard Stotz's avatar
      [turbofan][wasm][arm] Improved saturated conversions float32 to int32. · 51b53dd3
      Richard Stotz authored
      Bug: v8:10720
      Change-Id: I7a05bfb3c87c4f0f5516608da5d42fdaff466536
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2304572
      Commit-Queue: Richard Stotz <rstz@chromium.org>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Reviewed-by: 's avatarAndreas Haas <ahaas@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#69001}
      51b53dd3
    • Richard Stotz's avatar
      [turbofan][wasm][arm64] Improved saturated conversions float32 to int32. · fafb4769
      Richard Stotz authored
      The design of this change was discussed here:
      https://docs.google.com/document/d/12otOj6SyXMXj0Dnnx9B6MGLMRwHPhg6RIZRazVw3tFA/
      
      Bug: v8:10720
      Change-Id: I8292dcf7272bdf4526a2d630b49fc374cdb01bdc
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2304570
      Commit-Queue: Richard Stotz <rstz@chromium.org>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Reviewed-by: 's avatarAndreas Haas <ahaas@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#68994}
      fafb4769
  23. 16 Jul, 2020 1 commit
  24. 15 Jul, 2020 1 commit
    • Victor Gomes's avatar
      [tests] Fix parameter indices in test-code-stub-assembler · ebcc39d5
      Victor Gomes authored
      The cctests were wrong, since they access the first parameter using `Parameter(0)`. They should instead use `Parameter(1)`, since the index 0 is the receiver, and the receiver is set to be always the undefined object in `FunctionTester::Call`.
      
      The reason it used to work is that the tests would set up an access to the stack with the wrong number of parameters, accessing only a stack suffix.
      
      Change-Id: I02b7ee97c8759c7aecda0338863b7727762df1ba
      Bug: v8:10201
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2299364
      Commit-Queue: Toon Verwaest <verwaest@chromium.org>
      Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
      Auto-Submit: Victor Gomes <victorgomes@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#68876}
      ebcc39d5
  25. 14 Jul, 2020 1 commit
  26. 10 Jul, 2020 2 commits
  27. 06 Jul, 2020 1 commit