• 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
regress-633497.js 530 Bytes