On 04/11/2012 08:49 PM, Matt Turner wrote:
On Wed, Apr 11, 2012 at 9:33 PM, Eric Anholt<e...@anholt.net> wrote:
Cuts 8/1068 instructions from glyphy's fragment shaders on i965.
---
src/glsl/opt_if_simplification.cpp | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/glsl/opt_if_simplification.cpp
b/src/glsl/opt_if_simplification.cpp
index 940dd08..7e88208 100644
--- a/src/glsl/opt_if_simplification.cpp
+++ b/src/glsl/opt_if_simplification.cpp
@@ -66,6 +66,14 @@ do_if_simplification(exec_list *instructions)
ir_visitor_status
ir_if_simplification_visitor::visit_leave(ir_if *ir)
{
+ /* If the if statement has nothing on either side, remove it. */
+ if (ir->then_instructions.is_empty()&&
+ ir->else_instructions.is_empty()) {
+ ir->remove();
+ this->made_progress = true;
+ return visit_continue;
+ }
+
/* FINISHME: Ideally there would be a way to note that the condition results
* FINISHME: in a constant before processing both of the other subtrees.
* FINISHME: This can probably be done with some flags, but it would take
--
1.7.9.5
Follow on: If then_instructions is empty, is there any benefit in
inverting the if conditional and moving the else_instructions into the
place of then_instructions?
Matt
Yeah. I think in that case, i965 would ultimately emit the assembly:
if(8) ...
else(8)
...actual code...
endif(8)
which is silly. This is a good place to patch that up.
(I could've sworn we did that already, but I can't seem to find it.)
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev