• Leszek Swirski's avatar
    [maglev] Rudimentary check elimination · 5f3cc635
    Leszek Swirski authored
    Add a simple forward check elimination based on a side hashmap of "known
    node aspects", namely the node type and node map (if any). This set of
    aspects is cloned when merge states are created, and destructively
    merged when merged into existing merge states -- destructive cloning
    here means removing any mismatching information. This allows information
    in dominators to be preserved.
    
    Maps are kept separate from node types because we want to distinguish
    between stable and unstable maps, where the former need a dependency and
    the latter must be flushed across side-effecting calls.
    
    The representation of this known information is currently very
    inefficient, and won't win us any compilation speed prizes -- just
    ZoneMaps keyed on ValueNode*. We should optimize this to take into
    account some sort of liveness information, and clear out nodes that
    aren't reachable anymore. There is also a lot more information we could
    store per Node, e.g. known loaded fields or alternative representations;
    depending on what we want to store and how that has to be invalidated,
    we likely might need an alternative way of representing it. This
    implementation is good enough for now though, for measuring the impact
    of check elimination.
    
    Bug: v8:7700
    Change-Id: I2f001dedf8ab5d86f8acaa22416617bd80701982
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3865160
    Auto-Submit: Leszek Swirski <leszeks@chromium.org>
    Reviewed-by: 's avatarVictor Gomes <victorgomes@chromium.org>
    Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
    Reviewed-by: 's avatarJakob Linke <jgruber@chromium.org>
    Commit-Queue: Igor Sheludko <ishell@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#82911}
    5f3cc635
Name
Last commit
Last update
..
api Loading commit data...
asmjs Loading commit data...
ast Loading commit data...
base Loading commit data...
baseline Loading commit data...
bigint 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...
maglev 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...
sandbox Loading commit data...
sanitizer Loading commit data...
snapshot Loading commit data...
strings Loading commit data...
tasks Loading commit data...
temporal 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...
web-snapshot Loading commit data...
zone Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
OWNERS Loading commit data...