| Index: src/hydrogen-instructions.cc
|
| diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc
|
| index f38fb7d5e3d4312383c198cf23b25a7cf2f8f602..6b5d90f62a562b5db5f1a07ef34b4e83dbc395c2 100644
|
| --- a/src/hydrogen-instructions.cc
|
| +++ b/src/hydrogen-instructions.cc
|
| @@ -2682,7 +2682,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;
|
| @@ -2699,6 +2704,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;
|
|
|