summaryrefslogtreecommitdiffstats
path: root/src/glsl/lower_jumps.cpp
diff options
context:
space:
mode:
authorPaul Berry <[email protected]>2011-07-01 15:33:36 -0700
committerPaul Berry <[email protected]>2011-07-08 09:59:30 -0700
commite71b4ab8a64bf978b2036976a41e30996eebb0c8 (patch)
tree254824b4211a390f847757cbae9d9f41d65d9f48 /src/glsl/lower_jumps.cpp
parent382cee91a4bbbee45897239e6802ccaa5a5ad9c3 (diff)
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.
Diffstat (limited to 'src/glsl/lower_jumps.cpp')
-rw-r--r--src/glsl/lower_jumps.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/glsl/lower_jumps.cpp b/src/glsl/lower_jumps.cpp
index 199a0184fee..07897825b49 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.
+ */
}
}