Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index fc2a20037b8e956fbcb25cfbd190b80843f99535..ff97d9468a89fdb545b1a6a4e63ef28410eb1c57 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -2972,33 +2972,21 @@ class HCheckPrototypeMaps: public HTemplateInstruction<0> { |
public: |
HCheckPrototypeMaps(Handle<JSObject> prototype, |
Handle<JSObject> holder, |
- Zone* zone, |
- CompilationInfo* info) |
+ Zone* zone) |
: prototypes_(2, zone), |
maps_(2, zone), |
first_prototype_unique_id_(), |
- last_prototype_unique_id_(), |
- can_omit_prototype_maps_(true) { |
+ last_prototype_unique_id_() { |
SetFlag(kUseGVN); |
SetGVNFlag(kDependsOnMaps); |
// Keep a list of all objects on the prototype chain up to the holder |
// and the expected maps. |
while (true) { |
prototypes_.Add(prototype, zone); |
- Handle<Map> map(prototype->map()); |
- maps_.Add(map, zone); |
- can_omit_prototype_maps_ &= map->CanOmitPrototypeChecks(); |
+ maps_.Add(Handle<Map>(prototype->map()), zone); |
if (prototype.is_identical_to(holder)) break; |
prototype = Handle<JSObject>(JSObject::cast(prototype->GetPrototype())); |
} |
- if (can_omit_prototype_maps_) { |
- // Mark in-flight compilation as dependent on those maps. |
- for (int i = 0; i < maps()->length(); i++) { |
- Handle<Map> map = maps()->at(i); |
- map->AddDependentCompilationInfo(DependentCode::kPrototypeCheckGroup, |
- info); |
- } |
- } |
} |
ZoneList<Handle<JSObject> >* prototypes() { return &prototypes_; } |
@@ -3023,7 +3011,12 @@ class HCheckPrototypeMaps: public HTemplateInstruction<0> { |
last_prototype_unique_id_ = UniqueValueId(prototypes_.last()); |
} |
- bool CanOmitPrototypeChecks() { return can_omit_prototype_maps_; } |
+ bool CanOmitPrototypeChecks() { |
+ for (int i = 0; i < maps()->length(); i++) { |
+ if (!maps()->at(i)->CanOmitPrototypeChecks()) return false; |
+ } |
+ return true; |
+ } |
protected: |
virtual bool DataEquals(HValue* other) { |
@@ -3037,7 +3030,6 @@ class HCheckPrototypeMaps: public HTemplateInstruction<0> { |
ZoneList<Handle<Map> > maps_; |
UniqueValueId first_prototype_unique_id_; |
UniqueValueId last_prototype_unique_id_; |
- bool can_omit_prototype_maps_; |
}; |
@@ -5695,7 +5687,6 @@ class HStoreNamedField: public HTemplateInstruction<2> { |
= Representation::Tagged()) |
: access_(access), |
field_representation_(field_representation), |
- transition_(), |
transition_unique_id_(), |
new_space_dominator_(NULL) { |
SetOperandAt(0, obj); |
@@ -5727,13 +5718,7 @@ class HStoreNamedField: public HTemplateInstruction<2> { |
HObjectAccess access() const { return access_; } |
Handle<Map> transition() const { return transition_; } |
UniqueValueId transition_unique_id() const { return transition_unique_id_; } |
- void SetTransition(Handle<Map> map, CompilationInfo* info) { |
- ASSERT(transition_.is_null()); // Only set once. |
- if (map->CanBeDeprecated()) { |
- map->AddDependentCompilationInfo(DependentCode::kTransitionGroup, info); |
- } |
- transition_ = map; |
- } |
+ void set_transition(Handle<Map> map) { transition_ = map; } |
HValue* new_space_dominator() const { return new_space_dominator_; } |
bool NeedsWriteBarrier() { |