[Mesa-dev] [PATCH 1/4] Revert "glsl: Skip processing the first function's body in do_dead_functions()."

Kenneth Graunke kenneth at whitecape.org
Fri Aug 5 18:32:51 PDT 2011

On 08/01/2011 04:07 PM, Paul Berry wrote:
> opt_dead_functions contained a shortcut to skip processing the first
> function's body, based on the assumption that IR functions are
> topologically sorted, with callees always coming before their callers
> (therefore the first function cannot contain any calls).
> This assumption turns out not to be true in general.  For example, the
> following code snippet gets translated to IR that violates this
> assumption:
>     void f();
>     void g();
>     void f() { g(); }
>     void g() { ... }
> In practice, the shortcut didn't cause bugs because of a coincidence
> of the circumstances in which opt_dead_functions is called:
> (a) we do inlining right before dead function elimination, and
>     inlining (when successful) eliminates all calls.
> (b) for user-defined functions, inlining is always successful, because
>     previous optimization passes (during compilation) have reduced
>     them to a form that is eligible for inlining.
> (c) the function that appears first in the IR can't possibly call a
>     built-in function, because built-in functions are always emitted
>     before the function that calls them.
> It seems unnecessarily fragile to have opt_dead_functions depend on
> these coincidences.  And the next patch in this series will break (c).
> So I'm reverting the shortcut.  The consequence will be a slight
> increase in link time for complex shaders.
> This reverts commit c75427f4c8767e131e5fb3de44fbc9d904cb992d.

Unfortunate, but seems necessary.  I like the is_leaf() idea...things
like that ought to get us even more savings -and- clearer code.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

More information about the mesa-dev mailing list