diff options
author | Eric Anholt <[email protected]> | 2012-03-16 15:44:25 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2012-04-13 17:13:23 -0700 |
commit | 3f349d4e18d8c114a34fc3c36e1dc55345c1cc31 (patch) | |
tree | 1272795e7fbe64779ab52f1f685b57bb17976235 /src/glsl/opt_if_simplification.cpp | |
parent | 8bb0091e6838aeee2a5819850c334fde71b5a439 (diff) |
glsl: If an "if" has no "then" or "else" code left, remove it.
Cuts 8/1068 instructions from glyphy's fragment shaders on i965.
Reviewed-by: Kenneth Graunke <[email protected]>
Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/glsl/opt_if_simplification.cpp')
-rw-r--r-- | src/glsl/opt_if_simplification.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/glsl/opt_if_simplification.cpp b/src/glsl/opt_if_simplification.cpp index 940dd08d576..7e88208f7c1 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 |