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); |
} |
} |
} |