diff options
Diffstat (limited to 'deps/v8/test/mjsunit/compiler/bigint-compare.js')
-rw-r--r-- | deps/v8/test/mjsunit/compiler/bigint-compare.js | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/compiler/bigint-compare.js b/deps/v8/test/mjsunit/compiler/bigint-compare.js new file mode 100644 index 0000000000..65fac50428 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/bigint-compare.js @@ -0,0 +1,61 @@ +// Copyright 2022 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 --turbofan --no-always-turbofan + +function LessThan(x, y) { + return x < y; +} + +function LessThanOrEqual(x, y) { + return x <= y; +} + +function GreaterThan(x, y) { + return x > y; +} + +function GreaterThanOrEqual(x, y) { + return x >= y; +} + +function Test(f, large, lt, eq) { + assertEquals(lt, f(1n, 2n)); + assertEquals(!lt, f(0n, -1n)); + assertEquals(eq, f(-42n, -42n)); + assertEquals(!lt, f(-(2n ** 62n), -(2n ** 63n) + 1n)); + assertEquals(lt, f(-(2n ** 63n) + 1n, (2n ** 63n) - 1n)); + if (large) { + assertEquals(lt, f(2n ** 63n - 1n, 2n ** 63n)); + assertEquals(!lt, f(-(2n ** 63n) + 1n, -(2n ** 63n))); + assertEquals(lt, f(-(13n ** 70n), 13n ** 70n)); // Different signs + assertEquals(!lt, f(13n ** 70n, -(13n ** 70n))); + assertEquals(lt, f(13n ** 80n, 13n ** 90n)); // Different lengths + assertEquals(!lt, f(-(13n ** 70n), -(13n ** 80n))); // Same length + assertEquals(eq, f(13n ** 70n, 13n ** 70n)); + } +} + +function OptAndTest(f, large) { + const lt = f === LessThan || f === LessThanOrEqual; + const eq = f === LessThanOrEqual || f === GreaterThanOrEqual; + %PrepareFunctionForOptimization(f); + Test(f, large, lt, eq); + assertUnoptimized(f); + %OptimizeFunctionOnNextCall(f); + Test(f, large, lt, eq); + assertOptimized(f); +} + +OptAndTest(LessThan, false); +OptAndTest(LessThanOrEqual, false); +OptAndTest(GreaterThan, false); +OptAndTest(GreaterThanOrEqual, false); +if (%Is64Bit()) { + // Should deopt on large bigints and there should not be deopt loops. + OptAndTest(LessThan, true); + OptAndTest(LessThanOrEqual, true); + OptAndTest(GreaterThan, true); + OptAndTest(GreaterThanOrEqual, true); +} |