| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index c77c2ebf0e495a134172b2da370b19eebfdfb6cc..ffa3c5ab7e39f4cb6e98a3ba8278bf819933b73b 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -4755,8 +4755,9 @@ class HAdd V8_FINAL : public HArithmeticBinaryOperation {
|
|
|
| // Add is only commutative if two integer values are added and not if two
|
| // tagged values are added (because it might be a String concatenation).
|
| + // We also do not commute (pointer + offset).
|
| virtual bool IsCommutative() const V8_OVERRIDE {
|
| - return !representation().IsTagged();
|
| + return !representation().IsTagged() && !representation().IsExternal();
|
| }
|
|
|
| virtual HValue* EnsureAndPropagateNotMinusZero(
|
| @@ -4792,6 +4793,10 @@ class HAdd V8_FINAL : public HArithmeticBinaryOperation {
|
| }
|
| }
|
|
|
| + virtual Representation RepresentationFromInputs() V8_OVERRIDE;
|
| +
|
| + virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE;
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(Add)
|
|
|
| protected:
|
| @@ -6509,6 +6514,8 @@ class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> {
|
| } else if (field_representation().IsDouble() ||
|
| field_representation().IsSmi()) {
|
| return field_representation();
|
| + } else if (field_representation().IsExternal()) {
|
| + return Representation::External();
|
| }
|
| }
|
| return Representation::Tagged();
|
|
|