| Index: runtime/vm/intermediate_language_x64.cc | 
| =================================================================== | 
| --- runtime/vm/intermediate_language_x64.cc	(revision 14299) | 
| +++ runtime/vm/intermediate_language_x64.cc	(working copy) | 
| @@ -1719,9 +1719,14 @@ | 
| Label call_method, done; | 
| // Check if count too large for handling it inlined. | 
| __ movq(temp, left); | 
| -      __ cmpq(right, | 
| -          Immediate(reinterpret_cast<int64_t>(Smi::New(Smi::kBits)))); | 
| -      __ j(ABOVE_EQUAL, &call_method, Assembler::kNearJump); | 
| +      Range* right_range = this->right()->definition()->range(); | 
| +      const bool right_needs_check = | 
| +          (right_range == NULL) || !right_range->IsWithin(0, (Smi::kBits - 1)); | 
| +      if (right_needs_check) { | 
| +        __ cmpq(right, | 
| +            Immediate(reinterpret_cast<int64_t>(Smi::New(Smi::kBits)))); | 
| +        __ j(ABOVE_EQUAL, &call_method, Assembler::kNearJump); | 
| +      } | 
| Register right_temp = locs()->temp(1).reg(); | 
| ASSERT(right_temp == RCX);  // Count must be in RCX | 
| __ movq(right_temp, right); | 
|  |