[Mesa-dev] [PATCH 2/2] i965/fs: Don't double-accept operands of logical and/or/xor operations.

Matt Turner mattst88 at gmail.com
Mon Sep 23 14:52:16 PDT 2013


On Mon, Sep 23, 2013 at 2:12 PM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> emit_bool_to_cond_code() takes separate paths for ir_expressions and.

Sentence ends unexpectedly?

> If the argument to emit_bool_to_cond_code() is an ir_expression, we
> loop over the operands, calling accept() on each of them, which
> generates assembly code to compute that subexpression.  We then emit
> one or two final instruction that perform the top-level operation on
> those operands.
>
> If it's not an expression (say, a boolean-valued variable), we simply
> call accept() on the whole value.
>
> In commit 80ecb8f1 (i965/fs: Avoid generating extra AND instructions on
> bool logic ops), Eric made logic operations jump out of the expression
> path to the non-expression path.
>
> Unfortunately, this meant that we would first accept() the two operands,
> skip generating any code that used them, then accept() the whole
> expression, generating code for the operands a second time.
>
> Dead code elimination would always remove the first set of redundant
> operand assembly, since nothing actually used them.  But we shouldn't
> generate it in the first place.
>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> Cc: Matt Turner <mattst88 at gmail.com>
> Cc: Eric Anholt <eric at anholt.net>
> ---

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

For posterity, this patch was preventing my addc+add -> addc peephole
from working. Thanks for tracking this down.

Matt


More information about the mesa-dev mailing list