[Mesa-dev] [PATCH] glsl: Flip around "if" statements with empty "then" blocks.

Matt Turner mattst88 at gmail.com
Fri May 3 23:35:22 PDT 2013


On Fri, May 3, 2013 at 3:05 PM, Eric Anholt <eric at anholt.net> wrote:
> This cleans up some funny-looking code in some unigine shaders I was
> looking at.  Also slightly helps on planeshift and a few shaders in an
> upcoming Valve release.
>
> total instructions in shared programs: 1653715 -> 1653587 (-0.01%)
> instructions in affected programs:     16550 -> 16422 (-0.77%)
> ---
>  src/glsl/opt_if_simplification.cpp | 27 ++++++++++++++++++++++++++-
>  1 file changed, 26 insertions(+), 1 deletion(-)
>
> diff --git a/src/glsl/opt_if_simplification.cpp b/src/glsl/opt_if_simplification.cpp
> index e1a23d9..db59b13 100644
> --- a/src/glsl/opt_if_simplification.cpp
> +++ b/src/glsl/opt_if_simplification.cpp
> @@ -25,7 +25,8 @@
>   * \file opt_if_simplification.cpp
>   *
>   * Moves constant branches of if statements out to the surrounding
> - * instruction stream.
> + * instruction stream, and inverts if conditionals to avoid empty
> + * "then" blocks.
>   */
>
>  #include "ir.h"
> @@ -101,6 +102,30 @@ ir_if_simplification_visitor::visit_leave(ir_if *ir)
>        }
>        ir->remove();
>        this->made_progress = true;
> +      return visit_continue;
> +   }
> +
> +   /* Turn:
> +    *
> +    *     if (cond) {
> +    *     } else {
> +    *         do_work();
> +    *     }
> +    *
> +    * into :
> +    *
> +    *     if (!cond)
> +    *         do_work();
> +    *
> +    * which avoids control flow for "else" (which is usually more
> +    * expensive than normal operations), and the "not" can usually be
> +    * folded into the generation of "cond" anyway.
> +    */
> +   if (ir->then_instructions.is_empty()) {
> +      ir->condition = new(ralloc_parent(ir->condition))
> +        ir_expression(ir_unop_logic_not, ir->condition);
> +      ir->else_instructions.move_nodes_to(&ir->then_instructions);
> +      this->made_progress = true;
>     }
>
>     return visit_continue;
> --

Reviewed-by: Matt Turner <mattst88 at gmail.com>


More information about the mesa-dev mailing list