Commit 76828375 authored by mstarzinger's avatar mstarzinger Committed by Commit bot

[turbofan] Fix translation of uint32 deopt immediates.

This makes sure 32-bit constants that are used as {MachineType::Uint32}
by the deoptimization translation are also interpreted as such when the
literals are collected.

R=jarin@chromium.org
TEST=mjsunit/regress/regress-crbug-681983
BUG=chromium:681983

Review-Url: https://codereview.chromium.org/2646463002
Cr-Commit-Position: refs/heads/master@{#42493}
parent 27edf11e
......@@ -928,9 +928,13 @@ void CodeGenerator::AddTranslationForOperand(Translation* translation,
type.representation() == MachineRepresentation::kNone);
DCHECK(type.representation() != MachineRepresentation::kNone ||
constant.ToInt32() == FrameStateDescriptor::kImpossibleValue);
constant_object =
isolate()->factory()->NewNumberFromInt(constant.ToInt32());
if (type == MachineType::Uint32()) {
constant_object =
isolate()->factory()->NewNumberFromUint(constant.ToInt32());
} else {
constant_object =
isolate()->factory()->NewNumberFromInt(constant.ToInt32());
}
}
break;
case Constant::kInt64:
......
// Copyright 2017 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
function g(a) {
a = a >>> 0;
%_DeoptimizeNow();
return a;
}
function f() {
return g(-1);
}
%OptimizeFunctionOnNextCall(f);
assertEquals(4294967295, 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