c83b21ab75
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}
27 lines
496 B
JavaScript
27 lines
496 B
JavaScript
// Copyright 2016 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --allow-natives-syntax
|
|
|
|
function g(x, y) {
|
|
return x | y;
|
|
}
|
|
|
|
function f(b) {
|
|
if (b) {
|
|
var s = g("a", "b") && true;
|
|
return s;
|
|
}
|
|
}
|
|
|
|
// Prime function g with Smi feedback.
|
|
g(1, 2);
|
|
g(1, 2);
|
|
|
|
f(0);
|
|
f(0);
|
|
%OptimizeFunctionOnNextCall(f);
|
|
// Compile inlined function g with string inputs but Smi feedback.
|
|
f(1);
|