Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index adc4aa4d5f8fd235cd86098e620c21d4ddb9787f..937f5b086b41029a1e4c70130ae3953cca3d1fe8 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -2425,6 +2425,8 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess( |
HValue* checked_key = NULL; |
if (IsExternalArrayElementsKind(elements_kind) || |
IsFixedTypedArrayElementsKind(elements_kind)) { |
+ checked_object = Add<HCheckArrayBufferNotNeutered>(checked_object); |
+ |
HValue* backing_store; |
if (IsExternalArrayElementsKind(elements_kind)) { |
backing_store = Add<HLoadNamedField>( |
@@ -2434,23 +2436,6 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess( |
} |
if (store_mode == STORE_NO_TRANSITION_IGNORE_OUT_OF_BOUNDS) { |
NoObservableSideEffectsScope no_effects(this); |
- if (IsExternalArrayElementsKind(elements_kind)) { |
- HInstruction* buffer = |
- Add<HLoadNamedField>(checked_object, nullptr, |
- HObjectAccess::ForJSArrayBufferViewBuffer()); |
- HInstruction* flags = Add<HLoadNamedField>( |
- buffer, nullptr, HObjectAccess::ForJSArrayBufferBitField()); |
- HValue* was_neutered_mask = |
- Add<HConstant>(1 << JSArrayBuffer::WasNeutered::kShift); |
- HValue* was_neutered_test = |
- AddUncasted<HBitwise>(Token::BIT_AND, flags, was_neutered_mask); |
- |
- IfBuilder if_was_neutered(this); |
- if_was_neutered.If<HCompareNumericAndBranch>( |
- was_neutered_test, graph()->GetConstant0(), Token::NE); |
- if_was_neutered.ThenDeopt(Deoptimizer::kOutOfBounds); |
- if_was_neutered.End(); |
- } |
IfBuilder length_checker(this); |
length_checker.If<HCompareNumericAndBranch>(key, length, Token::LT); |
length_checker.Then(); |
@@ -2465,14 +2450,6 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess( |
length_checker.End(); |
return result; |
} else { |
- if (IsExternalArrayElementsKind(elements_kind)) { |
- HInstruction* buffer = |
- Add<HLoadNamedField>(checked_object, nullptr, |
- HObjectAccess::ForJSArrayBufferViewBuffer()); |
- HInstruction* buffer_length = Add<HLoadNamedField>( |
- buffer, nullptr, HObjectAccess::ForJSArrayBufferByteLength()); |
- Add<HBoundsCheck>(graph()->GetConstant0(), buffer_length); |
- } |
DCHECK(store_mode == STANDARD_STORE); |
checked_key = Add<HBoundsCheck>(key, length); |
return AddElementAccess( |
@@ -6340,8 +6317,8 @@ HValue* HOptimizedGraphBuilder::BuildMonomorphicAccess( |
if (info->GetJSArrayBufferViewFieldAccess(&access)) { |
DCHECK(info->IsLoad()); |
- return BuildArrayBufferViewFieldAccessor( |
- object, checked_object, FieldIndex::ForInObjectOffset(access.offset())); |
+ checked_object = Add<HCheckArrayBufferNotNeutered>(checked_object); |
+ return New<HLoadNamedField>(object, checked_object, access); |
} |
if (info->name().is_identical_to(isolate()->factory()->prototype_string()) && |