Index: runtime/vm/flow_graph_allocator.cc |
diff --git a/runtime/vm/flow_graph_allocator.cc b/runtime/vm/flow_graph_allocator.cc |
index bb092dfc8c810bf52cb39c8c94129f9e5035f006..e5f0865d8bff0b89cfb3aee8f42c5db0488d555b 100644 |
--- a/runtime/vm/flow_graph_allocator.cc |
+++ b/runtime/vm/flow_graph_allocator.cc |
@@ -1150,9 +1150,20 @@ void FlowGraphAllocator::ProcessOneInstruction(BlockEntryInstr* block, |
// Normalize same-as-first-input output if input is specified as |
// fixed register. |
if (locs->out(0).IsUnallocated() && |
- (locs->out(0).policy() == Location::kSameAsFirstInput) && |
- (locs->in(0).IsMachineRegister())) { |
- locs->set_out(0, locs->in(0)); |
+ (locs->out(0).policy() == Location::kSameAsFirstInput)) { |
+ if (locs->in(0).IsPairLocation()) { |
+ // Pair input, pair output. |
+ PairLocation* in_pair = locs->in(0).AsPairLocation(); |
+ ASSERT(in_pair->At(0).IsMachineRegister() == |
+ in_pair->At(1).IsMachineRegister()); |
+ if (in_pair->At(0).IsMachineRegister() && |
+ in_pair->At(1).IsMachineRegister()) { |
+ locs->set_out(0, Location::Pair(in_pair->At(0), in_pair->At(1))); |
+ } |
+ } else if (locs->in(0).IsMachineRegister()) { |
+ // Single input, single output. |
+ locs->set_out(0, locs->in(0)); |
+ } |
} |
const bool output_same_as_first_input = |