[Mesa-dev] glsl: ideas how to improve dead code elimination?

Eric Anholt eric at anholt.net
Tue May 20 09:53:27 PDT 2014


Matt Turner <mattst88 at gmail.com> writes:

> On Mon, May 19, 2014 at 10:56 AM, Aras Pranckevicius <aras at unity3d.com> wrote:
>> Hi,
>>
>> When Mesa's GLSL compiler is faced with a code like this:
>>
>>     // vec4 packednormal exists
>>     vec3 normal;
>>     normal.xy = packednormal.wy * 2.0 - 1.0;
>>     normal.z = sqrt(1.0 - dot(normal.xy, normal.xy));
>>     // now do not use the "normal" at all anywhere
>>
>> Then the dead code elimination pass will not be able to eliminate the
>> "normal" variable, nor anything that lead to it (possibly sampling textures
>> into packed normal, etc.).
>>
>> This is because variable refcounting visitor sees "normal" as having four
>> references, but only two assignments, and can not consider it dead. Even if
>> these two references are from assignment to normal.z where both LHS & RHS
>> reference the same variable.
>>
>> Any ideas on how to improve this?
>>
>>
>> If the original code was doing something like this, then dead code
>> elimination is able to "properly" eliminate this whole thing:
>>
>>     // vec4 packednormal exists
>>     vec3 normal;
>>     vec2 nxy = packednormal.wy * 2.0 - 1.0;
>>     float nz = sqrt(1.0 - dot(nxy, nxy));
>>     normal.xy = nxy;
>>     normal.z = nz;
>>     // now do not use the "normal" at all anywhere
>
> Eric is working on a better GLSL IR dead code elimination pass. I'm
> not sure of the current status.
>
> It's in his tree:
>
>    git://people.freedesktop.org/~anholt/mesa deadcode

Yeah, the code is passing piglit iirc, and with Matt's register
renaming, it's a nice win:

total instructions in shared programs: 1826879 -> 1813610 (-0.73%)
instructions in affected programs:     270257 -> 256988 (-4.91%)
GAINED:                                15
LOST:                                  15

however, the nasty thing is that unigine heaven #208 now compiles
forever, and I haven't tracked it down.

I have noticed in Source engine shaders that a more aggressive register
renaming at the GLSL IR level would be useful.  Or rework tree grafting
to deal with values used only once, not just whole variables used only
once.  With the live variables code in my deadcode branch, a better tree
grafting might be easy.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 818 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140520/07b8a841/attachment.sig>


More information about the mesa-dev mailing list