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 <kenn...@whitecape.org> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev