RFC: Explicit move preference hints
Wilco Dijkstra
Wilco.Dijkstra@arm.com
Wed Aug 23 18:18:00 GMT 2017
Segher Boessenkool wrote:
> On Tue, Aug 22, 2017 at 10:48:17AM +0000, Wilco Dijkstra wrote:
> > The register allocator inserts move preferences when an instruction has
> > one or more dead sources in add_insn_allocno_copies. If an instruction
> > doesn't have a matching constraint (eg. "0"), then any dead source is treated
> > as a copy with all destination registers with a low priority. In reality what
> > appears to happen is that the first dead source is treated as a copy. This
> > leads to non-intuitive allocations in eg. 4-register FMAs. Here you'd
> > prefer to have the accumulator and destination to use the same register
> > when possible: so fmadd d2, d0, d5, d2 instead of fmadd d0, d0, d5, d2.
>
> You could add a preferred alternative that uses "0" to such instruction
> patterns, will that help?
What is a preferred alternative? The current register allocator simply ignores
any combination of "0r", "r0", ("r", "0") and ("0", "r") and just picks the most
generic alternative. So we need a new way to specify a move preference
which won't constrain the allocation ("0" would always force the preference but
will also insert redundant moves which then cannot be removed later).
Wilco
More information about the Gcc-patches
mailing list