glsl: If an "if" has no "then" or "else" code left, remove it.
authorEric Anholt <eric@anholt.net>
Fri, 16 Mar 2012 22:44:25 +0000 (15:44 -0700)
committerEric Anholt <eric@anholt.net>
Sat, 14 Apr 2012 00:13:23 +0000 (17:13 -0700)
Cuts 8/1068 instructions from glyphy's fragment shaders on i965.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/glsl/opt_if_simplification.cpp

index 940dd08d5768353480821265d6bc906ca9fc5e84..7e88208f7c141b19dffbc0c23faa7fcecf335c88 100644 (file)
@@ -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