freedreno/ir3: round-robin RA
authorRob Clark <robdclark@chromium.org>
Fri, 28 Feb 2020 20:48:16 +0000 (12:48 -0800)
committerMarge Bot <eric+marge@anholt.net>
Tue, 10 Mar 2020 16:01:39 +0000 (16:01 +0000)
commitcc82521de4e8e85022a5facb1b5f52d5139d3022
tree91240bc3a7e3e264372a74f86319c1710060573d
parentb2b349096f03803b974d1d942cfff37f77325bee
freedreno/ir3: round-robin RA

In the second (scalar pass) use the information about # of registers
used in the first pass as the target max, and round-robin within that
range.  This generally gives the post-RA sched pass more opportunities
to re-order instructions to remove nop's.

Also, we can be a bit clever when assigning dest registers for SFU
instructions, by picking the register used for it's src (if available
and already assigned).  This avoids some (ss) syncs caused by write
after read hazards.  (Ie. the SFU instruction will read it's own src
before writing dest.)

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4071>
src/freedreno/ir3/ir3_ra.c