| Index: src/ia32/lithium-codegen-ia32.cc | 
| diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc | 
| index 761f5164dd81920777368707d8a10c61960fda2a..047e9b89677424919247377371b36e91af65a168 100644 | 
| --- a/src/ia32/lithium-codegen-ia32.cc | 
| +++ b/src/ia32/lithium-codegen-ia32.cc | 
| @@ -495,8 +495,6 @@ XMMRegister LCodeGen::ToDoubleRegister(LOperand* op) const { | 
|  | 
| int LCodeGen::ToInteger32(LConstantOperand* op) const { | 
| HConstant* constant = chunk_->LookupConstant(op); | 
| -  ASSERT(chunk_->LookupLiteralRepresentation(op).IsInteger32()); | 
| -  ASSERT(constant->HasInteger32Value()); | 
| return constant->Integer32Value(); | 
| } | 
|  | 
| @@ -3200,13 +3198,6 @@ Operand LCodeGen::BuildFastArrayOperand( | 
| uint32_t additional_index) { | 
| Register elements_pointer_reg = ToRegister(elements_pointer); | 
| int shift_size = ElementsKindToShiftSize(elements_kind); | 
| -  // Even though the HLoad/StoreKeyed instructions force the input | 
| -  // representation for the key to be an integer, the input gets replaced during | 
| -  // bound check elimination with the index argument to the bounds check, which | 
| -  // can be tagged, so that case must be handled here, too. | 
| -  if (key_representation.IsTagged() && (shift_size >= 1)) { | 
| -    shift_size -= kSmiTagSize; | 
| -  } | 
| if (key->IsConstantOperand()) { | 
| int constant_value = ToInteger32(LConstantOperand::cast(key)); | 
| if (constant_value & 0xF0000000) { | 
| @@ -3216,6 +3207,10 @@ Operand LCodeGen::BuildFastArrayOperand( | 
| ((constant_value + additional_index) << shift_size) | 
| + offset); | 
| } else { | 
| +    // Take the tag bit into account while computing the shift size. | 
| +    if (key_representation.IsTagged() && (shift_size >= 1)) { | 
| +      shift_size -= kSmiTagSize; | 
| +    } | 
| ScaleFactor scale_factor = static_cast<ScaleFactor>(shift_size); | 
| return Operand(elements_pointer_reg, | 
| ToRegister(key), | 
|  |