• Leszek Swirski's avatar
    [maglev] Fix dead predecessors after EmitUnconditionalDeopt · f7cc70de
    Leszek Swirski authored
    Fixes the iteration after emitting an unconditional deopt to kill all
    Jumps along the way, not just ones preceeding a merge point. This fixes
    several issues:
    
      a) That Jump may be to a not yet created merge point, in which case we
         were getting a nullptr deref.
      b) Not-yet created merge points would not be detected as merge points,
         so we'd skip over them and miss killing the control node before
         them.
      c) We weren't reducing predecessor counts, so even after fixing the
         nullptr deref above, merge states created later would have the wrong
         predecessor count.
    
    Now, we check bytecode targets (including fallthrough for non-returning
    bytecodes) on for every bytecode, and skip over both not-yet created
    merges, and loop merges that have no predecessors other than the loop
    jump itself.
    
    As part of this, the dead predecessor merging is changed; instead of
    setting the predecessor to nullptr, we drop the predecessor count by
    one, and trim any Phis' input counts.
    
    Bug: v8:7700
    Change-Id: I904c82df7c5dd44d7637e07f6750b35e7e219284
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3599470Reviewed-by: 's avatarVictor Gomes <victorgomes@chromium.org>
    Commit-Queue: Leszek Swirski <leszeks@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#80083}
    f7cc70de
Name
Last commit
Last update
.github Loading commit data...
bazel Loading commit data...
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.bazelrc Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.flake8 Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.mailmap Loading commit data...
.style.yapf Loading commit data...
.vpython Loading commit data...
.vpython3 Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.bazel Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
COMMON_OWNERS Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
ENG_REVIEW_OWNERS Loading commit data...
INFRA_OWNERS Loading commit data...
INTL_OWNERS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LOONG_OWNERS Loading commit data...
MIPS_OWNERS Loading commit data...
OWNERS Loading commit data...
PPC_OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
RISCV_OWNERS Loading commit data...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
WORKSPACE Loading commit data...
codereview.settings Loading commit data...