[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