v8/test/mjsunit/compiler/number-isnan.js
bmeurer 7ac19fe598 [builtins] Migrate Number predicates and make them optimizable.
Migrate the isNaN, isFinite, Number.isFinite, Number.isInteger,
Number.isSafeInteger and Number.isNaN predicates to TurboFan
builtins and make them optimizable (for certain input types) in
JavaScript callees being optimized by TurboFan. That means both
the baseline and the optimized version is now always at maximum,
consistent performance. Especially TurboFan suffered from poor
baseline (and optimized) performance because it cannot play the
same weird tricks that Crankshaft plays for %_IsSmi.

This also adds a bunch of new tests to properly cover the use
of the Harmony predicates in optimized code.

R=franzih@chromium.org
BUG=v8:5049,v8:5267

Review-Url: https://codereview.chromium.org/2313073002
Cr-Commit-Position: refs/heads/master@{#39242}
2016-09-07 10:14:40 +00:00

29 lines
720 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 test(f) {
assertFalse(f(0));
assertFalse(f(Number.MIN_VALUE));
assertFalse(f(Number.MAX_VALUE));
assertFalse(f(Number.MIN_SAFE_INTEGER - 13));
assertFalse(f(Number.MAX_SAFE_INTEGER + 23));
assertTrue(f(Number.NaN));
assertFalse(f(Number.POSITIVE_INFINITY));
assertFalse(f(Number.NEGATIVE_INFINITY));
assertFalse(f(Number.EPSILON));
assertFalse(f(1 / 0));
assertFalse(f(-1 / 0));
}
function f(x) {
return Number.isNaN(+x);
}
test(f);
test(f);
%OptimizeFunctionOnNextCall(f);
test(f);