[Mesa-dev] [PATCH] glsl: If an "if" has no "then" or "else" code left, remove it.

Matt Turner mattst88 at gmail.com
Wed Apr 11 20:49:14 PDT 2012


On Wed, Apr 11, 2012 at 9:33 PM, Eric Anholt <eric at 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


More information about the mesa-dev mailing list