| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index b6498b1dbbce8786fa2d021df5196e7e274e0df6..76c5ca0a4df7835fcf4489500c7f5afd229ee54f 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -2237,25 +2237,8 @@ HInnerAllocatedObject* HGraphBuilder::BuildJSArrayHeader(HValue* array,
|
| length_field);
|
|
|
| if (mode == TRACK_ALLOCATION_SITE) {
|
| - BuildCreateAllocationMemento(array,
|
| - JSArray::kSize,
|
| - allocation_site_payload);
|
| - if (FLAG_allocation_site_pretenuring) {
|
| - // TODO(mvstanton): move this code into BuildCreateAllocationMemento when
|
| - // constructed arrays also pay attention to pretenuring.
|
| - HObjectAccess access =
|
| - HObjectAccess::ForAllocationSiteOffset(
|
| - AllocationSite::kMementoCreateCountOffset);
|
| - HValue* create_info = Add<HLoadNamedField>(allocation_site_payload,
|
| - access);
|
| - HInstruction* new_create_info =
|
| - AddUncasted<HAdd>(create_info, graph()->GetConstant1());
|
| - new_create_info->ClearFlag(HValue::kCanOverflow);
|
| - HStoreNamedField* store = Add<HStoreNamedField>(allocation_site_payload,
|
| - access, new_create_info);
|
| - // No write barrier needed to store a smi.
|
| - store->SkipWriteBarrier();
|
| - }
|
| + BuildCreateAllocationMemento(
|
| + array, Add<HConstant>(JSArray::kSize), allocation_site_payload);
|
| }
|
|
|
| int elements_location = JSArray::kSize;
|
| @@ -2263,9 +2246,10 @@ HInnerAllocatedObject* HGraphBuilder::BuildJSArrayHeader(HValue* array,
|
| elements_location += AllocationMemento::kSize;
|
| }
|
|
|
| - HValue* elements = Add<HInnerAllocatedObject>(array, elements_location);
|
| + HInnerAllocatedObject* elements = Add<HInnerAllocatedObject>(
|
| + array, Add<HConstant>(elements_location));
|
| Add<HStoreNamedField>(array, HObjectAccess::ForElementsPointer(), elements);
|
| - return static_cast<HInnerAllocatedObject*>(elements);
|
| + return elements;
|
| }
|
|
|
|
|
| @@ -2495,7 +2479,8 @@ HValue* HGraphBuilder::BuildCloneShallowArray(HValue* boilerplate,
|
|
|
| // Create an allocation site info if requested.
|
| if (mode == TRACK_ALLOCATION_SITE) {
|
| - BuildCreateAllocationMemento(object, JSArray::kSize, allocation_site);
|
| + BuildCreateAllocationMemento(
|
| + object, Add<HConstant>(JSArray::kSize), allocation_site);
|
| }
|
|
|
| if (length > 0) {
|
| @@ -2588,18 +2573,31 @@ void HGraphBuilder::BuildCompareNil(
|
| }
|
|
|
|
|
| -HValue* HGraphBuilder::BuildCreateAllocationMemento(HValue* previous_object,
|
| - int previous_object_size,
|
| - HValue* alloc_site) {
|
| - ASSERT(alloc_site != NULL);
|
| - HInnerAllocatedObject* alloc_memento = Add<HInnerAllocatedObject>(
|
| +void HGraphBuilder::BuildCreateAllocationMemento(
|
| + HValue* previous_object,
|
| + HValue* previous_object_size,
|
| + HValue* allocation_site) {
|
| + ASSERT(allocation_site != NULL);
|
| + HInnerAllocatedObject* allocation_memento = Add<HInnerAllocatedObject>(
|
| previous_object, previous_object_size);
|
| - Handle<Map> alloc_memento_map =
|
| - isolate()->factory()->allocation_memento_map();
|
| - AddStoreMapConstant(alloc_memento, alloc_memento_map);
|
| - HObjectAccess access = HObjectAccess::ForAllocationMementoSite();
|
| - Add<HStoreNamedField>(alloc_memento, access, alloc_site);
|
| - return alloc_memento;
|
| + AddStoreMapConstant(
|
| + allocation_memento, isolate()->factory()->allocation_memento_map());
|
| + Add<HStoreNamedField>(
|
| + allocation_memento,
|
| + HObjectAccess::ForAllocationMementoSite(),
|
| + allocation_site);
|
| + if (FLAG_allocation_site_pretenuring) {
|
| + HValue* memento_create_count = Add<HLoadNamedField>(
|
| + allocation_site, HObjectAccess::ForAllocationSiteOffset(
|
| + AllocationSite::kMementoCreateCountOffset));
|
| + memento_create_count = AddUncasted<HAdd>(
|
| + memento_create_count, graph()->GetConstant1());
|
| + HStoreNamedField* store = Add<HStoreNamedField>(
|
| + allocation_site, HObjectAccess::ForAllocationSiteOffset(
|
| + AllocationSite::kMementoCreateCountOffset), memento_create_count);
|
| + // No write barrier needed to store a smi.
|
| + store->SkipWriteBarrier();
|
| + }
|
| }
|
|
|
|
|
|
|