• 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
heap-refs.h 35.9 KB