[Mesa-dev] [PATCH 2/2] i965/nir: Re-emit instructions instead of doing mov-to-flag when possible
Matt Turner
mattst88 at gmail.com
Tue Mar 17 11:38:57 PDT 2015
On Mon, Mar 16, 2015 at 9:21 PM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> Because of the way that NIR does conditionals, we get them in any old SSA
> value. The actual boolean value used in the select or if is x != 0.
> Previously, we handled this by emitting a mov.nz to move the value to the
> flag register. However, this almost always adds at least one if not two
> instructions because we have to go through the VGRF when we could be
> comparing directly to the flag and then using the flag.
>
> With this commit, we simply re-emit the instruction that produces the value
> when we can. By doing so, we can use the flag directly and we trust in CSE
> to clean up for us if it can.
>
> Shader-db results:
>
> total instructions in shared programs: 4164120 -> 4110511 (-1.29%)
> instructions in affected programs: 2397042 -> 2343433 (-2.24%)
> helped: 13167
> HURT: 31
> GAINED: 4
> LOST: 4
> ---
A small change to the cmod_propagation branch accomplishes most of this --
total instructions in shared programs: 7850607 -> 7793875 (-0.72%)
instructions in affected programs: 2425140 -> 2368408 (-2.34%)
helped: 13502
HURT: 0
GAINED: 1
LOST: 5
We always emit the MOV.NZ with a D-typed destination, which
cmod_propagate won't combine with a CMP with an F-typed destination.
I don't think we ever emit MOV.NZ without NIR, so no changes without it.
Let me play with this some more.
More information about the mesa-dev
mailing list