[Mesa-dev] [PATCH 02/59] glsl/standalone: Optimize add-of-neg to subtract
Iago Toral
itoral at igalia.com
Wed Oct 26 08:07:09 UTC 2016
On Tue, 2016-10-25 at 17:59 -0700, Ian Romanick wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> This just makes the output of the standalone compiler a little more
> compact.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
> src/compiler/glsl/standalone.cpp | 34
> ++++++++++++++++++++++++++++++++++
> 1 file changed, 34 insertions(+)
>
> diff --git a/src/compiler/glsl/standalone.cpp
> b/src/compiler/glsl/standalone.cpp
> index 055c433..b41d25c 100644
> --- a/src/compiler/glsl/standalone.cpp
> +++ b/src/compiler/glsl/standalone.cpp
> @@ -38,6 +38,37 @@
> #include "standalone.h"
> #include "util/string_to_uint_map.h"
>
> +class add_neg_to_sub_visitor : public ir_hierarchical_visitor {
> +public:
> + add_neg_to_sub_visitor()
> + {
> + /* empty */
> + }
> +
> + ir_visitor_status visit_leave(ir_expression *ir)
> + {
> + if (ir->operation != ir_binop_add)
> + return visit_continue;
> +
> + for (unsigned i = 0; i < 2; i++) {
> + ir_expression *const op = ir->operands[i]->as_expression();
> +
> + if (op != NULL && op->operation == ir_unop_neg) {
> + ir->operation = ir_binop_sub;
> +
> + /* This ensures that -a + b becomes b - a. */
> + if (i == 0)
> + ir->operands[0] = ir->operands[1];
> +
> + ir->operands[i] = op->operands[0];
I think you meant:
ir->operands[1] = op->operands[0]
> + break;
> + }
> + }
> +
> + return visit_continue;
> + }
> +};
> +
> static const struct standalone_options *options;
>
> static void
> @@ -441,6 +472,9 @@ standalone_compile_shader(const struct
> standalone_options *_options,
> if (!shader)
> continue;
>
> + add_neg_to_sub_visitor v;
> + visit_list_elements(&v, shader->ir);
> +
> shader->Program = rzalloc(shader, gl_program);
> init_gl_program(shader->Program, shader->Stage);
> }
More information about the mesa-dev
mailing list