| Index: src/lithium-allocator.cc
 | 
| ===================================================================
 | 
| --- src/lithium-allocator.cc	(revision 9531)
 | 
| +++ 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);
 | 
|            }
 | 
|          }
 | 
|        }
 | 
| 
 |