| 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 =
|
|
|