| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index 6b92d5baa987abc7c47c76c88a6e2b88a14f24d6..a0570e766879c4a2eb86021f8eca0a96accc685f 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -4624,10 +4624,17 @@ class HAdd V8_FINAL : public HArithmeticBinaryOperation {
|
| HValue* left,
|
| HValue* right);
|
|
|
| + static HAdd* NewExternalPointerOffset(
|
| + Zone* zone,
|
| + HValue* context,
|
| + HValue* base_pointer,
|
| + HValue* offset);
|
| +
|
| // 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(
|
| @@ -4663,6 +4670,10 @@ class HAdd V8_FINAL : public HArithmeticBinaryOperation {
|
| }
|
| }
|
|
|
| + virtual Representation RepresentationFromInputs() V8_OVERRIDE;
|
| +
|
| + virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE;
|
| +
|
| DECLARE_CONCRETE_INSTRUCTION(Add)
|
|
|
| protected:
|
| @@ -6380,6 +6391,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();
|
|
|