Module: Mesa Branch: shader-work Commit: 91eb04bb9f1d0e9ada97f0e6d3827bbf8b3bd315 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=91eb04bb9f1d0e9ada97f0e6d3827bbf8b3bd315
Author: Luca Barbieri <l...@luca-barbieri.com> Date: Tue Sep 7 17:02:37 2010 +0200 loop_controls: fix analysis of already analyzed loops The loop_controls pass didn't look at the counter values it put in ir_loop on previous iterations, so while the first iteration worked, subsequent ones couldn't determine max_iterations. --- src/glsl/loop_controls.cpp | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/src/glsl/loop_controls.cpp b/src/glsl/loop_controls.cpp index 17a0d2d..9619d8a 100644 --- a/src/glsl/loop_controls.cpp +++ b/src/glsl/loop_controls.cpp @@ -182,7 +182,14 @@ loop_control_visitor::visit_leave(ir_loop *ir) * i is a loop induction variable, c is a constant, and < is any relative * operator. */ - int max_iterations = (ls->max_iterations < 0) ? INT_MAX : ls->max_iterations; + int max_iterations = ls->max_iterations; + + if(ir->from && ir->to && ir->increment) + max_iterations = calculate_iterations(ir->from, ir->to, ir->increment, (ir_expression_operation)ir->cmp); + + if(max_iterations < 0) + max_iterations = INT_MAX; + foreach_list(node, &ls->terminators) { loop_terminator *t = (loop_terminator *) node; ir_if *if_stmt = t->ir; _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit