Mesa (master): glsl: In lower_jumps.cpp, lower both branches of a conditional.

Paul Berry stereotype441 at kemper.freedesktop.org
Fri Jul 8 17:03:40 UTC 2011


Module: Mesa
Branch: master
Commit: e71b4ab8a64bf978b2036976a41e30996eebb0c8
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e71b4ab8a64bf978b2036976a41e30996eebb0c8

Author: Paul Berry <stereotype441 at gmail.com>
Date:   Fri Jul  1 15:33:36 2011 -0700

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.

---

 src/glsl/lower_jumps.cpp |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/src/glsl/lower_jumps.cpp b/src/glsl/lower_jumps.cpp
index 199a018..0789782 100644
--- a/src/glsl/lower_jumps.cpp
+++ b/src/glsl/lower_jumps.cpp
@@ -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.
+             */
          }
       }
 




More information about the mesa-commit mailing list