i965: Improve (i.e. remove) some grf-to-mrf unnecessary moves
authorBenjamin Segovia <benjamin.segovia@intel.com>
Mon, 26 Jul 2010 04:30:19 +0000 (21:30 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 26 Jul 2010 20:08:25 +0000 (13:08 -0700)
commita64def5f2ae1336cafff64a782ec5314d31c310f
tree384f052b7d92b34ed2726518068a2cea04cbe57e
parente4aa9440d9a71a04e9122588191d0357cc5e0c18
i965: Improve (i.e. remove) some grf-to-mrf unnecessary moves

Several routines directly analyze the grf-to-mrf moves from the Gen
binary code. When it is possible, the mov is removed and the message
register is directly written in the arithmetic instruction

Also redundant mrf-to-grf moves are removed (frequently for example,
when sampling many textures with the same uv)

Code was tested with piglit, warsow and nexuiz on an Ironlake
machine. No regression was found there

Note that the optimizations are *deactivated* on Gen4 and Gen6 since I
did test them properly yet. No reason there are bugs but who knows

The optimizations are currently done in branch free programs *only*.
Considering branches is more complicated and there are actually two
paths: one for branch free programs and one for programs with branches

Also some other optimizations should be done during the emission
itself but considering that some code is shader between vertex shaders
(AOS) and pixel shaders (SOA) and that we may have branches or not, it
is pretty hard to both factorize the code and have one good set of
strategies
src/mesa/drivers/dri/i965/brw_wm_emit.c