| Index: src/arm/lithium-codegen-arm.cc
 | 
| diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc
 | 
| index 8f28651e326da89bb99e9cb17393c374eb099bd8..d7d3c5eab40481aa1c153053e8b873f914948eb6 100644
 | 
| --- a/src/arm/lithium-codegen-arm.cc
 | 
| +++ b/src/arm/lithium-codegen-arm.cc
 | 
| @@ -1744,7 +1744,14 @@ void LCodeGen::DoShiftI(LShiftI* instr) {
 | 
|          break;
 | 
|        case Token::SHL:
 | 
|          if (shift_count != 0) {
 | 
| -          __ mov(result, Operand(left, LSL, shift_count));
 | 
| +          if (instr->hydrogen_value()->representation().IsSmi() &&
 | 
| +              instr->can_deopt()) {
 | 
| +            __ mov(result, Operand(left, LSL, shift_count - 1));
 | 
| +            __ SmiTag(result, result, SetCC);
 | 
| +            DeoptimizeIf(vs, instr->environment());
 | 
| +          } else {
 | 
| +            __ mov(result, Operand(left, LSL, shift_count));
 | 
| +          }
 | 
|          } else {
 | 
|            __ Move(result, left);
 | 
|          }
 | 
| 
 |