| Index: runtime/vm/intermediate_language_x64.cc
|
| diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
|
| index 689f7e2e1a7948c2ee5b9fa050d6480984c8c66f..a7bad0ae93136a7c569365d3d94ff6d3a4c3ca1d 100644
|
| --- a/runtime/vm/intermediate_language_x64.cc
|
| +++ b/runtime/vm/intermediate_language_x64.cc
|
| @@ -3437,6 +3437,17 @@ void UnboxInteger32Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| __ SmiUntag(value);
|
| } else if (value_cid == kMintCid) {
|
| __ movq(value, FieldAddress(value, Mint::value_offset()));
|
| + } else if (!CanDeoptimize()) {
|
| + // Type information is not conclusive, but range analysis found
|
| + // the value to be in int64 range. Therefore it must be a smi
|
| + // or mint value.
|
| + ASSERT(is_truncating());
|
| + Label done;
|
| + __ SmiUntag(value);
|
| + __ j(NOT_CARRY, &done, Assembler::kNearJump);
|
| + __ movq(value, Address(value, TIMES_2, Mint::value_offset()));
|
| + __ Bind(&done);
|
| + return;
|
| } else {
|
| Label done;
|
| // Optimistically untag value.
|
|
|