[Mesa-dev] [PATCH 0/6] glsl: Add support for switch statements

Dan McCabe zen3d.linux at gmail.com
Tue Jun 28 18:06:13 PDT 2011


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



More information about the mesa-dev mailing list