mirror of
https://github.com/dart-lang/sdk
synced 2024-09-22 05:31:22 +00:00
Support SameAsFirstInput policy in register allocator when inputs are paired machine registers
BUG= R=vegorov@google.com Review URL: https://codereview.chromium.org//393323004 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38290 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
parent
ac094f9d20
commit
92330fbc32
|
@ -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 =
|
||||
|
|
Loading…
Reference in a new issue