| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 80eff3b552f86cfdaeb9eec6ee3e44320a135b81..6313bfdcd938e946c58c8db93c79cd46547e367c 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -5376,10 +5376,11 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField(
|
| isolate()->heap()->GetPretenureMode() : NOT_TENURED;
|
|
|
| HInstruction* heap_number = Add<HAllocate>(heap_number_size,
|
| - HType::HeapNumber(),
|
| + HType::Tagged(),
|
| pretenure_flag,
|
| - HEAP_NUMBER_TYPE);
|
| - AddStoreMapConstant(heap_number, isolate()->factory()->heap_number_map());
|
| + MUTABLE_HEAP_NUMBER_TYPE);
|
| + AddStoreMapConstant(
|
| + heap_number, isolate()->factory()->mutable_heap_number_map());
|
| Add<HStoreNamedField>(heap_number, HObjectAccess::ForHeapNumberValue(),
|
| value);
|
| instr = New<HStoreNamedField>(checked_object->ActualValue(),
|
| @@ -10097,12 +10098,15 @@ void HOptimizedGraphBuilder::BuildEmitInObjectProperties(
|
| // 1) it's a child object of another object with a valid allocation site
|
| // 2) we can just use the mode of the parent object for pretenuring
|
| HInstruction* double_box =
|
| - Add<HAllocate>(heap_number_constant, HType::HeapNumber(),
|
| - pretenure_flag, HEAP_NUMBER_TYPE);
|
| + Add<HAllocate>(heap_number_constant, HType::Tagged(),
|
| + pretenure_flag, MUTABLE_HEAP_NUMBER_TYPE);
|
| AddStoreMapConstant(double_box,
|
| - isolate()->factory()->heap_number_map());
|
| - Add<HStoreNamedField>(double_box, HObjectAccess::ForHeapNumberValue(),
|
| - Add<HConstant>(value));
|
| + isolate()->factory()->mutable_heap_number_map());
|
| + // Unwrap the mutable heap number from the boilerplate.
|
| + HValue* double_value =
|
| + Add<HConstant>(Handle<HeapNumber>::cast(value)->value());
|
| + Add<HStoreNamedField>(
|
| + double_box, HObjectAccess::ForHeapNumberValue(), double_value);
|
| value_instruction = double_box;
|
| } else if (representation.IsSmi()) {
|
| value_instruction = value->IsUninitialized()
|
|
|