| Index: src/hydrogen-instructions.cc
|
| diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc
|
| index 469caf6c46763ebe09b4d910f6dc98a17e31a59a..8fab2bf53e9542c4ef93972990cf0a633440dc84 100644
|
| --- a/src/hydrogen-instructions.cc
|
| +++ b/src/hydrogen-instructions.cc
|
| @@ -3618,8 +3618,7 @@ void HAllocate::CreateFreeSpaceFiller(int32_t free_space_size) {
|
| filler_map->FinalizeUniqueness(); // TODO(titzer): should be init'd a'ready
|
| filler_map->InsertAfter(free_space_instr);
|
| HInstruction* store_map = HStoreNamedField::New(zone, context(),
|
| - free_space_instr, HObjectAccess::ForMap(), filler_map,
|
| - INITIALIZING_STORE);
|
| + free_space_instr, HObjectAccess::ForMap(), filler_map);
|
| store_map->SetFlag(HValue::kHasNoObservableSideEffects);
|
| store_map->InsertAfter(filler_map);
|
|
|
| @@ -3630,10 +3629,11 @@ void HAllocate::CreateFreeSpaceFiller(int32_t free_space_size) {
|
| zone, context(), free_space_size, Representation::Smi(), store_map);
|
| // Must force Smi representation for x64 (see comment above).
|
| HObjectAccess access =
|
| - HObjectAccess::ForJSObjectOffset(FreeSpace::kSizeOffset,
|
| - Representation::Smi());
|
| + HObjectAccess::ForMapAndOffset(isolate()->factory()->free_space_map(),
|
| + FreeSpace::kSizeOffset,
|
| + Representation::Smi());
|
| HStoreNamedField* store_size = HStoreNamedField::New(zone, context(),
|
| - free_space_instr, access, filler_size, INITIALIZING_STORE);
|
| + free_space_instr, access, filler_size);
|
| store_size->SetFlag(HValue::kHasNoObservableSideEffects);
|
| store_size->InsertAfter(filler_size);
|
| filler_free_space_size_ = store_size;
|
| @@ -3643,10 +3643,11 @@ void HAllocate::CreateFreeSpaceFiller(int32_t free_space_size) {
|
| void HAllocate::ClearNextMapWord(int offset) {
|
| if (MustClearNextMapWord()) {
|
| Zone* zone = block()->zone();
|
| - HObjectAccess access = HObjectAccess::ForJSObjectOffset(offset);
|
| + HObjectAccess access =
|
| + HObjectAccess::ForObservableJSObjectOffset(offset);
|
| HStoreNamedField* clear_next_map =
|
| HStoreNamedField::New(zone, context(), this, access,
|
| - block()->graph()->GetConstant0(), INITIALIZING_STORE);
|
| + block()->graph()->GetConstant0());
|
| clear_next_map->ClearAllSideEffects();
|
| clear_next_map->InsertAfter(this);
|
| }
|
| @@ -4270,7 +4271,7 @@ HObjectAccess HObjectAccess::ForFixedArrayHeader(int offset) {
|
| }
|
|
|
|
|
| -HObjectAccess HObjectAccess::ForJSObjectOffset(int offset,
|
| +HObjectAccess HObjectAccess::ForMapAndOffset(Handle<Map> map, int offset,
|
| Representation representation) {
|
| ASSERT(offset >= 0);
|
| Portion portion = kInobject;
|
| @@ -4280,7 +4281,13 @@ HObjectAccess HObjectAccess::ForJSObjectOffset(int offset,
|
| } else if (offset == JSObject::kMapOffset) {
|
| portion = kMaps;
|
| }
|
| - return HObjectAccess(portion, offset, representation);
|
| + bool existing_inobject_property = true;
|
| + if (!map.is_null()) {
|
| + existing_inobject_property = (offset <
|
| + map->instance_size() - map->unused_property_fields() * kPointerSize);
|
| + }
|
| + return HObjectAccess(portion, offset, representation, Handle<String>::null(),
|
| + false, existing_inobject_property);
|
| }
|
|
|
|
|
| @@ -4332,7 +4339,8 @@ HObjectAccess HObjectAccess::ForJSArrayOffset(int offset) {
|
| HObjectAccess HObjectAccess::ForBackingStoreOffset(int offset,
|
| Representation representation) {
|
| ASSERT(offset >= 0);
|
| - return HObjectAccess(kBackingStore, offset, representation);
|
| + return HObjectAccess(kBackingStore, offset, representation,
|
| + Handle<String>::null(), false, false);
|
| }
|
|
|
|
|
| @@ -4357,11 +4365,12 @@ HObjectAccess HObjectAccess::ForField(Handle<Map> map,
|
| // Negative property indices are in-object properties, indexed
|
| // from the end of the fixed part of the object.
|
| int offset = (index * kPointerSize) + map->instance_size();
|
| - return HObjectAccess(kInobject, offset, representation, name);
|
| + return HObjectAccess(kInobject, offset, representation, name, false, true);
|
| } else {
|
| // Non-negative property indices are in the properties array.
|
| int offset = (index * kPointerSize) + FixedArray::kHeaderSize;
|
| - return HObjectAccess(kBackingStore, offset, representation, name);
|
| + return HObjectAccess(kBackingStore, offset, representation, name,
|
| + false, false);
|
| }
|
| }
|
|
|
|
|