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:
parent
4de7a3b76a
commit
710d41131b
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue