i965/fs: Rewrite assign_constant_locations
authorJason Ekstrand <jason.ekstrand@intel.com>
Sun, 3 Dec 2017 06:32:59 +0000 (22:32 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 8 Dec 2017 23:43:25 +0000 (15:43 -0800)
commit3b34ed79f1dcc802d87191226a37f5d17cabbbc1
treeacc817e7b6a49496824596828db3c93becf1f3db
parent597c194487ab4abe6dd3556faa4f0b8569336245
i965/fs: Rewrite assign_constant_locations

This rewires the logic for assigning uniform locations to work in terms
of "complex alignments".  The basic idea is that, as we walk the list of
instructions, we keep track of the alignment and continuity requirements
of each slot and assert that the alignments all match up.  We then use
those alignments in the compaction stage to ensure that everything gets
placed at a properly aligned register.  The old mechanism handled
alignments by special-casing each of the bit sizes and placing 64-bit
values first followed by 32-bit values.

The old scheme had the advantage of never leaving a hole since all the
64-bit values could be tightly packed and so could the 32-bit values.
However, the new scheme has no type size special cases so it handles not
only 32 and 64-bit types but should gracefully extend to 16 and 8-bit
types as the need arises.

Tested-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/intel/compiler/brw_fs.cpp