Comments at the end (where they are supposed to be :).

On 06/17/2011 05:54 PM, Dan McCabe wrote:
There are three changes from the patch set I published on 6/15:
1) Removed IR pointers from AST classes and moved them to glsl_parser_state, 2) Manage the new IR in a stack-like manner to properly handle nesting, and
3) Squash 6/7 and 7/7 together, since both deal with IR generation

#1 was in response to the concerns Kenneth expressed from his code review on 6/15 about embedding IR data into AST structures.

#2 was need as a consequence of #1 to support nested switch statements correctly.

#3 is a minor cosmetic change that merges the final implicit break IR insertion into the larger collection of IR changes.

cheers, danm

On 06/17/2011 05:43 PM, Dan McCabe wrote:
This patch set adds support for switch statements to the GLSL compiler. We modify the grammar for the compiler with productions for switch statements and case labels, while adding supporting supporting productions not already present. New AST classes are defined to support those productions. However, with our apporach no new IR is needed, allowing us to leverage all existing
optimizations and code generation.


A foolish inconsistency is the hobgoblin of small minds.

Anyway, I just sent out pass 3 of this patch set. It now consists of 5 (not 6) pieces. Parts 4/6 and 5/6 got mashed together into 4/5, but that's not a big deal since the former part 5/6 was simply fleshing out print support for the AST.

This change set has mostly minor, cosmetic changes. UNTIL part 5/5. The major issue that idr identified concerning nested loops should now be resolved. Basically, the loop model for switch statements got tossed into the waste basket. The reason I used loops in the first place was to leverage code generation for break statements. Bad idea. I now generate different code for break statements that are under the influence of a switch statement.

Now, the switch statement is translated into straightforward if/then/else IR.

In addition to maintaining internal state for the cached test value and the fall through state, I now additionally maintain a break state, which is initialized to false and set to true whenever a break stmt is executed. Prior to executing any case statements (the statements following a case label), the fallthru state is reset if the break state is enabled, inhibiting entry of the case statement block (which is guarded by the fallthru state).

A couple of other changes were replacing the if/then/elses used to maintain the fallthru and break states with conditional assignments. This actually simplified both the src code and the generated code.

As always, feedback is requested.

cheers, danm

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to