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

Paul Berry stereotype441 at gmail.com
Wed Aug 3 16:49:58 PDT 2011

On 2 August 2011 18:11, Ian Romanick <idr at freedesktop.org> wrote:
>> On 1 August 2011 22:16, Paul Berry <stereotype441 at gmail.com> wrote:
>> 4. Since the linker emits functions at the head of the final linked
>> program, if the linker brings in a function (let's call it f()) that
>> wasn't declared in the compilation unit that defined main, it winds up
>> at the beginning of the linked output, _before_ any global
>> declarations.  If f() refers to a global variable, then the IR is
>> invalid, because ir_dereference_variable nodes need to occur _after_
>> the variables they declare (see ir_validate.cpp line 96).
> It seems like it would be worth constructing a test case for this.  A
> piglit test would be preferable.  If that's not possible, a unit test
> would do.

Agreed.  As we discussed in person, the easiest way to test this seems
to be to add Mesa code that validates the IR after linking, and a
piglit test that exercises the test case in question.  Plus, of course
a Mesa patch that fixes the bug :)

I'll send these patches to the respective mailing lists shortly.

>> Does this analysis seem right to you, Ian?
> Paul, you continue to impress me.  Yeah, that all sounds right.  I had a
> hard time believing #1 because I really thought I had implemented the
> algorithm from my previous post.  Of course, the code and commit logs
> don't lie.  I had thought of #5 shortly after hitting send, but I
> decided it was too contrived to post a follow-up.

Thanks, Ian.  I really appreciate the positive feedback.

More information about the mesa-dev mailing list