| Index: src/lithium-allocator.cc
|
| ===================================================================
|
| --- src/lithium-allocator.cc (revision 9327)
|
| +++ src/lithium-allocator.cc (working copy)
|
| @@ -1043,11 +1043,13 @@
|
| // 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 @@
|
| // 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);
|
| }
|
| }
|
| }
|
|
|