diff options
author | Eric Anholt <[email protected]> | 2016-10-18 13:08:02 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2016-10-21 14:12:22 -0700 |
commit | 8ff418287689832deb623711deda9c56900e3338 (patch) | |
tree | 0b1378c074c6412b1c619de80ff1ac7d5d713ba0 /src/gallium/drivers/r600/r600_pipe.c | |
parent | a689b8b9dfae6680fa1ac69c3661cd10f9fd442b (diff) |
vc4: Avoid making temporaries for assignments to NIR registers.
Getting stores to NIR regs to not generate new MOVs is tricky, since the
result we're trying to store into the NIR reg may have been from a
conditional update of a temp, or a series of packed writes. The easiest
solution seems to be to require that nir_store_dest()'s arg comes from an
SSA temp.
This causes us to put in a few more temporary MOVs in the NIR SSA dest
case, but copy propagation successfully cleans those up.
The shader-db change is modest:
total instructions in shared programs: 93774 -> 93598 (-0.19%)
instructions in affected programs: 14760 -> 14584 (-1.19%)
total estimated cycles in shared programs: 212135 -> 211946 (-0.09%)
estimated cycles in affected programs: 27005 -> 26816 (-0.70%)
but I was seeing patterns in some register-allocation failures in DEQP
tests that looked like the extra MOVs would increase maximum register
pressure in loops. Some debug code indicates that that's not the case,
though I'm still a bit confused by that result.
Diffstat (limited to 'src/gallium/drivers/r600/r600_pipe.c')
0 files changed, 0 insertions, 0 deletions