v8/test/mjsunit/compiler/bigint-int64-lowered.js
Georg Neis 086efd8781 Reland "[turbofan] Prepare for moving part of CreateGraph into the background"
This is a reland of ab089c7864, after
making a flaky test more robust.

Original change's description:
> [turbofan] Prepare for moving part of CreateGraph into the background
>
> - Pass Refs, not Handles, to graph builder, and drop bytecode array argument
>   (get it from SFI instead).
> - Add some fields to FeedbackVectorRef that are needed to avoid heap access
>   in BytecodeGraphBuilderPhase.
> - Rename FeedbackVectorRef's SerializeSlots to Serialize, since it's more
>   than just the feedback slots.
> - Rearrange the last steps in PipelineCompilationJob::PrepareJobImpl such
>   that CreateGraph is last.
>
> Bug: v8:7790
> Change-Id: I4b17790d1d74da41ba63ee68e3a33968662fc398
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1781682
> Reviewed-by: Maya Lekova <mslekova@chromium.org>
> Commit-Queue: Georg Neis <neis@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#63515}

Bug: v8:7790
Change-Id: Ia6f4c1ebd82dea93c14437514d0e25b730523f75
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1781694
Reviewed-by: Georg Neis <neis@chromium.org>
Reviewed-by: Maya Lekova <mslekova@chromium.org>
Commit-Queue: Georg Neis <neis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#63545}
2019-09-04 09:35:13 +00:00

84 lines
2.6 KiB
JavaScript

// Copyright 2019 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
function TestAsUintN() {
assertEquals(0n, BigInt.asUintN(64, 0n));
assertEquals(0n, BigInt.asUintN(8, 0n));
assertEquals(0n, BigInt.asUintN(1, 0n));
assertEquals(0n, BigInt.asUintN(0, 0n));
assertEquals(0n, BigInt.asUintN(100, 0n));
assertEquals(123n, BigInt.asUintN(64, 123n));
assertEquals(123n, BigInt.asUintN(32, 123n));
assertEquals(123n, BigInt.asUintN(8, 123n));
assertEquals(59n, BigInt.asUintN(6, 123n));
assertEquals(27n, BigInt.asUintN(5, 123n));
assertEquals(11n, BigInt.asUintN(4, 123n));
assertEquals(1n, BigInt.asUintN(1, 123n));
assertEquals(0n, BigInt.asUintN(0, 123n));
assertEquals(123n, BigInt.asUintN(72, 123n));
assertEquals(BigInt("0xFFFFFFFFFFFFFF85"), BigInt.asUintN(64, -123n));
assertEquals(BigInt("0xFFFFFF85"), BigInt.asUintN(32, -123n));
assertEquals(BigInt("0x85"), BigInt.asUintN(8, -123n));
assertEquals(5n, BigInt.asUintN(6, -123n));
assertEquals(5n, BigInt.asUintN(5, -123n));
assertEquals(5n, BigInt.asUintN(4, -123n));
assertEquals(1n, BigInt.asUintN(1, -123n));
assertEquals(0n, BigInt.asUintN(0, -123n));
assertEquals(BigInt("0xFFFFFFFFFFFFFFFF85"), BigInt.asUintN(72, -123n));
}
function TestInt64LoweredOperations() {
assertEquals(0n, BigInt.asUintN(64, -0n));
assertEquals(0n, BigInt.asUintN(64, 15n + -15n));
assertEquals(0n, BigInt.asUintN(64, 0n + 0n));
assertEquals(14n, BigInt.asUintN(32, 8n + 6n));
assertEquals(813n, BigInt.asUintN(10, 1013n + -200n));
assertEquals(15n, BigInt.asUintN(4, -319n + 302n));
for (let i = 0; i < 2; ++i) {
let x = 32n; // x = 32n
if (i === 1) {
x = BigInt.asUintN(64, x + 3n); // x = 35n
const y = x + -8n + x; // x = 35n, y = 62n
x = BigInt.asUintN(6, y + x); // x = 33n, y = 62n
x = -9n + y + -x; // x = 20n
x = BigInt.asUintN(10000 * i, x); // x = 20n
} else {
x = x + 400n; // x = 432n
x = -144n + BigInt.asUintN(8, 500n) + x; // x = 532n
}
assertEquals(20n, BigInt.asUintN(8, x));
}
let x = 7n;
for (let i = 0; i < 10; ++i) {
x = x + 5n;
}
assertEquals(57n, BigInt.asUintN(8, x));
let y = 7n;
for(let i = 0; i < 10; ++i) {
y = BigInt.asUintN(4, y + 16n);
}
assertEquals(7n, y);
}
function OptimizeAndTest(fn) {
%PrepareFunctionForOptimization(fn);
%PrepareFunctionForOptimization(assertEquals);
fn();
fn();
%OptimizeFunctionOnNextCall(fn);
fn();
assertOptimized(fn);
fn();
}
OptimizeAndTest(TestAsUintN);
OptimizeAndTest(TestInt64LoweredOperations);