On 04/11/2012 06:33 PM, Eric Anholt 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

Hah :) Such an obviously good idea.

Reviewed-by: Kenneth Graunke <kenn...@whitecape.org>

I was about to say "but wait, side effects in the condition!" but quickly remembered: we can't represent those anymore. It's nice not to have to worry about that. :)
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to