| Index: src/hydrogen-instructions.cc
|
| diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc
|
| index 8f8c59ea8c0f713a476a3e9061a2fd56debb29fc..a7ef23ce9bca170138a8418e3ab9fafa39bc4c37 100644
|
| --- a/src/hydrogen-instructions.cc
|
| +++ b/src/hydrogen-instructions.cc
|
| @@ -2681,7 +2681,12 @@ bool HLoadKeyed::UsesMustHandleHole() const {
|
| return false;
|
| }
|
|
|
| - if (hole_mode() == ALLOW_RETURN_HOLE) return true;
|
| + if (hole_mode() == ALLOW_RETURN_HOLE) {
|
| + if (IsFastDoubleElementsKind(elements_kind())) {
|
| + return AllUsesCanTreatHoleAsNaN();
|
| + }
|
| + return true;
|
| + }
|
|
|
| if (IsFastDoubleElementsKind(elements_kind())) {
|
| return false;
|
| @@ -2698,6 +2703,22 @@ bool HLoadKeyed::UsesMustHandleHole() const {
|
| }
|
|
|
|
|
| +bool HLoadKeyed::AllUsesCanTreatHoleAsNaN() const {
|
| + if (!IsFastDoubleElementsKind(elements_kind())) {
|
| + return false;
|
| + }
|
| +
|
| + for (HUseIterator it(uses()); !it.Done(); it.Advance()) {
|
| + HValue* use = it.value();
|
| + if (use->CheckFlag(HValue::kDeoptimizeOnUndefined)) {
|
| + return false;
|
| + }
|
| + }
|
| +
|
| + return true;
|
| +}
|
| +
|
| +
|
| bool HLoadKeyed::RequiresHoleCheck() const {
|
| if (IsFastPackedElementsKind(elements_kind())) {
|
| return false;
|
|
|