[Mesa-dev] [PATCH 2/2] i965: Optimize multiplication by -1 into a negated MOV.

Tom Stellard tom at stellard.net
Thu Feb 12 17:45:16 PST 2015


On Thu, Feb 12, 2015 at 03:36:37PM -0800, Matt Turner wrote:
> instructions in affected programs:     968 -> 942 (-2.69%)
> helped:                                4
> ---
>  src/mesa/drivers/dri/i965/brw_fs.cpp   | 9 +++++++++
>  src/mesa/drivers/dri/i965/brw_vec4.cpp | 5 +++++
>  2 files changed, 14 insertions(+)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index e74a22e..988e36a 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -2335,6 +2335,15 @@ fs_visitor::opt_algebraic()
>  	    break;
>  	 }
>  
> +	 /* a * -1.0 = -a */
> +	 if (inst->src[1].is_negative_one()) {
> +	    inst->opcode = BRW_OPCODE_MOV;
> +            inst->src[0].negate = !inst->src[0].negate;

The indentation looks wrong here.

> +	    inst->src[1] = reg_undef;
> +	    progress = true;
> +	    break;
> +	 }
> +
>           /* a * 0.0 = 0.0 */
>           if (inst->src[1].is_zero()) {
>              inst->opcode = BRW_OPCODE_MOV;
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp
> index ee74052..7868465 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp
> @@ -725,6 +725,11 @@ vec4_visitor::opt_algebraic()
>  	    inst->opcode = BRW_OPCODE_MOV;
>  	    inst->src[1] = src_reg();
>  	    progress = true;
> +	 } else if (inst->src[1].is_negative_one()) {
> +	    inst->opcode = BRW_OPCODE_MOV;
> +            inst->src[0].negate = !inst->src[0].negate;

Here too.

Also, is this transformation valid when a is INF or NAN?

-Tom

> +	    inst->src[1] = src_reg();
> +	    progress = true;
>  	 }
>  	 break;
>        case BRW_OPCODE_CMP:
> -- 
> 2.0.5
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list