i965/fs: Compute q-values for register allocation manually
authorJason Ekstrand <jason.ekstrand@intel.com>
Sat, 4 Oct 2014 01:13:05 +0000 (18:13 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 24 Oct 2014 23:25:31 +0000 (16:25 -0700)
commit5d1046291a13a1be4bfaeed0fb9d758f877e927e
tree77df332f764c0c329959830c24c13880dd68270d
parent2ec161b2396b08341264965a5825152784b54549
i965/fs: Compute q-values for register allocation manually

Previously, we were allowing the register allocation code to do the
computation for us in ra_set_finalize.  However, the runtime for this
computation is O(c^4 * g) where c is the number of classes and g is the
number of GRF registers.  However, these q-values are directly computable
based on the way we lay out our register classes so there is no need for
the aweful runtime algorithm.

We were doing ok until commit 7210583eb where we bumped the number of
register classes from 11 to 16.  While startup times don't normally matter,
this caused piglit to take 4 times as long to run on Bay Trail.  This patch
should make generating the ra_set much faster and melt the piglit run
times.

v2: Fixed a couple of bugs.  I have now verified that the same q-values are
generated both ways.

Signed-off-by: Jason Ekstrand <jason.ekstrand@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp