Commit b8bf5e53 authored by Nico Hartmann's avatar Nico Hartmann Committed by Commit Bot

Fixes word64-lowered BigInt in FrameState accumulator

Bug: chromium:1016450
Change-Id: I4801b5ffb0ebea92067aa5de37e11a4e75dcd3c0
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1873692Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
Commit-Queue: Nico Hartmann <nicohartmann@chromium.org>
Cr-Commit-Position: refs/heads/master@{#64469}
parent cff862c0
...@@ -1197,7 +1197,7 @@ class RepresentationSelector { ...@@ -1197,7 +1197,7 @@ class RepresentationSelector {
// TODO(nicohartmann): Remove, once the deoptimizer can rematerialize // TODO(nicohartmann): Remove, once the deoptimizer can rematerialize
// truncated BigInts. // truncated BigInts.
if (TypeOf(input).Is(Type::BigInt())) { if (TypeOf(input).Is(Type::BigInt())) {
ProcessInput(node, i, UseInfo::AnyTagged()); ConvertInput(node, i, UseInfo::AnyTagged());
} }
(*types)[i] = (*types)[i] =
...@@ -1220,11 +1220,22 @@ class RepresentationSelector { ...@@ -1220,11 +1220,22 @@ class RepresentationSelector {
// Accumulator is a special flower - we need to remember its type in // Accumulator is a special flower - we need to remember its type in
// a singleton typed-state-values node (as if it was a singleton // a singleton typed-state-values node (as if it was a singleton
// state-values node). // state-values node).
Node* accumulator = node->InputAt(2);
if (propagate()) { if (propagate()) {
EnqueueInput(node, 2, UseInfo::Any()); // TODO(nicohartmann): Remove, once the deoptimizer can rematerialize
// truncated BigInts.
if (TypeOf(accumulator).Is(Type::BigInt())) {
EnqueueInput(node, 2, UseInfo::AnyTagged());
} else {
EnqueueInput(node, 2, UseInfo::Any());
}
} else if (lower()) { } else if (lower()) {
// TODO(nicohartmann): Remove, once the deoptimizer can rematerialize
// truncated BigInts.
if (TypeOf(accumulator).Is(Type::BigInt())) {
ConvertInput(node, 2, UseInfo::AnyTagged());
}
Zone* zone = jsgraph_->zone(); Zone* zone = jsgraph_->zone();
Node* accumulator = node->InputAt(2);
if (accumulator == jsgraph_->OptimizedOutConstant()) { if (accumulator == jsgraph_->OptimizedOutConstant()) {
node->ReplaceInput(2, jsgraph_->SingleDeadTypedStateValues()); node->ReplaceInput(2, jsgraph_->SingleDeadTypedStateValues());
} else { } else {
...@@ -1237,7 +1248,7 @@ class RepresentationSelector { ...@@ -1237,7 +1248,7 @@ class RepresentationSelector {
node->ReplaceInput( node->ReplaceInput(
2, jsgraph_->graph()->NewNode(jsgraph_->common()->TypedStateValues( 2, jsgraph_->graph()->NewNode(jsgraph_->common()->TypedStateValues(
types, SparseInputMask::Dense()), types, SparseInputMask::Dense()),
accumulator)); node->InputAt(2)));
} }
} }
......
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