Index: src/compiler/instruction-selector-impl.h |
diff --git a/src/compiler/instruction-selector-impl.h b/src/compiler/instruction-selector-impl.h |
index cd41e42eff0243ca060416d3857cd63271dd7218..8543aa0b19604dec163c9801a210ec686d0ee691 100644 |
--- a/src/compiler/instruction-selector-impl.h |
+++ b/src/compiler/instruction-selector-impl.h |
@@ -72,6 +72,14 @@ class OperandGenerator { |
return Define(node, ToUnallocatedOperand(location, type, GetVReg(node))); |
} |
+ InstructionOperand DefineAsDualLocation(Node* node, |
+ LinkageLocation primary_location, |
+ LinkageLocation secondary_location) { |
+ return Define(node, |
+ ToDualLocationUnallocatedOperand( |
+ primary_location, secondary_location, GetVReg(node))); |
+ } |
+ |
InstructionOperand Use(Node* node) { |
return Use(node, UnallocatedOperand(UnallocatedOperand::NONE, |
UnallocatedOperand::USED_AT_START, |
@@ -211,6 +219,18 @@ class OperandGenerator { |
return operand; |
} |
+ UnallocatedOperand ToDualLocationUnallocatedOperand( |
+ LinkageLocation primary_location, LinkageLocation secondary_location, |
+ int virtual_register) { |
+ // We only support the primary location being a register and the secondary |
+ // one a slot. |
+ DCHECK(primary_location.IsRegister() && |
+ secondary_location.IsCalleeFrameSlot()); |
+ int reg_id = primary_location.AsRegister(); |
+ int slot_id = secondary_location.AsCalleeFrameSlot(); |
+ return UnallocatedOperand(reg_id, slot_id, virtual_register); |
+ } |
+ |
UnallocatedOperand ToUnallocatedOperand(LinkageLocation location, |
MachineType type, |
int virtual_register) { |