Mesa (master): glsl: Fix loop bounds detection.

Paul Berry stereotype441 at kemper.freedesktop.org
Tue Jan 8 17:36:28 UTC 2013


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

Author: Paul Berry <stereotype441 at gmail.com>
Date:   Mon Jan  7 18:10:30 2013 -0800

glsl: Fix loop bounds detection.

When analyzing a loop where the loop condition is expressed in the
non-standard order (e.g. "4 > i" instead of "i < 4"), we were
reversing the condition incorrectly, leading to a loop bound that was
off by 1.

Fixes piglit tests {vs,fs}-loop-bounds-unrolled.shader_test.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Matt Turner <mattst88 at gmail.com>
Reviewed-by: Eric Anholt <eric at anholt.net>

---

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

diff --git a/src/glsl/loop_controls.cpp b/src/glsl/loop_controls.cpp
index 9acbadc..79c8204 100644
--- a/src/glsl/loop_controls.cpp
+++ b/src/glsl/loop_controls.cpp
@@ -222,10 +222,10 @@ loop_control_visitor::visit_leave(ir_loop *ir)
 	    limit = cond->operands[0]->as_constant();
 
 	    switch (cmp) {
-	    case ir_binop_less:    cmp = ir_binop_gequal;  break;
-	    case ir_binop_greater: cmp = ir_binop_lequal;  break;
-	    case ir_binop_lequal:  cmp = ir_binop_greater; break;
-	    case ir_binop_gequal:  cmp = ir_binop_less;    break;
+	    case ir_binop_less:    cmp = ir_binop_greater; break;
+	    case ir_binop_greater: cmp = ir_binop_less;    break;
+	    case ir_binop_lequal:  cmp = ir_binop_gequal;  break;
+	    case ir_binop_gequal:  cmp = ir_binop_lequal;  break;
 	    default: assert(!"Should not get here.");
 	    }
 	 }




More information about the mesa-commit mailing list