[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: Georg Neis <neis@chromium.org> Cr-Commit-Position: refs/heads/master@{#65434}
This commit is contained in:
parent
8e78e4f655
commit
8aa588976a
@ -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 ||
|
||||
|
40
test/mjsunit/regress/regress-1029530.js
Normal file
40
test/mjsunit/regress/regress-1029530.js
Normal file
@ -0,0 +1,40 @@
|
||||
// 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();
|
||||
}
|
Loading…
Reference in New Issue
Block a user