[maglev] Rudimentary check elimination
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: Victor Gomes <victorgomes@chromium.org> Reviewed-by: Igor Sheludko <ishell@chromium.org> Reviewed-by: Jakob Linke <jgruber@chromium.org> Commit-Queue: Igor Sheludko <ishell@chromium.org> Cr-Commit-Position: refs/heads/main@{#82911}
Showing
Please
register
or
sign in
to comment