Index: src/crankshaft/hydrogen.cc |
diff --git a/src/crankshaft/hydrogen.cc b/src/crankshaft/hydrogen.cc |
index 81c6ed4281b91588f6592b365ac7652e77ce3d78..12524fccd0c067994a71c390a11b1c7e7911dc06 100644 |
--- a/src/crankshaft/hydrogen.cc |
+++ b/src/crankshaft/hydrogen.cc |
@@ -1372,7 +1372,8 @@ HValue* HGraphBuilder::BuildCheckForCapacityGrow( |
HValue* checked_elements = environment()->Top(); |
// Write zero to ensure that the new element is initialized with some smi. |
- Add<HStoreKeyed>(checked_elements, key, graph()->GetConstant0(), kind); |
+ Add<HStoreKeyed>(checked_elements, key, graph()->GetConstant0(), nullptr, |
+ kind); |
} |
length_checker.Else(); |
@@ -1676,7 +1677,7 @@ HValue* HGraphBuilder::BuildUncheckedDictionaryElementLoad( |
LanguageMode language_mode) { |
HValue* capacity = |
Add<HLoadKeyed>(elements, Add<HConstant>(NameDictionary::kCapacityIndex), |
- nullptr, FAST_ELEMENTS); |
+ nullptr, nullptr, FAST_ELEMENTS); |
HValue* mask = AddUncasted<HSub>(capacity, graph()->GetConstant1()); |
mask->ChangeRepresentation(Representation::Integer32()); |
@@ -1707,7 +1708,7 @@ HValue* HGraphBuilder::BuildUncheckedDictionaryElementLoad( |
key_index->ClearFlag(HValue::kCanOverflow); |
HValue* candidate_key = |
- Add<HLoadKeyed>(elements, key_index, nullptr, FAST_ELEMENTS); |
+ Add<HLoadKeyed>(elements, key_index, nullptr, nullptr, FAST_ELEMENTS); |
IfBuilder if_undefined(this); |
if_undefined.If<HCompareObjectEqAndBranch>(candidate_key, |
graph()->GetConstantUndefined()); |
@@ -1750,7 +1751,7 @@ HValue* HGraphBuilder::BuildUncheckedDictionaryElementLoad( |
if_update_with_internalized.Then(); |
// Replace a key that is a non-internalized string by the equivalent |
// internalized string for faster further lookups. |
- Add<HStoreKeyed>(elements, key_index, key, FAST_ELEMENTS); |
+ Add<HStoreKeyed>(elements, key_index, key, nullptr, FAST_ELEMENTS); |
if_update_with_internalized.Else(); |
if_update_with_internalized.JoinContinuation(&found_key_match_continuation); |
@@ -1763,8 +1764,8 @@ HValue* HGraphBuilder::BuildUncheckedDictionaryElementLoad( |
HValue* details_index = |
AddUncasted<HAdd>(base_index, Add<HConstant>(start_offset + 2)); |
details_index->ClearFlag(HValue::kCanOverflow); |
- HValue* details = |
- Add<HLoadKeyed>(elements, details_index, nullptr, FAST_ELEMENTS); |
+ HValue* details = Add<HLoadKeyed>(elements, details_index, nullptr, nullptr, |
+ FAST_ELEMENTS); |
int details_mask = PropertyDetails::TypeField::kMask; |
details = AddUncasted<HBitwise>(Token::BIT_AND, details, |
Add<HConstant>(details_mask)); |
@@ -1775,7 +1776,8 @@ HValue* HGraphBuilder::BuildUncheckedDictionaryElementLoad( |
HValue* result_index = |
AddUncasted<HAdd>(base_index, Add<HConstant>(start_offset + 1)); |
result_index->ClearFlag(HValue::kCanOverflow); |
- Push(Add<HLoadKeyed>(elements, result_index, nullptr, FAST_ELEMENTS)); |
+ Push(Add<HLoadKeyed>(elements, result_index, nullptr, nullptr, |
+ FAST_ELEMENTS)); |
details_compare.Else(); |
Add<HPushArguments>(receiver, key); |
Push(Add<HCallRuntime>( |
@@ -1945,7 +1947,7 @@ HValue* HGraphBuilder::BuildNumberToString(HValue* object, Type* type) { |
// Load the key. |
HValue* key_index = AddUncasted<HShl>(hash, graph()->GetConstant1()); |
HValue* key = Add<HLoadKeyed>(number_string_cache, key_index, nullptr, |
- FAST_ELEMENTS, ALLOW_RETURN_HOLE); |
+ nullptr, FAST_ELEMENTS, ALLOW_RETURN_HOLE); |
// Check if object == key. |
IfBuilder if_objectiskey(this); |
@@ -1980,8 +1982,9 @@ HValue* HGraphBuilder::BuildNumberToString(HValue* object, Type* type) { |
// Load the key. |
HValue* key_index = AddUncasted<HShl>(hash, graph()->GetConstant1()); |
- HValue* key = Add<HLoadKeyed>(number_string_cache, key_index, nullptr, |
- FAST_ELEMENTS, ALLOW_RETURN_HOLE); |
+ HValue* key = |
+ Add<HLoadKeyed>(number_string_cache, key_index, nullptr, nullptr, |
+ FAST_ELEMENTS, ALLOW_RETURN_HOLE); |
// Check if the key is a heap number and compare it with the object. |
IfBuilder if_keyisnotsmi(this); |
@@ -2033,7 +2036,7 @@ HValue* HGraphBuilder::BuildNumberToString(HValue* object, Type* type) { |
// Load the value in case of cache hit. |
HValue* key_index = Pop(); |
HValue* value_index = AddUncasted<HAdd>(key_index, graph()->GetConstant1()); |
- Push(Add<HLoadKeyed>(number_string_cache, value_index, nullptr, |
+ Push(Add<HLoadKeyed>(number_string_cache, value_index, nullptr, nullptr, |
FAST_ELEMENTS, ALLOW_RETURN_HOLE)); |
} |
if_found.Else(); |
@@ -2117,7 +2120,7 @@ HValue* HGraphBuilder::BuildToObject(HValue* receiver) { |
// Determine the initial map for the global constructor. |
HValue* constructor = Add<HLoadKeyed>(native_context, constructor_index, |
- nullptr, FAST_ELEMENTS); |
+ nullptr, nullptr, FAST_ELEMENTS); |
HValue* constructor_initial_map = Add<HLoadNamedField>( |
constructor, nullptr, HObjectAccess::ForPrototypeOrInitialMap()); |
// Allocate and initialize a JSValue wrapper. |
@@ -2588,7 +2591,8 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess( |
key, graph()->GetConstant0(), Token::GTE); |
negative_checker.Then(); |
HInstruction* result = AddElementAccess( |
- backing_store, key, val, bounds_check, elements_kind, access_type); |
+ backing_store, key, val, bounds_check, checked_object->ActualValue(), |
+ elements_kind, access_type); |
negative_checker.ElseDeopt(Deoptimizer::kNegativeKeyEncountered); |
negative_checker.End(); |
length_checker.End(); |
@@ -2596,9 +2600,9 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess( |
} else { |
DCHECK(store_mode == STANDARD_STORE); |
checked_key = Add<HBoundsCheck>(key, length); |
- return AddElementAccess( |
- backing_store, checked_key, val, |
- checked_object, elements_kind, access_type); |
+ return AddElementAccess(backing_store, checked_key, val, checked_object, |
+ checked_object->ActualValue(), elements_kind, |
+ access_type); |
} |
} |
DCHECK(fast_smi_only_elements || |
@@ -2637,7 +2641,7 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess( |
} |
} |
} |
- return AddElementAccess(elements, checked_key, val, checked_object, |
+ return AddElementAccess(elements, checked_key, val, checked_object, nullptr, |
elements_kind, access_type, load_mode); |
} |
@@ -2800,26 +2804,23 @@ void HGraphBuilder::BuildJSArrayHeader(HValue* array, |
HInstruction* HGraphBuilder::AddElementAccess( |
- HValue* elements, |
- HValue* checked_key, |
- HValue* val, |
- HValue* dependency, |
- ElementsKind elements_kind, |
- PropertyAccessType access_type, |
- LoadKeyedHoleMode load_mode) { |
+ HValue* elements, HValue* checked_key, HValue* val, HValue* dependency, |
+ HValue* backing_store_owner, ElementsKind elements_kind, |
+ PropertyAccessType access_type, LoadKeyedHoleMode load_mode) { |
if (access_type == STORE) { |
DCHECK(val != NULL); |
if (elements_kind == UINT8_CLAMPED_ELEMENTS) { |
val = Add<HClampToUint8>(val); |
} |
- return Add<HStoreKeyed>(elements, checked_key, val, elements_kind, |
- STORE_TO_INITIALIZED_ENTRY); |
+ return Add<HStoreKeyed>(elements, checked_key, val, backing_store_owner, |
+ elements_kind, STORE_TO_INITIALIZED_ENTRY); |
} |
DCHECK(access_type == LOAD); |
DCHECK(val == NULL); |
- HLoadKeyed* load = Add<HLoadKeyed>( |
- elements, checked_key, dependency, elements_kind, load_mode); |
+ HLoadKeyed* load = |
+ Add<HLoadKeyed>(elements, checked_key, dependency, backing_store_owner, |
+ elements_kind, load_mode); |
if (elements_kind == UINT32_ELEMENTS) { |
graph()->RecordUint32Instruction(load); |
} |
@@ -2920,7 +2921,7 @@ void HGraphBuilder::BuildFillElementsWithValue(HValue* elements, |
if (initial_capacity >= 0) { |
for (int i = 0; i < initial_capacity; i++) { |
HInstruction* key = Add<HConstant>(i); |
- Add<HStoreKeyed>(elements, key, value, elements_kind); |
+ Add<HStoreKeyed>(elements, key, value, nullptr, elements_kind); |
} |
} else { |
// Carefully loop backwards so that the "from" remains live through the loop |
@@ -2934,7 +2935,7 @@ void HGraphBuilder::BuildFillElementsWithValue(HValue* elements, |
HValue* adjusted_key = AddUncasted<HSub>(key, graph()->GetConstant1()); |
adjusted_key->ClearFlag(HValue::kCanOverflow); |
- Add<HStoreKeyed>(elements, adjusted_key, value, elements_kind); |
+ Add<HStoreKeyed>(elements, adjusted_key, value, nullptr, elements_kind); |
builder.EndBody(); |
} |
@@ -2977,9 +2978,10 @@ void HGraphBuilder::BuildCopyProperties(HValue* from_properties, |
key = AddUncasted<HSub>(key, graph()->GetConstant1()); |
key->ClearFlag(HValue::kCanOverflow); |
- HValue* element = Add<HLoadKeyed>(from_properties, key, nullptr, kind); |
+ HValue* element = |
+ Add<HLoadKeyed>(from_properties, key, nullptr, nullptr, kind); |
- Add<HStoreKeyed>(to_properties, key, element, kind); |
+ Add<HStoreKeyed>(to_properties, key, element, nullptr, kind); |
builder.EndBody(); |
} |
@@ -3016,9 +3018,10 @@ void HGraphBuilder::BuildCopyElements(HValue* from_elements, |
// Unroll the loop for small elements kinds. |
for (int i = 0; i < constant_capacity; i++) { |
HValue* key_constant = Add<HConstant>(i); |
- HInstruction* value = Add<HLoadKeyed>(from_elements, key_constant, |
- nullptr, from_elements_kind); |
- Add<HStoreKeyed>(to_elements, key_constant, value, to_elements_kind); |
+ HInstruction* value = Add<HLoadKeyed>( |
+ from_elements, key_constant, nullptr, nullptr, from_elements_kind); |
+ Add<HStoreKeyed>(to_elements, key_constant, value, nullptr, |
+ to_elements_kind); |
} |
} else { |
if (!pre_fill_with_holes && |
@@ -3035,7 +3038,7 @@ void HGraphBuilder::BuildCopyElements(HValue* from_elements, |
key = AddUncasted<HSub>(key, graph()->GetConstant1()); |
key->ClearFlag(HValue::kCanOverflow); |
- HValue* element = Add<HLoadKeyed>(from_elements, key, nullptr, |
+ HValue* element = Add<HLoadKeyed>(from_elements, key, nullptr, nullptr, |
from_elements_kind, ALLOW_RETURN_HOLE); |
ElementsKind kind = (IsHoleyElementsKind(from_elements_kind) && |
@@ -3050,13 +3053,15 @@ void HGraphBuilder::BuildCopyElements(HValue* from_elements, |
HConstant* hole_constant = IsFastDoubleElementsKind(to_elements_kind) |
? Add<HConstant>(HConstant::kHoleNaN) |
: graph()->GetConstantHole(); |
- Add<HStoreKeyed>(to_elements, key, hole_constant, kind); |
+ Add<HStoreKeyed>(to_elements, key, hole_constant, nullptr, kind); |
if_hole.Else(); |
- HStoreKeyed* store = Add<HStoreKeyed>(to_elements, key, element, kind); |
+ HStoreKeyed* store = |
+ Add<HStoreKeyed>(to_elements, key, element, nullptr, kind); |
store->SetFlag(HValue::kAllowUndefinedAsNaN); |
if_hole.End(); |
} else { |
- HStoreKeyed* store = Add<HStoreKeyed>(to_elements, key, element, kind); |
+ HStoreKeyed* store = |
+ Add<HStoreKeyed>(to_elements, key, element, nullptr, kind); |
store->SetFlag(HValue::kAllowUndefinedAsNaN); |
} |
@@ -3336,7 +3341,8 @@ HInstruction* HGraphBuilder::BuildGetArrayFunction() { |
HInstruction* native_context = BuildGetNativeContext(); |
HInstruction* index = |
Add<HConstant>(static_cast<int32_t>(Context::ARRAY_FUNCTION_INDEX)); |
- return Add<HLoadKeyed>(native_context, index, nullptr, FAST_ELEMENTS); |
+ return Add<HLoadKeyed>(native_context, index, nullptr, nullptr, |
+ FAST_ELEMENTS); |
} |
@@ -3424,12 +3430,12 @@ HValue* HGraphBuilder::JSArrayBuilder::EmitMapCode() { |
HInstruction* index = builder()->Add<HConstant>( |
static_cast<int32_t>(Context::JS_ARRAY_MAPS_INDEX)); |
- HInstruction* map_array = |
- builder()->Add<HLoadKeyed>(native_context, index, nullptr, FAST_ELEMENTS); |
+ HInstruction* map_array = builder()->Add<HLoadKeyed>( |
+ native_context, index, nullptr, nullptr, FAST_ELEMENTS); |
HInstruction* kind_index = builder()->Add<HConstant>(kind_); |
- return builder()->Add<HLoadKeyed>(map_array, kind_index, nullptr, |
+ return builder()->Add<HLoadKeyed>(map_array, kind_index, nullptr, nullptr, |
FAST_ELEMENTS); |
} |
@@ -5379,7 +5385,7 @@ void HOptimizedGraphBuilder::BuildForInBody(ForInStatement* stmt, |
HValue* key = |
Add<HLoadKeyed>(environment()->ExpressionStackAt(2), // Enum cache. |
- index, index, FAST_ELEMENTS); |
+ index, index, nullptr, FAST_ELEMENTS); |
if (fast) { |
// Check if the expected map still matches that of the enumerable. |
@@ -6087,7 +6093,7 @@ void HOptimizedGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) { |
case FAST_HOLEY_ELEMENTS: |
case FAST_DOUBLE_ELEMENTS: |
case FAST_HOLEY_DOUBLE_ELEMENTS: { |
- HStoreKeyed* instr = Add<HStoreKeyed>(elements, key, value, |
+ HStoreKeyed* instr = Add<HStoreKeyed>(elements, key, value, nullptr, |
boilerplate_elements_kind); |
instr->SetUninitialized(uninitialized); |
break; |
@@ -8850,16 +8856,16 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall( |
elements_kind, length); |
} |
reduced_length = AddUncasted<HSub>(length, graph()->GetConstant1()); |
- result = AddElementAccess(elements, reduced_length, NULL, |
- bounds_check, elements_kind, LOAD); |
+ result = AddElementAccess(elements, reduced_length, nullptr, |
+ bounds_check, nullptr, elements_kind, LOAD); |
HValue* hole = IsFastSmiOrObjectElementsKind(elements_kind) |
? graph()->GetConstantHole() |
: Add<HConstant>(HConstant::kHoleNaN); |
if (IsFastSmiOrObjectElementsKind(elements_kind)) { |
elements_kind = FAST_HOLEY_ELEMENTS; |
} |
- AddElementAccess( |
- elements, reduced_length, hole, bounds_check, elements_kind, STORE); |
+ AddElementAccess(elements, reduced_length, hole, bounds_check, nullptr, |
+ elements_kind, STORE); |
Add<HStoreNamedField>( |
checked_object, HObjectAccess::ForArrayLength(elements_kind), |
reduced_length, STORE_TO_INITIALIZED_ENTRY); |
@@ -8984,8 +8990,8 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall( |
{ |
// Remember the result. |
if (!ast_context()->IsEffect()) { |
- Push(AddElementAccess(elements, graph()->GetConstant0(), NULL, |
- lengthiszero, kind, LOAD)); |
+ Push(AddElementAccess(elements, graph()->GetConstant0(), nullptr, |
+ lengthiszero, nullptr, kind, LOAD)); |
} |
// Compute the new length. |
@@ -9002,10 +9008,11 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall( |
key->ClearFlag(HValue::kCanOverflow); |
ElementsKind copy_kind = |
kind == FAST_HOLEY_SMI_ELEMENTS ? FAST_HOLEY_ELEMENTS : kind; |
- HValue* element = AddUncasted<HLoadKeyed>( |
- elements, key, lengthiszero, copy_kind, ALLOW_RETURN_HOLE); |
- HStoreKeyed* store = |
- Add<HStoreKeyed>(elements, new_key, element, copy_kind); |
+ HValue* element = |
+ AddUncasted<HLoadKeyed>(elements, key, lengthiszero, nullptr, |
+ copy_kind, ALLOW_RETURN_HOLE); |
+ HStoreKeyed* store = Add<HStoreKeyed>(elements, new_key, element, |
+ nullptr, copy_kind); |
store->SetFlag(HValue::kAllowUndefinedAsNaN); |
} |
loop.EndBody(); |
@@ -9015,8 +9022,8 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall( |
? graph()->GetConstantHole() |
: Add<HConstant>(HConstant::kHoleNaN); |
if (IsFastSmiOrObjectElementsKind(kind)) kind = FAST_HOLEY_ELEMENTS; |
- Add<HStoreKeyed>( |
- elements, new_length, hole, kind, INITIALIZING_STORE); |
+ Add<HStoreKeyed>(elements, new_length, hole, nullptr, kind, |
+ INITIALIZING_STORE); |
// Remember new length. |
Add<HStoreNamedField>( |
@@ -9478,8 +9485,8 @@ HValue* HOptimizedGraphBuilder::BuildArrayIndexOf(HValue* receiver, |
LoopBuilder loop(this, context(), direction); |
{ |
HValue* index = loop.BeginBody(initial, terminating, token); |
- HValue* element = AddUncasted<HLoadKeyed>(elements, index, nullptr, kind, |
- ALLOW_RETURN_HOLE); |
+ HValue* element = AddUncasted<HLoadKeyed>( |
+ elements, index, nullptr, nullptr, kind, ALLOW_RETURN_HOLE); |
IfBuilder if_issame(this); |
if_issame.If<HCompareNumericAndBranch>(element, search_element, |
Token::EQ_STRICT); |
@@ -9500,8 +9507,8 @@ HValue* HOptimizedGraphBuilder::BuildArrayIndexOf(HValue* receiver, |
LoopBuilder loop(this, context(), direction); |
{ |
HValue* index = loop.BeginBody(initial, terminating, token); |
- HValue* element = AddUncasted<HLoadKeyed>(elements, index, nullptr, |
- kind, ALLOW_RETURN_HOLE); |
+ HValue* element = AddUncasted<HLoadKeyed>( |
+ elements, index, nullptr, nullptr, kind, ALLOW_RETURN_HOLE); |
IfBuilder if_issame(this); |
if_issame.If<HIsStringAndBranch>(element); |
if_issame.AndIf<HStringCompareAndBranch>( |
@@ -9530,8 +9537,8 @@ HValue* HOptimizedGraphBuilder::BuildArrayIndexOf(HValue* receiver, |
LoopBuilder loop(this, context(), direction); |
{ |
HValue* index = loop.BeginBody(initial, terminating, token); |
- HValue* element = AddUncasted<HLoadKeyed>(elements, index, nullptr, |
- kind, ALLOW_RETURN_HOLE); |
+ HValue* element = AddUncasted<HLoadKeyed>( |
+ elements, index, nullptr, nullptr, kind, ALLOW_RETURN_HOLE); |
IfBuilder if_element_isnumber(this); |
if_element_isnumber.If<HIsSmiAndBranch>(element); |
@@ -9562,8 +9569,8 @@ HValue* HOptimizedGraphBuilder::BuildArrayIndexOf(HValue* receiver, |
LoopBuilder loop(this, context(), direction); |
{ |
HValue* index = loop.BeginBody(initial, terminating, token); |
- HValue* element = AddUncasted<HLoadKeyed>(elements, index, nullptr, |
- kind, ALLOW_RETURN_HOLE); |
+ HValue* element = AddUncasted<HLoadKeyed>( |
+ elements, index, nullptr, nullptr, kind, ALLOW_RETURN_HOLE); |
IfBuilder if_issame(this); |
if_issame.If<HCompareObjectEqAndBranch>( |
element, search_element); |
@@ -10219,7 +10226,7 @@ HValue* HOptimizedGraphBuilder::BuildAllocateFixedTypedArray( |
HValue* key = builder.BeginBody( |
Add<HConstant>(static_cast<int32_t>(0)), |
length, Token::LT); |
- Add<HStoreKeyed>(backing_store, key, filler, fixed_elements_kind); |
+ Add<HStoreKeyed>(backing_store, key, filler, elements, fixed_elements_kind); |
builder.EndBody(); |
} |
@@ -11962,10 +11969,11 @@ void HOptimizedGraphBuilder::BuildEmitFixedDoubleArray( |
int elements_length = elements->length(); |
for (int i = 0; i < elements_length; i++) { |
HValue* key_constant = Add<HConstant>(i); |
- HInstruction* value_instruction = Add<HLoadKeyed>( |
- boilerplate_elements, key_constant, nullptr, kind, ALLOW_RETURN_HOLE); |
+ HInstruction* value_instruction = |
+ Add<HLoadKeyed>(boilerplate_elements, key_constant, nullptr, nullptr, |
+ kind, ALLOW_RETURN_HOLE); |
HInstruction* store = Add<HStoreKeyed>(object_elements, key_constant, |
- value_instruction, kind); |
+ value_instruction, nullptr, kind); |
store->SetFlag(HValue::kAllowUndefinedAsNaN); |
} |
} |
@@ -11988,15 +11996,15 @@ void HOptimizedGraphBuilder::BuildEmitFixedArray( |
HInstruction* result = |
BuildFastLiteral(value_object, site_context); |
site_context->ExitScope(current_site, value_object); |
- Add<HStoreKeyed>(object_elements, key_constant, result, kind); |
+ Add<HStoreKeyed>(object_elements, key_constant, result, nullptr, kind); |
} else { |
ElementsKind copy_kind = |
kind == FAST_HOLEY_SMI_ELEMENTS ? FAST_HOLEY_ELEMENTS : kind; |
HInstruction* value_instruction = |
- Add<HLoadKeyed>(boilerplate_elements, key_constant, nullptr, |
+ Add<HLoadKeyed>(boilerplate_elements, key_constant, nullptr, nullptr, |
copy_kind, ALLOW_RETURN_HOLE); |
Add<HStoreKeyed>(object_elements, key_constant, value_instruction, |
- copy_kind); |
+ nullptr, copy_kind); |
} |
} |
} |
@@ -12769,7 +12777,7 @@ void HOptimizedGraphBuilder::GenerateFixedArrayGet(CallRuntime* call) { |
HValue* index = Pop(); |
HValue* object = Pop(); |
HInstruction* result = New<HLoadKeyed>( |
- object, index, nullptr, FAST_HOLEY_ELEMENTS, ALLOW_RETURN_HOLE); |
+ object, index, nullptr, nullptr, FAST_HOLEY_ELEMENTS, ALLOW_RETURN_HOLE); |
return ast_context()->ReturnInstruction(result, call->id()); |
} |
@@ -12783,7 +12791,7 @@ void HOptimizedGraphBuilder::GenerateFixedArraySet(CallRuntime* call) { |
HValue* index = Pop(); |
HValue* object = Pop(); |
NoObservableSideEffectsScope no_effects(this); |
- Add<HStoreKeyed>(object, index, value, FAST_HOLEY_ELEMENTS); |
+ Add<HStoreKeyed>(object, index, value, nullptr, FAST_HOLEY_ELEMENTS); |
return ast_context()->ReturnValue(graph()->GetConstantUndefined()); |
} |