• 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
instruction-scheduler.cc 10.5 KB