• jarin's avatar
    [turbofan] Only do value numbering when types are compatible. · b190d133
    jarin authored
    At the moment, two NumberConstant nodes get different type even if their
    value is the same because we always allocate a new heap number for
    each number constant. This can lead to replacing a node with a node of
    disjoint type in value numbering, which can result in incorrect code
    down the line because of inconsistent types.
    
    This fix makes sure that we only replace a node with a sub-type
    node. Once we introduce a proper type for number constants, we can
    move back to the intersection typing in value numbering.
    
    Unfortunately, it is quite hard to write a repro for this because we cache NumberConstant nodes. We only throw away cached values that have too many conflicts (>5), so the test has to contain values that fall into the same bucket. That's where the magic floating point numbers in the test come from (they have the same low 8-bits of their hashes).
    
    BUG=chromium:633497
    
    Review-Url: https://codereview.chromium.org/2251833002
    Cr-Commit-Position: refs/heads/master@{#38675}
    b190d133
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
docs Loading commit data...
gni Loading commit data...
gypfiles 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/binutils Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
Makefile Loading commit data...
Makefile.android Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...