diff options
Diffstat (limited to 'deps/v8/src/lithium-allocator.cc')
-rw-r--r-- | deps/v8/src/lithium-allocator.cc | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/deps/v8/src/lithium-allocator.cc b/deps/v8/src/lithium-allocator.cc index 466110678..35281eb20 100644 --- a/deps/v8/src/lithium-allocator.cc +++ b/deps/v8/src/lithium-allocator.cc @@ -1043,11 +1043,13 @@ void LAllocator::ResolvePhis(HBasicBlock* block) { // it into a location different from the operand of a live range // covering a branch instruction. // Thus we need to manually record a pointer. - if (phi->representation().IsTagged()) { - LInstruction* branch = - InstructionAt(cur_block->last_instruction_index()); - if (branch->HasPointerMap()) { + LInstruction* branch = + InstructionAt(cur_block->last_instruction_index()); + if (branch->HasPointerMap()) { + if (phi->representation().IsTagged()) { branch->pointer_map()->RecordPointer(phi_operand); + } else if (!phi->representation().IsDouble()) { + branch->pointer_map()->RecordUntagged(phi_operand); } } } @@ -1142,10 +1144,13 @@ void LAllocator::ResolveControlFlow(LiveRange* range, // it into a location different from the operand of a live range // covering a branch instruction. // Thus we need to manually record a pointer. - if (HasTaggedValue(range->id())) { - LInstruction* branch = InstructionAt(pred->last_instruction_index()); - if (branch->HasPointerMap()) { + LInstruction* branch = InstructionAt(pred->last_instruction_index()); + if (branch->HasPointerMap()) { + if (HasTaggedValue(range->id())) { branch->pointer_map()->RecordPointer(cur_op); + } else if (!cur_op->IsDoubleStackSlot() && + !cur_op->IsDoubleRegister()) { + branch->pointer_map()->RemovePointer(cur_op); } } } |