Commit 8aa58897 authored by Nico Hartmann's avatar Nico Hartmann Committed by Commit Bot

[turbofan] Fixes rematerialization of truncated BigInts

Bug: chromium:1029530
Change-Id: I12aa4c238387f6a47bf149fd1a136ea83c385f4b
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1962278
Auto-Submit: Nico Hartmann <nicohartmann@chromium.org>
Commit-Queue: Georg Neis <neis@chromium.org>
Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#65434}
parent 8e78e4f6
......@@ -175,6 +175,15 @@ Node* RepresentationChanger::GetRepresentationFor(
}
}
// Rematerialize any truncated BigInt if user is not expecting a BigInt.
if (output_type.Is(Type::BigInt()) &&
output_rep == MachineRepresentation::kWord64 &&
use_info.type_check() != TypeCheckKind::kBigInt) {
node =
InsertConversion(node, simplified()->ChangeUint64ToBigInt(), use_node);
output_rep = MachineRepresentation::kTaggedPointer;
}
switch (use_info.representation()) {
case MachineRepresentation::kTaggedSigned:
DCHECK(use_info.type_check() == TypeCheckKind::kNone ||
......
// 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 --interrupt-budget=1024
{
function f() {
const b = BigInt.asUintN(4,3n);
let i = 0;
while(i < 1) {
i + 1;
i = b;
}
}
%PrepareFunctionForOptimization(f);
f();
f();
%OptimizeFunctionOnNextCall(f);
f();
}
{
function f() {
const b = BigInt.asUintN(4,10n);
let i = 0.1;
while(i < 1.8) {
i + 1;
i = b;
}
}
%PrepareFunctionForOptimization(f);
f();
f();
%OptimizeFunctionOnNextCall(f);
f();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment