• jarin's avatar
    [turbofan] Insert dummy values when changing from None type. · c83b21ab
    jarin authored
    Currently we choose the MachineRepresentation::kNone representation for
    values of Type::None, and when converting values from the kNone representation
    we use "impossible" conversions that will crash at runtime. This
    assumes that the impossible conversions should never be hit (the only
    way to produce the impossible values is to perform an always-failing
    runtime check on a value, such as Smi-checking a string). Note that
    this assumes that the runtime check is executed before the impossible
    convesrion.
    
    Introducing BitwiseOr type feedback broke this in two ways:
    
    - we always pick Word32 representation for bitwise-or, so the
      impossible conversion does not trigger (it only triggers with
      None representation), and we could end up with unsupported
      conversions from Word32.
    
    - even if we inserted impossible conversions, they are pure conversions.
      Since untagging, bitwise-or operations are also pure, we could hoist
      all these before the smi check of the inputs and we could hit the
      impossible conversions before we get to the smi check.
    
    This CL addresses this by just providing dummy values for conversions
    from the Type::None type. It also removes the impossible-to-* conversions.
    
    BUG=chromium:638132
    
    Review-Url: https://codereview.chromium.org/2266823002
    Cr-Commit-Position: refs/heads/master@{#38883}
    c83b21ab
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...