@@ -11300,16 +11300,20 @@ HInstruction* HOptimizedGraphBuilder::BuildFastLiteral(
1130011300 HValue* object_size_constant = Add<HConstant>(initial_map->instance_size ());
1130111301
1130211302 PretenureFlag pretenure_flag = NOT_TENURED;
11303- Handle<AllocationSite> current_site (*site_context->current (), isolate ());
11303+ Handle<AllocationSite> top_site (*site_context->top (), isolate ());
1130411304 if (FLAG_allocation_site_pretenuring) {
11305- pretenure_flag = current_site->GetPretenureMode ();
11306- top_info ()->dependencies ()->AssumeTenuringDecision (current_site);
11305+ pretenure_flag = top_site->GetPretenureMode ();
1130711306 }
1130811307
11308+ Handle<AllocationSite> current_site (*site_context->current (), isolate ());
11309+ if (*top_site == *current_site) {
11310+ // We install a dependency for pretenuring only on the outermost literal.
11311+ top_info ()->dependencies ()->AssumeTenuringDecision (top_site);
11312+ }
1130911313 top_info ()->dependencies ()->AssumeTransitionStable (current_site);
1131011314
1131111315 HInstruction* object = Add<HAllocate>(
11312- object_size_constant, type, pretenure_flag, instance_type, current_site );
11316+ object_size_constant, type, pretenure_flag, instance_type, top_site );
1131311317
1131411318 // If allocation folding reaches Page::kMaxRegularHeapObjectSize the
1131511319 // elements array may not get folded into the object. Hence, we set the
@@ -11349,9 +11353,8 @@ HInstruction* HOptimizedGraphBuilder::BuildFastLiteral(
1134911353 HValue* object_elements_size = Add<HConstant>(elements_size);
1135011354 InstanceType instance_type = boilerplate_object->HasFastDoubleElements ()
1135111355 ? FIXED_DOUBLE_ARRAY_TYPE : FIXED_ARRAY_TYPE;
11352- object_elements =
11353- Add<HAllocate>(object_elements_size, HType::HeapObject (),
11354- pretenure_flag, instance_type, current_site);
11356+ object_elements = Add<HAllocate>(object_elements_size, HType::HeapObject (),
11357+ pretenure_flag, instance_type, top_site);
1135511358 BuildEmitElements (boilerplate_object, elements, object_elements,
1135611359 site_context);
1135711360 Add<HStoreNamedField>(object, HObjectAccess::ForElementsPointer (),
@@ -11452,10 +11455,6 @@ void HOptimizedGraphBuilder::BuildEmitInObjectProperties(
1145211455 if (representation.IsDouble ()) {
1145311456 // Allocate a HeapNumber box and store the value into it.
1145411457 HValue* heap_number_constant = Add<HConstant>(HeapNumber::kSize );
11455- // This heap number alloc does not have a corresponding
11456- // AllocationSite. That is okay because
11457- // 1) it's a child object of another object with a valid allocation site
11458- // 2) we can just use the mode of the parent object for pretenuring
1145911458 HInstruction* double_box =
1146011459 Add<HAllocate>(heap_number_constant, HType::HeapObject (),
1146111460 pretenure_flag, MUTABLE_HEAP_NUMBER_TYPE);
0 commit comments