diff options
author | Kenneth Graunke <[email protected]> | 2017-01-14 23:32:12 -0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2017-01-17 21:45:04 -0800 |
commit | 9919542f1cfff70524bc6117d19bf88e59159caa (patch) | |
tree | 9f1cca98e469b7afb4f2f311555da0461d450d6c /src/egl/Android.mk | |
parent | 90bf39cd2b39874557a7c492d92b85945d45f3c6 (diff) |
i965: Make DCE set null destinations on messages with side effects.
(Co-authored by Matt Turner.)
Image atomics, for example, return a value - but the shader may not
want to use it. We assigned a useless VGRF destination. This seemed
harmless, but it can actually be quite harmful. The register allocator
has to assign that VGRF to a real register. It may assign the same
actual GRF to the destination of an instruction that follows soon after.
This results in a write-after-write (WAW) dependency, and stall.
A number of "Deus Ex: Mankind Divided" shaders use image atomics, but
don't use the return value. Several of these were hitting WAW stalls
for nearly 14,000 (poorly estimated) cycles a pop. Making dead code
elimination null out the destination avoids this issue.
This patch cuts one shader's estimated cycles by -98.39%! Removing the
message response should also help with data cluster bandwidth.
On Skylake:
(instruction counts remain identical)
total cycles in shared programs: 255413890 -> 248081010 (-2.87%)
cycles in affected programs: 12019948 -> 4687068 (-61.01%)
helped: 24
HURT: 10
v2: Make can_omit_write independent of can_eliminate (Curro).
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Francisco Jerez <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
Diffstat (limited to 'src/egl/Android.mk')
0 files changed, 0 insertions, 0 deletions