Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index c77c2ebf0e495a134172b2da370b19eebfdfb6cc..f6e95e8895e4b8cb5932435e335a0c006223bc61 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -4748,15 +4748,17 @@ class HRandom V8_FINAL : public HTemplateInstruction<1> { |
class HAdd V8_FINAL : public HArithmeticBinaryOperation { |
public: |
- static HInstruction* New(Zone* zone, |
- HValue* context, |
- HValue* left, |
- HValue* right); |
+ static HInstruction* New( |
danno
2013/11/20 13:50:50
nit: remove this whitespace change.
Dmitry Lomov (no reviews)
2013/11/20 17:38:56
Done.
|
+ Zone* zone, |
+ HValue* context, |
+ HValue* left, |
+ HValue* right); |
// 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 +4794,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 +6515,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(); |