[Mesa-dev] [PATCH] glsl: If an "if" has no "then" or "else" code left, remove it.

Kenneth Graunke kenneth at whitecape.org
Wed Apr 11 23:46:03 PDT 2012


On 04/11/2012 08:49 PM, Matt Turner wrote:
> On Wed, Apr 11, 2012 at 9:33 PM, Eric Anholt<eric at anholt.net>  wrote:
>> Cuts 8/1068 instructions from glyphy's fragment shaders on i965.
>> ---
>>   src/glsl/opt_if_simplification.cpp |    8 ++++++++
>>   1 file changed, 8 insertions(+)
>>
>> diff --git a/src/glsl/opt_if_simplification.cpp b/src/glsl/opt_if_simplification.cpp
>> index 940dd08..7e88208 100644
>> --- a/src/glsl/opt_if_simplification.cpp
>> +++ b/src/glsl/opt_if_simplification.cpp
>> @@ -66,6 +66,14 @@ do_if_simplification(exec_list *instructions)
>>   ir_visitor_status
>>   ir_if_simplification_visitor::visit_leave(ir_if *ir)
>>   {
>> +   /* If the if statement has nothing on either side, remove it. */
>> +   if (ir->then_instructions.is_empty()&&
>> +       ir->else_instructions.is_empty()) {
>> +      ir->remove();
>> +      this->made_progress = true;
>> +      return visit_continue;
>> +   }
>> +
>>     /* FINISHME: Ideally there would be a way to note that the condition results
>>      * FINISHME: in a constant before processing both of the other subtrees.
>>      * FINISHME: This can probably be done with some flags, but it would take
>> --
>> 1.7.9.5
>
> Follow on: If then_instructions is empty, is there any benefit in
> inverting the if conditional and moving the else_instructions into the
> place of then_instructions?
>
> Matt

Yeah.  I think in that case, i965 would ultimately emit the assembly:

if(8) ...
else(8)
...actual code...
endif(8)

which is silly.  This is a good place to patch that up.

(I could've sworn we did that already, but I can't seem to find it.)


More information about the mesa-dev mailing list