| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index 4018bcb7a6aedf2feb649ff2cc47943715f53ef2..543c1b4193d875bc783b29643eaea29de6c09a0a 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -790,7 +790,7 @@ class HValue: public ZoneObject {
|
| kCanOverflow,
|
| kBailoutOnMinusZero,
|
| kCanBeDivByZero,
|
| - kDeoptimizeOnUndefined,
|
| + kAllowUndefinedAsNaN,
|
| kIsArguments,
|
| kTruncatingToInt32,
|
| // Set after an instruction is killed.
|
| @@ -1712,14 +1712,14 @@ class HChange: public HUnaryOperation {
|
| HChange(HValue* value,
|
| Representation to,
|
| bool is_truncating,
|
| - bool deoptimize_on_undefined)
|
| + bool allow_undefined_as_nan)
|
| : HUnaryOperation(value) {
|
| ASSERT(!value->representation().IsNone());
|
| ASSERT(!to.IsNone());
|
| ASSERT(!value->representation().Equals(to));
|
| set_representation(to);
|
| SetFlag(kUseGVN);
|
| - if (deoptimize_on_undefined) SetFlag(kDeoptimizeOnUndefined);
|
| + if (allow_undefined_as_nan) SetFlag(kAllowUndefinedAsNaN);
|
| if (is_truncating) SetFlag(kTruncatingToInt32);
|
| if (value->representation().IsSmi() || value->type().IsSmi()) {
|
| set_type(HType::Smi());
|
| @@ -1735,8 +1735,8 @@ class HChange: public HUnaryOperation {
|
|
|
| Representation from() const { return value()->representation(); }
|
| Representation to() const { return representation(); }
|
| - bool deoptimize_on_undefined() const {
|
| - return CheckFlag(kDeoptimizeOnUndefined);
|
| + bool allow_undefined_as_nan() const {
|
| + return CheckFlag(kAllowUndefinedAsNaN);
|
| }
|
| bool deoptimize_on_minus_zero() const {
|
| return CheckFlag(kBailoutOnMinusZero);
|
| @@ -1766,6 +1766,7 @@ class HClampToUint8: public HUnaryOperation {
|
| explicit HClampToUint8(HValue* value)
|
| : HUnaryOperation(value) {
|
| set_representation(Representation::Integer32());
|
| + SetFlag(kAllowUndefinedAsNaN);
|
| SetFlag(kUseGVN);
|
| }
|
|
|
| @@ -2492,6 +2493,7 @@ class HBitNot: public HUnaryOperation {
|
| set_representation(Representation::Integer32());
|
| SetFlag(kUseGVN);
|
| SetFlag(kTruncatingToInt32);
|
| + SetFlag(kAllowUndefinedAsNaN);
|
| }
|
|
|
| virtual Representation RequiredInputRepresentation(int index) {
|
| @@ -2601,6 +2603,7 @@ class HUnaryMathOperation: public HTemplateInstruction<2> {
|
| UNREACHABLE();
|
| }
|
| SetFlag(kUseGVN);
|
| + SetFlag(kAllowUndefinedAsNaN);
|
| }
|
|
|
| virtual bool IsDeletable() const { return true; }
|
| @@ -2942,6 +2945,7 @@ class HPhi: public HValue {
|
| }
|
| ASSERT(merged_index >= 0);
|
| SetFlag(kFlexibleRepresentation);
|
| + SetFlag(kAllowUndefinedAsNaN);
|
| }
|
|
|
| virtual Representation RepresentationFromInputs();
|
| @@ -3665,6 +3669,7 @@ class HBitwiseBinaryOperation: public HBinaryOperation {
|
| : HBinaryOperation(context, left, right) {
|
| SetFlag(kFlexibleRepresentation);
|
| SetFlag(kTruncatingToInt32);
|
| + SetFlag(kAllowUndefinedAsNaN);
|
| SetAllSideEffects();
|
| }
|
|
|
| @@ -3719,6 +3724,7 @@ class HMathFloorOfDiv: public HBinaryOperation {
|
| if (!right->IsConstant()) {
|
| SetFlag(kCanBeDivByZero);
|
| }
|
| + SetFlag(kAllowUndefinedAsNaN);
|
| }
|
|
|
| virtual HValue* EnsureAndPropagateNotMinusZero(BitVector* visited);
|
| @@ -3743,6 +3749,7 @@ class HArithmeticBinaryOperation: public HBinaryOperation {
|
| : HBinaryOperation(context, left, right) {
|
| SetAllSideEffects();
|
| SetFlag(kFlexibleRepresentation);
|
| + SetFlag(kAllowUndefinedAsNaN);
|
| }
|
|
|
| virtual void RepresentationChanged(Representation to) {
|
| @@ -5728,12 +5735,11 @@ class HStoreKeyed
|
| }
|
| if (is_external()) {
|
| SetGVNFlag(kChangesSpecializedArrayElements);
|
| + SetFlag(kAllowUndefinedAsNaN);
|
| } else if (IsFastDoubleElementsKind(elements_kind)) {
|
| SetGVNFlag(kChangesDoubleArrayElements);
|
| - SetFlag(kDeoptimizeOnUndefined);
|
| } else if (IsFastSmiElementsKind(elements_kind)) {
|
| SetGVNFlag(kChangesArrayElements);
|
| - SetFlag(kDeoptimizeOnUndefined);
|
| } else {
|
| SetGVNFlag(kChangesArrayElements);
|
| }
|
|
|