Index: src/crankshaft/hydrogen.cc |
diff --git a/src/crankshaft/hydrogen.cc b/src/crankshaft/hydrogen.cc |
index 76d1ef51e2c3f9d666a654a4ab808b8c25f7579b..89cd6613791552b7a70e36189473abdb1d929856 100644 |
--- a/src/crankshaft/hydrogen.cc |
+++ b/src/crankshaft/hydrogen.cc |
@@ -2040,7 +2040,7 @@ HValue* HGraphBuilder::BuildCreateIterResultObject(HValue* value, |
// Allocate the JSIteratorResult object. |
HValue* result = |
Add<HAllocate>(Add<HConstant>(JSIteratorResult::kSize), HType::JSObject(), |
- NOT_TENURED, JS_OBJECT_TYPE); |
+ NOT_TENURED, JS_OBJECT_TYPE, graph()->GetConstant0()); |
// Initialize the JSIteratorResult object. |
HValue* native_context = BuildGetNativeContext(); |
@@ -2077,9 +2077,9 @@ HValue* HGraphBuilder::BuildRegExpConstructResult(HValue* length, |
HValue* size = BuildCalculateElementsSize(elements_kind, length); |
// Allocate the JSRegExpResult and the FixedArray in one step. |
- HValue* result = Add<HAllocate>( |
- Add<HConstant>(JSRegExpResult::kSize), HType::JSArray(), |
- NOT_TENURED, JS_ARRAY_TYPE); |
+ HValue* result = |
+ Add<HAllocate>(Add<HConstant>(JSRegExpResult::kSize), HType::JSArray(), |
+ NOT_TENURED, JS_ARRAY_TYPE, graph()->GetConstant0()); |
// Initialize the JSRegExpResult header. |
HValue* native_context = Add<HLoadNamedField>( |
@@ -2113,12 +2113,6 @@ HValue* HGraphBuilder::BuildRegExpConstructResult(HValue* length, |
HAllocate* elements = BuildAllocateElements(elements_kind, size); |
BuildInitializeElementsHeader(elements, elements_kind, length); |
- if (!elements->has_size_upper_bound()) { |
- HConstant* size_in_bytes_upper_bound = EstablishElementsAllocationSize( |
- elements_kind, max_length->Integer32Value()); |
- elements->set_size_upper_bound(size_in_bytes_upper_bound); |
- } |
- |
Add<HStoreNamedField>( |
result, HObjectAccess::ForJSArrayOffset(JSArray::kElementsOffset), |
elements); |
@@ -2394,8 +2388,8 @@ HAllocate* HGraphBuilder::BuildAllocate( |
// Perform the actual allocation. |
HAllocate* object = Add<HAllocate>( |
- size, type, allocation_mode.GetPretenureMode(), |
- instance_type, allocation_mode.feedback_site()); |
+ size, type, allocation_mode.GetPretenureMode(), instance_type, |
+ graph()->GetConstant0(), allocation_mode.feedback_site()); |
// Setup the allocation memento. |
if (allocation_mode.CreateAllocationMementos()) { |
@@ -2890,7 +2884,6 @@ HValue* HGraphBuilder::BuildAllocateArrayFromLength( |
return array_builder->AllocateEmptyArray(); |
} else { |
return array_builder->AllocateArray(length_argument, |
- array_length, |
length_argument); |
} |
} |
@@ -2923,7 +2916,7 @@ HValue* HGraphBuilder::BuildAllocateArrayFromLength( |
// Figure out total size |
HValue* length = Pop(); |
HValue* capacity = Pop(); |
- return array_builder->AllocateArray(capacity, max_alloc_length, length); |
+ return array_builder->AllocateArray(capacity, length); |
} |
@@ -2955,8 +2948,8 @@ HAllocate* HGraphBuilder::AllocateJSArrayObject(AllocationSiteMode mode) { |
base_size += AllocationMemento::kSize; |
} |
HConstant* size_in_bytes = Add<HConstant>(base_size); |
- return Add<HAllocate>( |
- size_in_bytes, HType::JSArray(), NOT_TENURED, JS_OBJECT_TYPE); |
+ return Add<HAllocate>(size_in_bytes, HType::JSArray(), NOT_TENURED, |
+ JS_OBJECT_TYPE, graph()->GetConstant0()); |
} |
@@ -2978,7 +2971,7 @@ HAllocate* HGraphBuilder::BuildAllocateElements(ElementsKind kind, |
: FIXED_ARRAY_TYPE; |
return Add<HAllocate>(size_in_bytes, HType::HeapObject(), NOT_TENURED, |
- instance_type); |
+ instance_type, graph()->GetConstant0()); |
} |
@@ -3366,14 +3359,6 @@ HValue* HGraphBuilder::BuildCloneShallowArrayNonEmpty(HValue* boilerplate, |
HAllocate* elements = BuildAllocateElements(kind, elements_size); |
- // This function implicitly relies on the fact that the |
- // FastCloneShallowArrayStub is called only for literals shorter than |
- // JSArray::kInitialMaxFastElementArray. |
- // Can't add HBoundsCheck here because otherwise the stub will eager a frame. |
- HConstant* size_upper_bound = EstablishElementsAllocationSize( |
- kind, JSArray::kInitialMaxFastElementArray); |
- elements->set_size_upper_bound(size_upper_bound); |
- |
Add<HStoreNamedField>(result, HObjectAccess::ForElementsPointer(), elements); |
// The allocation for the cloned array above causes register pressure on |
@@ -3613,42 +3598,12 @@ HValue* HGraphBuilder::JSArrayBuilder::EmitInternalMapCode() { |
HAllocate* HGraphBuilder::JSArrayBuilder::AllocateEmptyArray() { |
HConstant* capacity = builder()->Add<HConstant>(initial_capacity()); |
return AllocateArray(capacity, |
- capacity, |
builder()->graph()->GetConstant0()); |
} |
HAllocate* HGraphBuilder::JSArrayBuilder::AllocateArray( |
HValue* capacity, |
- HConstant* capacity_upper_bound, |
- HValue* length_field, |
- FillMode fill_mode) { |
- return AllocateArray(capacity, |
- capacity_upper_bound->GetInteger32Constant(), |
- length_field, |
- fill_mode); |
-} |
- |
- |
-HAllocate* HGraphBuilder::JSArrayBuilder::AllocateArray( |
- HValue* capacity, |
- int capacity_upper_bound, |
- HValue* length_field, |
- FillMode fill_mode) { |
- HConstant* elememts_size_upper_bound = capacity->IsInteger32Constant() |
- ? HConstant::cast(capacity) |
- : builder()->EstablishElementsAllocationSize(kind_, capacity_upper_bound); |
- |
- HAllocate* array = AllocateArray(capacity, length_field, fill_mode); |
- if (!elements_location_->has_size_upper_bound()) { |
- elements_location_->set_size_upper_bound(elememts_size_upper_bound); |
- } |
- return array; |
-} |
- |
- |
-HAllocate* HGraphBuilder::JSArrayBuilder::AllocateArray( |
- HValue* capacity, |
HValue* length_field, |
FillMode fill_mode) { |
// These HForceRepresentations are because we store these as fields in the |
@@ -6369,10 +6324,9 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField( |
HInstruction* heap_number_size = Add<HConstant>(HeapNumber::kSize); |
// TODO(hpayer): Allocation site pretenuring support. |
- HInstruction* heap_number = Add<HAllocate>(heap_number_size, |
- HType::HeapObject(), |
- NOT_TENURED, |
- MUTABLE_HEAP_NUMBER_TYPE); |
+ HInstruction* heap_number = |
+ Add<HAllocate>(heap_number_size, HType::HeapObject(), NOT_TENURED, |
+ MUTABLE_HEAP_NUMBER_TYPE, graph()->GetConstant0()); |
AddStoreMapConstant( |
heap_number, isolate()->factory()->mutable_heap_number_map()); |
Add<HStoreNamedField>(heap_number, HObjectAccess::ForHeapNumberValue(), |
@@ -10397,7 +10351,8 @@ HValue* HOptimizedGraphBuilder::BuildAllocateExternalElements( |
length = AddUncasted<HForceRepresentation>(length, Representation::Smi()); |
HValue* elements = Add<HAllocate>( |
Add<HConstant>(FixedTypedArrayBase::kHeaderSize), HType::HeapObject(), |
- NOT_TENURED, external_array_map->instance_type()); |
+ NOT_TENURED, external_array_map->instance_type(), |
+ graph()->GetConstant0()); |
AddStoreMapConstant(elements, external_array_map); |
Add<HStoreNamedField>(elements, |
@@ -10453,9 +10408,9 @@ HValue* HOptimizedGraphBuilder::BuildAllocateFixedTypedArray( |
length = AddUncasted<HForceRepresentation>(length, Representation::Smi()); |
Handle<Map> fixed_typed_array_map( |
isolate()->heap()->MapForFixedTypedArray(array_type)); |
- HAllocate* elements = |
- Add<HAllocate>(total_size, HType::HeapObject(), NOT_TENURED, |
- fixed_typed_array_map->instance_type()); |
+ HAllocate* elements = Add<HAllocate>( |
+ total_size, HType::HeapObject(), NOT_TENURED, |
+ fixed_typed_array_map->instance_type(), graph()->GetConstant0()); |
#ifndef V8_HOST_ARCH_64_BIT |
if (array_type == kExternalFloat64Array) { |
@@ -12032,8 +11987,9 @@ HInstruction* HOptimizedGraphBuilder::BuildFastLiteral( |
} |
top_info()->dependencies()->AssumeTransitionStable(current_site); |
- HInstruction* object = Add<HAllocate>( |
- object_size_constant, type, pretenure_flag, instance_type, top_site); |
+ HInstruction* object = |
+ Add<HAllocate>(object_size_constant, type, pretenure_flag, instance_type, |
+ graph()->GetConstant0(), top_site); |
// If allocation folding reaches Page::kMaxRegularHeapObjectSize the |
// elements array may not get folded into the object. Hence, we set the |
@@ -12074,7 +12030,8 @@ HInstruction* HOptimizedGraphBuilder::BuildFastLiteral( |
InstanceType instance_type = boilerplate_object->HasFastDoubleElements() |
? FIXED_DOUBLE_ARRAY_TYPE : FIXED_ARRAY_TYPE; |
object_elements = Add<HAllocate>(object_elements_size, HType::HeapObject(), |
- pretenure_flag, instance_type, top_site); |
+ pretenure_flag, instance_type, |
+ graph()->GetConstant0(), top_site); |
BuildEmitElements(boilerplate_object, elements, object_elements, |
site_context); |
Add<HStoreNamedField>(object, HObjectAccess::ForElementsPointer(), |
@@ -12175,9 +12132,9 @@ void HOptimizedGraphBuilder::BuildEmitInObjectProperties( |
if (representation.IsDouble()) { |
// Allocate a HeapNumber box and store the value into it. |
HValue* heap_number_constant = Add<HConstant>(HeapNumber::kSize); |
- HInstruction* double_box = |
- Add<HAllocate>(heap_number_constant, HType::HeapObject(), |
- pretenure_flag, MUTABLE_HEAP_NUMBER_TYPE); |
+ HInstruction* double_box = Add<HAllocate>( |
+ heap_number_constant, HType::HeapObject(), pretenure_flag, |
+ MUTABLE_HEAP_NUMBER_TYPE, graph()->GetConstant0()); |
AddStoreMapConstant(double_box, |
isolate()->factory()->mutable_heap_number_map()); |
// Unwrap the mutable heap number from the boilerplate. |
@@ -12991,7 +12948,7 @@ HValue* HOptimizedGraphBuilder::BuildAllocateOrderedHashTable() { |
// Allocate the table and add the proper map. |
HValue* table = |
Add<HAllocate>(Add<HConstant>(kSizeInBytes), HType::HeapObject(), |
- NOT_TENURED, FIXED_ARRAY_TYPE); |
+ NOT_TENURED, FIXED_ARRAY_TYPE, graph()->GetConstant0()); |
AddStoreMapConstant(table, isolate()->factory()->ordered_hash_table_map()); |
// Initialize the FixedArray... |