Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index 26501d07fbcde78e5afdbd83bff24dec6fa975b8..4a2bf1007bd6f06c2fa73811799610432e8070fb 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -6144,6 +6144,8 @@ class HLoadNamedField V8_FINAL : public HTemplateInstruction<2> { |
public: |
DECLARE_INSTRUCTION_FACTORY_P3(HLoadNamedField, HValue*, HValue*, |
HObjectAccess); |
+ DECLARE_INSTRUCTION_FACTORY_P4(HLoadNamedField, HValue*, HValue*, |
+ HObjectAccess, Handle<Map>); |
HValue* object() { return OperandAt(0); } |
HValue* dependency() { |
@@ -6156,6 +6158,8 @@ class HLoadNamedField V8_FINAL : public HTemplateInstruction<2> { |
return access_.representation(); |
} |
+ Unique<Map> map() const { return map_; } |
+ |
virtual bool HasEscapingOperandAt(int index) V8_OVERRIDE { return false; } |
virtual bool HasOutOfBoundsAccess(int size) V8_OVERRIDE { |
return !access().IsInobject() || access().offset() >= size; |
@@ -6175,13 +6179,15 @@ class HLoadNamedField V8_FINAL : public HTemplateInstruction<2> { |
protected: |
virtual bool DataEquals(HValue* other) V8_OVERRIDE { |
HLoadNamedField* b = HLoadNamedField::cast(other); |
- return access_.Equals(b->access_); |
+ return access_.Equals(b->access_) && map_ == b->map_; |
} |
private: |
HLoadNamedField(HValue* object, |
HValue* dependency, |
- HObjectAccess access) : access_(access) { |
+ HObjectAccess access, |
+ Handle<Map> map = Handle<Map>::null()) |
+ : access_(access), map_(map) { |
ASSERT(object != NULL); |
SetOperandAt(0, object); |
SetOperandAt(1, dependency != NULL ? dependency : object); |
@@ -6215,6 +6221,7 @@ class HLoadNamedField V8_FINAL : public HTemplateInstruction<2> { |
virtual bool IsDeletable() const V8_OVERRIDE { return true; } |
HObjectAccess access_; |
+ Unique<Map> map_; |
}; |