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(); |