| 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() {
|
|
|