v8/src
Jakob Gruber fbfa9bf4ec Reland "[deoptimizer] Change deopt entries into builtins"
This is a reland of 7f58ced72e

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}
2020-10-20 12:30:23 +00:00
..
api [api] Add Isolate::GetEmbeddedCodeRange 2020-10-13 08:55:54 +00:00
asmjs [wasm][cleanup] Rename kLocal<type> constants -> k<type>Code 2020-09-29 08:48:21 +00:00
ast Implement parsing of AssertEntries in import assertion clause 2020-10-19 16:53:08 +00:00
base [heap] Make maximum regular code object size a runtime value. 2020-10-16 13:32:13 +00:00
builtins Reland "[deoptimizer] Change deopt entries into builtins" 2020-10-20 12:30:23 +00:00
codegen Reland "[deoptimizer] Change deopt entries into builtins" 2020-10-20 12:30:23 +00:00
common Reland "[deoptimizer] Change deopt entries into builtins" 2020-10-20 12:30:23 +00:00
compiler Reland "[deoptimizer] Change deopt entries into builtins" 2020-10-20 12:30:23 +00:00
compiler-dispatcher [heap] Support collection on main thread 2020-10-17 08:38:16 +00:00
d8 [fuzzing] Don't expose OS methods when fuzzing 2020-10-16 11:47:55 +00:00
date
debug [cleanup] Remove parameters accessors from CommonFrame 2020-10-16 11:46:50 +00:00
deoptimizer Reland "[deoptimizer] Change deopt entries into builtins" 2020-10-20 12:30:23 +00:00
diagnostics Reland "[deoptimizer] Change deopt entries into builtins" 2020-10-20 12:30:23 +00:00
execution Reland "[deoptimizer] Change deopt entries into builtins" 2020-10-20 12:30:23 +00:00
extensions [clang-tidy] Remove unneeded casts 2020-06-10 20:47:50 +00:00
flags Reland "[regexp] Enable fallback to experimental engine by default" 2020-10-20 08:30:19 +00:00
handles [handles] Always allow dereference of builtin handles 2020-10-13 09:12:54 +00:00
heap Reland "[deoptimizer] Change deopt entries into builtins" 2020-10-20 12:30:23 +00:00
ic [super ic] Fix receiver type 2020-10-20 09:05:24 +00:00
init Implement parsing of empty import assertion clause 2020-10-15 17:45:45 +00:00
inspector Reland "[debugger] Try to trigger pause-on-oom flakes with an extra printf" 2020-10-20 08:25:39 +00:00
interpreter [cleanup] Remove V8_REVERSE_JSARGS flag 2020-10-14 12:25:06 +00:00
json Revert "[runtime] Use Isolate::ThrowAt with MessageLocation" 2020-10-19 19:24:43 +00:00
libplatform [Jobs API] Rename IsRunning -> IsValid 2020-10-19 17:01:48 +00:00
libsampler [cpu-profiler] Ensure sampled thread has Isolate lock under Windows 2020-09-16 16:17:39 +00:00
logging Reland "[deoptimizer] Change deopt entries into builtins" 2020-10-20 12:30:23 +00:00
numbers [cleanup] Remove stale TODOs related to RO_SPACE 2020-09-08 08:53:54 +00:00
objects Reland "[deoptimizer] Change deopt entries into builtins" 2020-10-20 12:30:23 +00:00
parsing Implement parsing of AssertEntries in import assertion clause 2020-10-19 16:53:08 +00:00
profiler Reland "cppgc-js: Add snapshot for C++ objects" 2020-10-16 15:57:55 +00:00
protobuf
regexp PPC/s390: [cleanup] Various misc. cleanups 2020-10-19 13:58:38 +00:00
roots [dict-proto] allow and fix empty versions of ordered hash tables 2020-10-19 10:36:28 +00:00
runtime Revert "[runtime] Use Isolate::ThrowAt with MessageLocation" 2020-10-19 19:24:43 +00:00
sanitizer [platform] Add SharedMemory allocation and mapping 2020-07-30 18:31:21 +00:00
snapshot Reland "[deoptimizer] Change deopt entries into builtins" 2020-10-20 12:30:23 +00:00
strings [cleanup] Clean up SYNCHRONIZED_ACCESSORS macro naming and its uses 2020-10-05 11:01:22 +00:00
tasks Reland2: [Atomics.waitAsync] Implement Atomics.waitAsync 2020-07-21 06:43:48 +00:00
third_party Enable full WASM function names with arguments for Intel VTune 2020-07-13 14:01:27 +00:00
torque [torque] Generate verifiers for any indexed field 2020-10-13 16:04:59 +00:00
tracing [wasm] Introduce v8.wasm.detailed trace event category 2020-06-03 18:52:50 +00:00
trap-handler [cleanup] Consistent comments on namespace ends 2020-08-17 10:09:02 +00:00
utils [wasm-simd][arm64] Prototype extended multiply 2020-10-19 16:59:28 +00:00
wasm [wasm] Fix regular publishing of compilation results 2020-10-20 09:04:19 +00:00
zone Add bucket_count parameter to ZoneUnorderedSet 2020-10-06 19:02:15 +00:00
DEPS [heap] Add conservative stack scanning 2020-09-01 12:21:29 +00:00
OWNERS