Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index a6e974e49fa9b238a801d23bf5106ffd43cf4dec..9653eac8e6794459eae546c81865070d3d862ff1 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -5715,6 +5715,20 @@ inline bool ReceiverObjectNeedsWriteBarrier(HValue* object, |
} |
+inline PointersToHereCheck PointersToHereCheckForObject(HValue* object, |
+ HValue* dominator) { |
+ while (object->IsInnerAllocatedObject()) { |
+ object = HInnerAllocatedObject::cast(object)->base_object(); |
+ } |
+ if (object == dominator && |
+ object->IsAllocate() && |
+ HAllocate::cast(object)->IsNewSpaceAllocation()) { |
+ return kPointersToHereAreAlwaysInteresting; |
+ } |
+ return kPointersToHereMaybeInteresting; |
+} |
+ |
+ |
class HStoreGlobalCell V8_FINAL : public HUnaryOperation { |
public: |
DECLARE_INSTRUCTION_FACTORY_P3(HStoreGlobalCell, HValue*, |
@@ -6732,6 +6746,10 @@ class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> { |
return INLINE_SMI_CHECK; |
} |
+ PointersToHereCheck PointersToHereCheckForValue() const { |
+ return PointersToHereCheckForObject(value(), dominator()); |
+ } |
+ |
Representation field_representation() const { |
return access_.representation(); |
} |
@@ -6890,9 +6908,9 @@ class HStoreKeyed V8_FINAL |
return Representation::None(); |
} |
- HValue* elements() { return OperandAt(0); } |
- HValue* key() { return OperandAt(1); } |
- HValue* value() { return OperandAt(2); } |
+ HValue* elements() const { return OperandAt(0); } |
+ HValue* key() const { return OperandAt(1); } |
+ HValue* value() const { return OperandAt(2); } |
bool value_is_smi() const { |
return IsFastSmiElementsKind(elements_kind_); |
} |
@@ -6936,6 +6954,10 @@ class HStoreKeyed V8_FINAL |
} |
} |
+ PointersToHereCheck PointersToHereCheckForValue() const { |
+ return PointersToHereCheckForObject(value(), dominator()); |
+ } |
+ |
bool NeedsCanonicalization(); |
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |