i965/fs: Make virtual grf live intervals actually cover their used range. 29/6529/1
authorEric Anholt <eric@anholt.net>
Tue, 30 Apr 2013 22:00:40 +0000 (15:00 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 9 May 2013 21:38:05 +0000 (14:38 -0700)
commite290372542d0475e612e4d10a27b22eae3158ecd
treead199a00e38af2fa46c665283856e3659e64845e
parentdd6152b6cacb869d6db028656927ea2af168448d
i965/fs: Make virtual grf live intervals actually cover their used range.

Previously, we would sometimes not consider a write to a register to
extend the end of the interval, nor would we consider a read before a
write to extend the start.  This made for a bunch of complicated logic
related to how to treat the results when dead code might be present.
Instead, just extend the interval and fix dead code elimination to know
how to remove it.

Interestingly, this actually results in a tiny bit more optimization:
total instructions in shared programs: 1391220 -> 1390799 (-0.03%)
instructions in affected programs:     14037 -> 13616 (-3.00%)

v2: Fix a theoretical problem with the simd16 workaround if dst == src,
    where we would revert the bump of the live range.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> (v1)
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_fs.h
src/mesa/drivers/dri/i965/brw_fs_cse.cpp
src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp
src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp