On 09/13/2010 07:00 PM, Ian Romanick wrote:
Module: Mesa
Branch: master
Commit: 2cdbced10d98214616bcc5f960b21185c433d23b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2cdbced10d98214616bcc5f960b21185c433d23b
Author: Luca Barbieri<l...@luca-barbieri.com>
Date: Tue Sep 7 17:03:43 2010 +0200
loop_unroll: unroll loops with (lowered) breaks
If the loop ends with an if with one break or in a single break unroll
it. Loops that end with a continue will have that continue removed by
the redundant jump optimizer. Likewise loops that end with an
if-statement with a break at the end of both branches will have the
break pulled out after the if-statement.
Loops of the form
for (...) {
do_something1();
if (cond) {
do_something2();
break;
} else {
do_something3();
}
}
will be unrolled as
do_something1();
if (cond) {
do_something2();
} else {
do_something3();
do_something1();
if (cond) {
do_something2();
} else {
do_something3();
/* Repeat inserting iterations here.*/
}
}
ir_lower_jumps can guarantee that all loops are put in this form
and thus all loops are now potentially unrollable if an upper bound
on the number of iterations can be found.
It would be nice if the example above was in a comment in the
loop_unroll.cpp file. Similarly, it would be nice if there were
comments/examples showing the transformation done by each of the
(non-trivial) lowering passes. I think that'd help people better
understand what's going on.
-Brian
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev