summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/r600/r600_pipe.c
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2016-10-18 13:08:02 -0700
committerEric Anholt <[email protected]>2016-10-21 14:12:22 -0700
commit8ff418287689832deb623711deda9c56900e3338 (patch)
tree0b1378c074c6412b1c619de80ff1ac7d5d713ba0 /src/gallium/drivers/r600/r600_pipe.c
parenta689b8b9dfae6680fa1ac69c3661cd10f9fd442b (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