| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 8681026391939e4ef56e0324f7eac83a8741d2c2..8abfa8f8b8a9d586b7f9fabd7bc364cdff3a13c6 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -4321,9 +4321,7 @@ void HOptimizedGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
|
| &max_properties)) {
|
| Handle<JSObject> boilerplate_object = Handle<JSObject>::cast(boilerplate);
|
|
|
| - literal = BuildFastLiteral(boilerplate_object,
|
| - Handle<Object>::null(),
|
| - DONT_TRACK_ALLOCATION_SITE);
|
| + literal = BuildFastLiteral(boilerplate_object);
|
| } else {
|
| NoObservableSideEffectsScope no_effects(this);
|
| Handle<FixedArray> closure_literals(closure->literals(), isolate());
|
| @@ -4467,22 +4465,7 @@ void HOptimizedGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) {
|
| if (IsFastLiteral(boilerplate_object,
|
| kMaxFastLiteralDepth,
|
| &max_properties)) {
|
| - // TODO(mvstanton): This heuristic is only a temporary solution. In the
|
| - // end, we want to quit creating allocation site info after a certain number
|
| - // of GCs for a call site.
|
| - AllocationSiteMode mode = AllocationSite::GetMode(
|
| - boilerplate_elements_kind);
|
| -
|
| - // it doesn't make sense to create allocation mementos if we are going to
|
| - // create in old space.
|
| - if (mode == TRACK_ALLOCATION_SITE &&
|
| - isolate()->heap()->GetPretenureMode() == TENURED) {
|
| - mode = DONT_TRACK_ALLOCATION_SITE;
|
| - }
|
| -
|
| - literal = BuildFastLiteral(boilerplate_object,
|
| - site,
|
| - mode);
|
| + literal = BuildFastLiteral(boilerplate_object);
|
| } else {
|
| NoObservableSideEffectsScope no_effects(this);
|
| // Boilerplate already exists and constant elements are never accessed,
|
| @@ -8379,44 +8362,21 @@ HInstruction* HOptimizedGraphBuilder::BuildThisFunction() {
|
|
|
|
|
| HInstruction* HOptimizedGraphBuilder::BuildFastLiteral(
|
| - Handle<JSObject> boilerplate_object,
|
| - Handle<Object> allocation_site_object,
|
| - AllocationSiteMode mode) {
|
| + Handle<JSObject> boilerplate_object) {
|
| NoObservableSideEffectsScope no_effects(this);
|
| -
|
| - Handle<FixedArrayBase> elements(boilerplate_object->elements());
|
| - int object_size = boilerplate_object->map()->instance_size();
|
| - int object_offset = object_size;
|
| -
|
| InstanceType instance_type = boilerplate_object->map()->instance_type();
|
| - bool create_allocation_site_info = mode == TRACK_ALLOCATION_SITE;
|
| -
|
| - // If using allocation sites, then
|
| - // 1) the payload on the site should already be filled in as a valid
|
| - // (boilerplate) array, and
|
| - // 2) we shouldn't be pretenuring the allocations.
|
| - ASSERT(!create_allocation_site_info ||
|
| - (AllocationSite::cast(*allocation_site_object)->IsLiteralSite() &&
|
| - isolate()->heap()->GetPretenureMode() == NOT_TENURED));
|
| -
|
| - if (create_allocation_site_info) {
|
| - object_size += AllocationMemento::kSize;
|
| - }
|
| -
|
| ASSERT(instance_type == JS_ARRAY_TYPE || instance_type == JS_OBJECT_TYPE);
|
| +
|
| HType type = instance_type == JS_ARRAY_TYPE
|
| ? HType::JSArray() : HType::JSObject();
|
| - HValue* object_size_constant = Add<HConstant>(object_size);
|
| + HValue* object_size_constant = Add<HConstant>(
|
| + boilerplate_object->map()->instance_size());
|
| HInstruction* object = Add<HAllocate>(object_size_constant, type,
|
| isolate()->heap()->GetPretenureMode(), instance_type);
|
|
|
| BuildEmitObjectHeader(boilerplate_object, object);
|
|
|
| - if (create_allocation_site_info) {
|
| - HInstruction* allocation_site = Add<HConstant>(allocation_site_object);
|
| - BuildCreateAllocationMemento(object, object_offset, allocation_site);
|
| - }
|
| -
|
| + Handle<FixedArrayBase> elements(boilerplate_object->elements());
|
| int elements_size = (elements->length() > 0 &&
|
| elements->map() != isolate()->heap()->fixed_cow_array_map()) ?
|
| elements->Size() : 0;
|
| @@ -8518,9 +8478,7 @@ void HOptimizedGraphBuilder::BuildEmitInObjectProperties(
|
|
|
| if (value->IsJSObject()) {
|
| Handle<JSObject> value_object = Handle<JSObject>::cast(value);
|
| - HInstruction* result =
|
| - BuildFastLiteral(value_object,
|
| - Handle<Object>::null(), DONT_TRACK_ALLOCATION_SITE);
|
| + HInstruction* result = BuildFastLiteral(value_object);
|
| Add<HStoreNamedField>(object, access, result);
|
| } else {
|
| Representation representation = details.representation();
|
| @@ -8606,9 +8564,7 @@ void HOptimizedGraphBuilder::BuildEmitFixedArray(
|
| HValue* key_constant = Add<HConstant>(i);
|
| if (value->IsJSObject()) {
|
| Handle<JSObject> value_object = Handle<JSObject>::cast(value);
|
| - HInstruction* result =
|
| - BuildFastLiteral(value_object,
|
| - Handle<Object>::null(), DONT_TRACK_ALLOCATION_SITE);
|
| + HInstruction* result = BuildFastLiteral(value_object);
|
| Add<HStoreKeyed>(object_elements, key_constant, result, kind);
|
| } else {
|
| HInstruction* value_instruction =
|
|
|