Mesa (master): glsl2: Eliminate zero-iteration loops

Ian Romanick idr at kemper.freedesktop.org
Fri Sep 3 19:01:04 UTC 2010


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

Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Fri Aug 27 11:26:08 2010 -0700

glsl2: Eliminate zero-iteration loops

---

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

diff --git a/src/glsl/loop_controls.cpp b/src/glsl/loop_controls.cpp
index 2eddb91..9eb1a89 100644
--- a/src/glsl/loop_controls.cpp
+++ b/src/glsl/loop_controls.cpp
@@ -234,7 +234,7 @@ loop_control_visitor::visit_leave(ir_loop *ir)
 	       const int iterations = calculate_iterations(init, limit,
 							   lv->increment,
 							   cmp);
-	       if (iterations > 0) {
+	       if (iterations >= 0) {
 		  /* If the new iteration count is lower than the previously
 		   * believed iteration count, update the loop control values.
 		   */
@@ -267,6 +267,12 @@ loop_control_visitor::visit_leave(ir_loop *ir)
       }
    }
 
+   /* If we have proven the one of the loop exit conditions is satisifed before
+    * running the loop once, remove the loop.
+    */
+   if (max_iterations == 0)
+      ir->remove();
+
    return visit_continue;
 }
 




More information about the mesa-commit mailing list