Chromium Code Reviews| Index: src/hydrogen-instructions.cc |
| diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc |
| index 9b96cfe7ca6a1dcd19ef7394a001c60e6863b84c..c3d5b9dc01c57316b5447d931550732cc75fd42e 100644 |
| --- a/src/hydrogen-instructions.cc |
| +++ b/src/hydrogen-instructions.cc |
| @@ -2590,6 +2590,10 @@ bool HLoadKeyed::UsesMustHandleHole() const { |
| return false; |
| } |
| + if (IsExternalArrayElementsKind(elements_kind())) { |
| + return false; |
| + } |
| + |
| if (hole_mode() == ALLOW_RETURN_HOLE) return true; |
| if (IsFastDoubleElementsKind(elements_kind())) { |
| @@ -3037,10 +3041,18 @@ bool HStoreKeyed::NeedsCanonicalization() { |
| // If value is an integer or smi or comes from the result of a keyed load or |
| // constant then it is either be a non-hole value or in the case of a constant |
| // the hole is only being stored explicitly: no need for canonicalization. |
| - if (value()->IsLoadKeyed() || value()->IsConstant()) { |
| + // |
| + // The exception to that is keyed loads from external float or double arrays: |
| + // these can load arbitrary representation of NaN |
|
Jakob Kummerow
2013/03/28 10:17:38
nit: full stop at the end of the line, please.
|
| + |
| + if (value()->IsConstant()) { |
| return false; |
| } |
| + if (value()->IsLoadKeyed()) { |
| + return HLoadKeyed::cast(value())->can_load_hole_nan(); |
|
danno
2013/03/28 08:49:39
I am not sure you need a separate predicate for th
Dmitry Lomov (no reviews)
2013/03/28 10:01:27
I strongly disagree. We have enough hidden depende
danno
2013/03/28 10:07:16
Well, the name you have chose isn't correct, and i
Dmitry Lomov (no reviews)
2013/03/28 12:19:40
Alright so we have had a little offline discussion
|
| + } |
| + |
| if (value()->IsChange()) { |
| if (HChange::cast(value())->from().IsInteger32()) { |
| return false; |