| Index: src/a64/lithium-codegen-a64.cc
|
| diff --git a/src/a64/lithium-codegen-a64.cc b/src/a64/lithium-codegen-a64.cc
|
| index 48a0e902cb61538ac2e688f120880fb1a613b5a6..e9061db07590e0ba0d59f452e13b91aa44641324 100644
|
| --- a/src/a64/lithium-codegen-a64.cc
|
| +++ b/src/a64/lithium-codegen-a64.cc
|
| @@ -5438,7 +5438,10 @@ void LCodeGen::DoUint32ToSmi(LUint32ToSmi* instr) {
|
| Register result = ToRegister(instr->result());
|
|
|
| if (!instr->hydrogen()->value()->HasRange() ||
|
| - !instr->hydrogen()->value()->range()->IsInSmiRange()) {
|
| + !instr->hydrogen()->value()->range()->IsInSmiRange() ||
|
| + instr->hydrogen()->value()->range()->upper() == kMaxInt) {
|
| + // The Range class can't express upper bounds in the (kMaxInt, kMaxUint32]
|
| + // interval, so we treat kMaxInt as a sentinel for this entire interval.
|
| DeoptimizeIfNegative(value.W(), instr->environment());
|
| }
|
| __ SmiTag(result, value);
|
|
|