Index: src/ia32/lithium-codegen-ia32.cc |
diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc |
index 6ec5ed9a5c300640993447ce5e130d91813214bf..9ab2d412bebb975266dc9ac5ef7eb14cd106e08c 100644 |
--- a/src/ia32/lithium-codegen-ia32.cc |
+++ b/src/ia32/lithium-codegen-ia32.cc |
@@ -4239,6 +4239,19 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { |
DeoptimizeIf(overflow, instr->environment()); |
} |
} |
+ } else if (FLAG_track_heap_object_fields && representation.IsHeapObject()) { |
+ if (instr->value()->IsConstantOperand()) { |
+ LConstantOperand* operand_value = LConstantOperand::cast(instr->value()); |
+ if (IsInteger32(operand_value)) { |
+ DeoptimizeIf(no_condition, instr->environment()); |
+ } |
+ } else { |
+ if (!instr->hydrogen()->value()->type().IsHeapObject()) { |
+ Register value = ToRegister(instr->value()); |
+ __ test(value, Immediate(kSmiTagMask)); |
+ DeoptimizeIf(zero, instr->environment()); |
+ } |
+ } |
} else if (FLAG_track_double_fields && representation.IsDouble()) { |
ASSERT(transition.is_null()); |
ASSERT(instr->is_in_object()); |