| Index: src/hydrogen-instructions.cc
|
| diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc
|
| index 70197cfc1af09d95ef949a8ab69f6129187715e2..1ae25cea341bb5bc59de01b5ba832b7ff2218ffb 100644
|
| --- a/src/hydrogen-instructions.cc
|
| +++ b/src/hydrogen-instructions.cc
|
| @@ -3283,8 +3283,9 @@ void HAllocate::HandleSideEffectDominator(GVNFlag side_effect,
|
|
|
| // First update the size of the dominator allocate instruction.
|
| dominator_size = dominator_allocate->size();
|
| - int32_t dominator_size_constant =
|
| + int32_t original_object_size =
|
| HConstant::cast(dominator_size)->GetInteger32Constant();
|
| + int32_t dominator_size_constant = original_object_size;
|
| int32_t current_size_constant =
|
| HConstant::cast(current_size)->GetInteger32Constant();
|
| int32_t new_dominator_size = dominator_size_constant + current_size_constant;
|
| @@ -3319,9 +3320,19 @@ void HAllocate::HandleSideEffectDominator(GVNFlag side_effect,
|
| #ifdef VERIFY_HEAP
|
| if (FLAG_verify_heap && dominator_allocate->IsNewSpaceAllocation()) {
|
| dominator_allocate->MakePrefillWithFiller();
|
| + } else {
|
| + // TODO(hpayer): This is a short-term hack to make allocation mementos
|
| + // work again in new space.
|
| + ClearNextMapWord(original_object_size);
|
| }
|
| +#else
|
| + // TODO(hpayer): This is a short-term hack to make allocation mementos
|
| + // work again in new space.
|
| + ClearNextMapWord(original_object_size);
|
| #endif
|
|
|
| + dominator_allocate->clear_next_map_word_ = clear_next_map_word_;
|
| +
|
| // After that replace the dominated allocate instruction.
|
| HInstruction* dominated_allocate_instr =
|
| HInnerAllocatedObject::New(zone,
|
| @@ -3457,6 +3468,19 @@ void HAllocate::CreateFreeSpaceFiller(int32_t free_space_size) {
|
| }
|
|
|
|
|
| +void HAllocate::ClearNextMapWord(int offset) {
|
| + if (clear_next_map_word_) {
|
| + Zone* zone = block()->zone();
|
| + HObjectAccess access = HObjectAccess::ForJSObjectOffset(offset);
|
| + HStoreNamedField* clear_next_map =
|
| + HStoreNamedField::New(zone, context(), this, access,
|
| + block()->graph()->GetConstantNull());
|
| + clear_next_map->ClearAllSideEffects();
|
| + clear_next_map->InsertAfter(this);
|
| + }
|
| +}
|
| +
|
| +
|
| void HAllocate::PrintDataTo(StringStream* stream) {
|
| size()->PrintNameTo(stream);
|
| stream->Add(" (");
|
|
|