| Index: src/x64/lithium-codegen-x64.cc
|
| diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc
|
| index f08c56e1f79856a4e445eb60fb1a072e1b3785b4..b35790297570b20f830c5c523734358c4fff520b 100644
|
| --- a/src/x64/lithium-codegen-x64.cc
|
| +++ b/src/x64/lithium-codegen-x64.cc
|
| @@ -3921,6 +3921,19 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) {
|
| Register value = ToRegister(instr->value());
|
| __ Integer32ToSmi(value, value);
|
| }
|
| + } else if (FLAG_track_heap_object_fields && representation.IsHeapObject()) {
|
| + if (instr->value()->IsConstantOperand()) {
|
| + LConstantOperand* operand_value = LConstantOperand::cast(instr->value());
|
| + if (IsInteger32Constant(operand_value)) {
|
| + DeoptimizeIf(no_condition, instr->environment());
|
| + }
|
| + } else {
|
| + if (!instr->hydrogen()->value()->type().IsHeapObject()) {
|
| + Register value = ToRegister(instr->value());
|
| + Condition cc = masm()->CheckSmi(value);
|
| + DeoptimizeIf(cc, instr->environment());
|
| + }
|
| + }
|
| } else if (FLAG_track_double_fields && representation.IsDouble()) {
|
| ASSERT(transition.is_null());
|
| ASSERT(instr->is_in_object());
|
|
|