| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 1d068a4e531d0230c6436b90f3a3b7593b3a9b35..41854088d31283f6bfa367e8a9eaa2b49b2c54de 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -2078,9 +2078,7 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess(
|
| bool is_store,
|
| LoadKeyedHoleMode load_mode,
|
| KeyedAccessStoreMode store_mode) {
|
| - ASSERT((!IsExternalArrayElementsKind(elements_kind) &&
|
| - !IsFixedTypedArrayElementsKind(elements_kind)) ||
|
| - !is_js_array);
|
| + ASSERT(!IsExternalArrayElementsKind(elements_kind) || !is_js_array);
|
| // No GVNFlag is necessary for ElementsKind if there is an explicit dependency
|
| // on a HElementsTransition instruction. The flag can also be removed if the
|
| // map to check has FAST_HOLEY_ELEMENTS, since there can be no further
|
| @@ -2110,17 +2108,11 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess(
|
| }
|
| length->set_type(HType::Smi());
|
| HValue* checked_key = NULL;
|
| - if (IsExternalArrayElementsKind(elements_kind) ||
|
| - IsFixedTypedArrayElementsKind(elements_kind)) {
|
| - HValue* backing_store;
|
| - if (IsExternalArrayElementsKind(elements_kind)) {
|
| - backing_store =
|
| - Add<HLoadExternalArrayPointer>(elements);
|
| - } else {
|
| - backing_store = elements;
|
| - }
|
| + if (IsExternalArrayElementsKind(elements_kind)) {
|
| if (store_mode == STORE_NO_TRANSITION_IGNORE_OUT_OF_BOUNDS) {
|
| NoObservableSideEffectsScope no_effects(this);
|
| + HLoadExternalArrayPointer* external_elements =
|
| + Add<HLoadExternalArrayPointer>(elements);
|
| IfBuilder length_checker(this);
|
| length_checker.If<HCompareNumericAndBranch>(key, length, Token::LT);
|
| length_checker.Then();
|
| @@ -2129,7 +2121,7 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess(
|
| key, graph()->GetConstant0(), Token::GTE);
|
| negative_checker.Then();
|
| HInstruction* result = AddElementAccess(
|
| - backing_store, key, val, bounds_check, elements_kind, is_store);
|
| + external_elements, key, val, bounds_check, elements_kind, is_store);
|
| negative_checker.ElseDeopt("Negative key encountered");
|
| negative_checker.End();
|
| length_checker.End();
|
| @@ -2137,8 +2129,10 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess(
|
| } else {
|
| ASSERT(store_mode == STANDARD_STORE);
|
| checked_key = Add<HBoundsCheck>(key, length);
|
| + HLoadExternalArrayPointer* external_elements =
|
| + Add<HLoadExternalArrayPointer>(elements);
|
| return AddElementAccess(
|
| - backing_store, checked_key, val,
|
| + external_elements, checked_key, val,
|
| checked_object, elements_kind, is_store);
|
| }
|
| }
|
| @@ -2319,8 +2313,7 @@ HInstruction* HGraphBuilder::AddElementAccess(
|
| LoadKeyedHoleMode load_mode) {
|
| if (is_store) {
|
| ASSERT(val != NULL);
|
| - if (elements_kind == EXTERNAL_PIXEL_ELEMENTS ||
|
| - elements_kind == UINT8_CLAMPED_ELEMENTS) {
|
| + if (elements_kind == EXTERNAL_PIXEL_ELEMENTS) {
|
| val = Add<HClampToUint8>(val);
|
| }
|
| return Add<HStoreKeyed>(elements, checked_key, val, elements_kind,
|
| @@ -2334,8 +2327,7 @@ HInstruction* HGraphBuilder::AddElementAccess(
|
| HLoadKeyed* load = Add<HLoadKeyed>(
|
| elements, checked_key, dependency, elements_kind, load_mode);
|
| if (FLAG_opt_safe_uint32_operations &&
|
| - (elements_kind == EXTERNAL_UNSIGNED_INT_ELEMENTS ||
|
| - elements_kind == UINT32_ELEMENTS)) {
|
| + elements_kind == EXTERNAL_UNSIGNED_INT_ELEMENTS) {
|
| graph()->RecordUint32Instruction(load);
|
| }
|
| return load;
|
|
|