• 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
Name
Last commit
Last update
..
backend Loading commit data...
DEPS Loading commit data...
OWNERS Loading commit data...
access-builder.cc Loading commit data...
access-builder.h Loading commit data...
access-info.cc Loading commit data...
access-info.h Loading commit data...
add-type-assertions-reducer.cc Loading commit data...
add-type-assertions-reducer.h Loading commit data...
all-nodes.cc Loading commit data...
all-nodes.h Loading commit data...
allocation-builder-inl.h Loading commit data...
allocation-builder.h Loading commit data...
basic-block-instrumentor.cc Loading commit data...
basic-block-instrumentor.h Loading commit data...
branch-elimination.cc Loading commit data...
branch-elimination.h Loading commit data...
bytecode-analysis.cc Loading commit data...
bytecode-analysis.h Loading commit data...
bytecode-graph-builder.cc Loading commit data...
bytecode-graph-builder.h Loading commit data...
bytecode-liveness-map.cc Loading commit data...
bytecode-liveness-map.h Loading commit data...
c-linkage.cc Loading commit data...
checkpoint-elimination.cc Loading commit data...
checkpoint-elimination.h Loading commit data...
code-assembler.cc Loading commit data...
code-assembler.h Loading commit data...
common-node-cache.cc Loading commit data...
common-node-cache.h Loading commit data...
common-operator-reducer.cc Loading commit data...
common-operator-reducer.h Loading commit data...
common-operator.cc Loading commit data...
common-operator.h Loading commit data...
compilation-dependencies.cc Loading commit data...
compilation-dependencies.h Loading commit data...
compilation-dependency.h Loading commit data...
compiler-source-position-table.cc Loading commit data...
compiler-source-position-table.h Loading commit data...
constant-folding-reducer.cc Loading commit data...
constant-folding-reducer.h Loading commit data...
control-equivalence.cc Loading commit data...
control-equivalence.h Loading commit data...
control-flow-optimizer.cc Loading commit data...
control-flow-optimizer.h Loading commit data...
csa-load-elimination.cc Loading commit data...
csa-load-elimination.h Loading commit data...
dead-code-elimination.cc Loading commit data...
dead-code-elimination.h Loading commit data...
decompression-optimizer.cc Loading commit data...
decompression-optimizer.h Loading commit data...
diamond.h Loading commit data...
effect-control-linearizer.cc Loading commit data...
effect-control-linearizer.h Loading commit data...
escape-analysis-reducer.cc Loading commit data...
escape-analysis-reducer.h Loading commit data...
escape-analysis.cc Loading commit data...
escape-analysis.h Loading commit data...
feedback-source.cc Loading commit data...
feedback-source.h Loading commit data...
frame-states.cc Loading commit data...
frame-states.h Loading commit data...
frame.cc Loading commit data...
frame.h Loading commit data...
functional-list.h Loading commit data...
globals.h Loading commit data...
graph-assembler.cc Loading commit data...
graph-assembler.h Loading commit data...
graph-reducer.cc Loading commit data...
graph-reducer.h Loading commit data...
graph-trimmer.cc Loading commit data...
graph-trimmer.h Loading commit data...
graph-visualizer.cc Loading commit data...
graph-visualizer.h Loading commit data...
graph-zone-traits.h Loading commit data...
graph.cc Loading commit data...
graph.h Loading commit data...
heap-refs.h Loading commit data...
int64-lowering.cc Loading commit data...
int64-lowering.h Loading commit data...
js-call-reducer.cc Loading commit data...
js-call-reducer.h Loading commit data...
js-context-specialization.cc Loading commit data...
js-context-specialization.h Loading commit data...
js-create-lowering.cc Loading commit data...
js-create-lowering.h Loading commit data...
js-generic-lowering.cc Loading commit data...
js-generic-lowering.h Loading commit data...
js-graph.cc Loading commit data...
js-graph.h Loading commit data...
js-heap-broker.cc Loading commit data...
js-heap-broker.h Loading commit data...
js-heap-copy-reducer.cc Loading commit data...
js-heap-copy-reducer.h Loading commit data...
js-inlining-heuristic.cc Loading commit data...
js-inlining-heuristic.h Loading commit data...
js-inlining.cc Loading commit data...
js-inlining.h Loading commit data...
js-intrinsic-lowering.cc Loading commit data...
js-intrinsic-lowering.h Loading commit data...
js-native-context-specialization.cc Loading commit data...
js-native-context-specialization.h Loading commit data...
js-operator.cc Loading commit data...
js-operator.h Loading commit data...
js-type-hint-lowering.cc Loading commit data...
js-type-hint-lowering.h Loading commit data...
js-typed-lowering.cc Loading commit data...
js-typed-lowering.h Loading commit data...
linkage.cc Loading commit data...
linkage.h Loading commit data...
load-elimination.cc Loading commit data...
load-elimination.h Loading commit data...
loop-analysis.cc Loading commit data...
loop-analysis.h Loading commit data...
loop-peeling.cc Loading commit data...
loop-peeling.h Loading commit data...
loop-variable-optimizer.cc Loading commit data...
loop-variable-optimizer.h Loading commit data...
machine-graph-verifier.cc Loading commit data...
machine-graph-verifier.h Loading commit data...
machine-graph.cc Loading commit data...
machine-graph.h Loading commit data...
machine-operator-reducer.cc Loading commit data...
machine-operator-reducer.h Loading commit data...
machine-operator.cc Loading commit data...
machine-operator.h Loading commit data...
map-inference.cc Loading commit data...
map-inference.h Loading commit data...
memory-lowering.cc Loading commit data...
memory-lowering.h Loading commit data...
memory-optimizer.cc Loading commit data...
memory-optimizer.h Loading commit data...
node-aux-data.h Loading commit data...
node-cache.h Loading commit data...
node-marker.cc Loading commit data...
node-marker.h Loading commit data...
node-matchers.cc Loading commit data...
node-matchers.h Loading commit data...
node-origin-table.cc Loading commit data...
node-origin-table.h Loading commit data...
node-properties.cc Loading commit data...
node-properties.h Loading commit data...
node.cc Loading commit data...
node.h Loading commit data...
opcodes.cc Loading commit data...
opcodes.h Loading commit data...
operation-typer.cc Loading commit data...
operation-typer.h Loading commit data...
operator-properties.cc Loading commit data...
operator-properties.h Loading commit data...
operator.cc Loading commit data...
operator.h Loading commit data...
osr.cc Loading commit data...
osr.h Loading commit data...
per-isolate-compiler-cache.h Loading commit data...
persistent-map.h Loading commit data...
pipeline-statistics.cc Loading commit data...
pipeline-statistics.h Loading commit data...
pipeline.cc Loading commit data...
pipeline.h Loading commit data...
processed-feedback.h Loading commit data...
property-access-builder.cc Loading commit data...
property-access-builder.h Loading commit data...
raw-machine-assembler.cc Loading commit data...
raw-machine-assembler.h Loading commit data...
redundancy-elimination.cc Loading commit data...
redundancy-elimination.h Loading commit data...
refs-map.cc Loading commit data...
refs-map.h Loading commit data...
representation-change.cc Loading commit data...
representation-change.h Loading commit data...
schedule.cc Loading commit data...
schedule.h Loading commit data...
scheduled-machine-lowering.cc Loading commit data...
scheduled-machine-lowering.h Loading commit data...
scheduler.cc Loading commit data...
scheduler.h Loading commit data...
select-lowering.cc Loading commit data...
select-lowering.h Loading commit data...
serializer-for-background-compilation.cc Loading commit data...
serializer-for-background-compilation.h Loading commit data...
serializer-hints.h Loading commit data...
simd-scalar-lowering.cc Loading commit data...
simd-scalar-lowering.h Loading commit data...
simplified-lowering.cc Loading commit data...
simplified-lowering.h Loading commit data...
simplified-operator-reducer.cc Loading commit data...
simplified-operator-reducer.h Loading commit data...
simplified-operator.cc Loading commit data...
simplified-operator.h Loading commit data...
state-values-utils.cc Loading commit data...
state-values-utils.h Loading commit data...
store-store-elimination.cc Loading commit data...
store-store-elimination.h Loading commit data...
type-cache.cc Loading commit data...
type-cache.h Loading commit data...
type-narrowing-reducer.cc Loading commit data...
type-narrowing-reducer.h Loading commit data...
typed-optimization.cc Loading commit data...
typed-optimization.h Loading commit data...
typer.cc Loading commit data...
typer.h Loading commit data...
types.cc Loading commit data...
types.h Loading commit data...
value-numbering-reducer.cc Loading commit data...
value-numbering-reducer.h Loading commit data...
verifier.cc Loading commit data...
verifier.h Loading commit data...
wasm-compiler.cc Loading commit data...
wasm-compiler.h Loading commit data...
write-barrier-kind.h Loading commit data...
zone-stats.cc Loading commit data...
zone-stats.h Loading commit data...