v8/test/mjsunit/compiler/number-max.js
Benedikt Meurer bb389dc78c [turbofan] Add Word64 support to NumberMin and NumberMax.
For NumberMin and NumberMax we don't need to go to Float64 when the
inputs are known to be in SafeInteger range, instead we can go to
Word64 on 64-bit architectures. This is preliminary work for the
huge DataView support, since we'll utilize NumberMax in that case
to clamp the limit for the bounds check.

Bug: v8:8178, v8:8383
Change-Id: I414114229c5c86b92749d30d645cedc641541ae4
Reviewed-on: https://chromium-review.googlesource.com/c/1304535
Reviewed-by: Sigurd Schneider <sigurds@chromium.org>
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#57090}
2018-10-29 14:12:44 +00:00

38 lines
1.1 KiB
JavaScript

// Copyright 2018 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 --opt
// Test that NumberMax properly passes the kIdentifyZeros truncation.
(function() {
function foo(x) {
if (Math.max(x * -2, 1) == 1) return 0;
return 1;
}
assertEquals(0, foo(2));
assertEquals(1, foo(-1));
%OptimizeFunctionOnNextCall(foo);
assertEquals(0, foo(2));
assertEquals(1, foo(-1));
assertOptimized(foo);
// Now `foo` should stay optimized even if `x * -2` would produce `-0`.
assertEquals(0, foo(0));
assertOptimized(foo);
})();
// Test that NumberMax properly handles 64-bit comparisons.
(function() {
function foo(x) {
x = x|0;
return Math.max(x - 1, x + 1);
}
assertEquals(-Math.pow(2, 31) + 1, foo(-Math.pow(2, 31)));
assertEquals(Math.pow(2, 31), foo(Math.pow(2, 31) - 1));
%OptimizeFunctionOnNextCall(foo);
assertEquals(-Math.pow(2, 31) + 1, foo(-Math.pow(2, 31)));
assertEquals(Math.pow(2, 31), foo(Math.pow(2, 31) - 1));
})();