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() |