glsl: In lower_jumps.cpp, lower both branches of a conditional.

Previously, lower_jumps.cpp would break out of its loop after lowering
a jump instruction in just the then- or else-branch of a conditional,
and it would fail to lower a jump instruction occurring in the other
branch.

Without this patch, lower_jumps.cpp may require multiple passes in
order to lower all jumps.  This results in sub-optimal output because
lower_jumps.cpp produces a brand new set of temporary variables each
time it is run, and the redundant temporary variables are not
guaranteed to be eliminated by later optimization passes.

Fixes unit test test_lower_returns_4.
This commit is contained in:
Paul Berry 2011-07-01 15:33:36 -07:00
parent 382cee91a4
commit e71b4ab8a6
1 changed files with 4 additions and 1 deletions

View File

@ -638,7 +638,10 @@ lower_continue:
block_records[lower].min_strength = strength_always_clears_execute_flag;
block_records[lower].may_clear_execute_flag = true;
this->progress = true;
break;
/* Let the loop run again, in case the other branch of the
* if needs to be lowered too.
*/
}
}