Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index 85d1e7549fa38aa6a051ab0f0feaa970878674ec..b6620a0e0b3922d34745c2d15c58a4f23c0290d4 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -3545,6 +3545,10 @@ class HConstant V8_FINAL : public HTemplateInstruction<0> { |
return instance_type_ == CELL_TYPE || instance_type_ == PROPERTY_CELL_TYPE; |
} |
+ bool IsMap() const { |
+ return instance_type_ == MAP_TYPE; |
+ } |
+ |
virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
return Representation::None(); |
} |
@@ -5708,6 +5712,13 @@ inline bool ReceiverObjectNeedsWriteBarrier(HValue* object, |
if (HAllocate::cast(object)->IsNewSpaceAllocation()) { |
return false; |
} |
+ // Storing a map or an immortal immovable object requires no write barriers |
+ // if the object is the new space dominator. |
+ if (value->IsConstant() && |
+ (HConstant::cast(value)->IsMap() || |
+ HConstant::cast(value)->ImmortalImmovable())) { |
+ return false; |
+ } |
// Likewise we don't need a write barrier if we store a value that |
// originates from the same allocation (via allocation folding). |
while (value->IsInnerAllocatedObject()) { |