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.
This commit is contained in:
Luca Barbieri 2010-09-07 17:02:37 +02:00 committed by Ian Romanick
parent 4de7a3b76a
commit 710d41131b
1 changed files with 8 additions and 1 deletions

View File

@ -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;