• Seth Brenith's avatar
    [torque] Generate shorter code for indexed field accesses · 73a8eded
    Seth Brenith authored
    Currently, when accessing a field that doesn't have a constant offset,
    Torque emits code to compute each preceding indexed field's length and
    add them all together. This works, but such code can get super long if a
    class has many indexed fields, and especially if the length expressions
    of some indexed fields refer to other indexed fields. We'd like the
    output of the new C++ backend to be short enough to go in inline headers
    which will be included in many compilation units.
    
    This change attempts to reorganize the code so that the computation of
    each length expression can only be emitted exactly once. This only
    shortens the generated C++ code; the resulting TurboFan output should be
    identical. There are two main parts:
    1. For each indexed field, we already generate a macro that can get a
       Slice referring to that field. Update these macros to not use the dot
       operator on that field. Using the dot operator on the predecessor
       field is allowed.
    2. Update the dot operator for indexed fields to emit a call to the
       macro from step 1.
    
    This sort of reverses the dependency added by the previous change
    https://crrev.com/c/2429566 : rather than the slice macros depending on
    the dot operator, this change makes the dot operator depend on the slice
    macros.
    
    The overall torque_generated directory shrinks by under 1% with this
    change, but the runtime_macros.cc file (which should eventually become
    inline headers) shrinks by 24%. More to the point, this change keeps
    runtime_macros.cc from ballooning out of control when we add a
    work-in-progress Torque definition for ScopeInfo
    ( https://crrev.com/c/2357758 ).
    
    Bug: v8:7793
    Change-Id: I989dda9c3666f1a49281fef03acb35baebb5b63a
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2432070Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
    Commit-Queue: Seth Brenith <seth.brenith@microsoft.com>
    Cr-Commit-Position: refs/heads/master@{#70325}
    73a8eded
Name
Last commit
Last update
..
api Loading commit data...
asmjs Loading commit data...
ast Loading commit data...
base Loading commit data...
builtins Loading commit data...
codegen Loading commit data...
common Loading commit data...
compiler Loading commit data...
compiler-dispatcher Loading commit data...
d8 Loading commit data...
date Loading commit data...
debug Loading commit data...
deoptimizer Loading commit data...
diagnostics Loading commit data...
execution Loading commit data...
extensions Loading commit data...
flags Loading commit data...
handles Loading commit data...
heap Loading commit data...
ic Loading commit data...
init Loading commit data...
inspector Loading commit data...
interpreter Loading commit data...
json Loading commit data...
libplatform Loading commit data...
libsampler Loading commit data...
logging Loading commit data...
numbers Loading commit data...
objects Loading commit data...
parsing Loading commit data...
profiler Loading commit data...
protobuf Loading commit data...
regexp Loading commit data...
roots Loading commit data...
runtime Loading commit data...
sanitizer Loading commit data...
snapshot Loading commit data...
strings Loading commit data...
tasks Loading commit data...
third_party Loading commit data...
torque Loading commit data...
tracing Loading commit data...
trap-handler Loading commit data...
utils Loading commit data...
wasm Loading commit data...
zone Loading commit data...
DEPS Loading commit data...
OWNERS Loading commit data...