panfrost/midgard: Extend RA to non-vec4 sources
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Wed, 22 May 2019 02:45:42 +0000 (02:45 +0000)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Tue, 4 Jun 2019 20:14:50 +0000 (20:14 +0000)
commit2d9802233095095f3f20c113e3427ae5bd62f9a2
tree2106eaa3c99320748ce251462b094f5d1ad5c704
parentc1715b558ab3dad36b094a8b44c10e53482eae9e
panfrost/midgard: Extend RA to non-vec4 sources

This represents a major break with the former RA design. We now use
conflicting register classes to represent the subdivision of Midgard's
128-bit registers into varying sizes and arrangement. We determine class
based on the number of components in the instructions' masks. To support
this, we include a number of helpers in the RA to allow composing
swizzles and masks, such that MIR written implicitly assuming .xyzw
sources can be transformed to use actual (non-aligned) sources.

The net result is a marked decrease in register pressure on
non-vec4-exclusive shaders. We could still be doing much better. Not
implemented yet are:

   - Register spilling
   - Per-component liveness

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Ryan Houdek <Sonicadvance1@gmail.com>
src/gallium/drivers/panfrost/midgard/midgard_ra.c