Mesa (master): glsl: If an "if" has no "then" or "else" code left, remove it.

Eric Anholt anholt at kemper.freedesktop.org
Sat Apr 14 00:14:42 UTC 2012


Module: Mesa
Branch: master
Commit: 3f349d4e18d8c114a34fc3c36e1dc55345c1cc31
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=3f349d4e18d8c114a34fc3c36e1dc55345c1cc31

Author: Eric Anholt <eric at anholt.net>
Date:   Fri Mar 16 15:44:25 2012 -0700

glsl: If an "if" has no "then" or "else" code left, remove it.

Cuts 8/1068 instructions from glyphy's fragment shaders on i965.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

---

 src/glsl/opt_if_simplification.cpp |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

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




More information about the mesa-commit mailing list