[Mesa-dev] [v2 PATCH 12/16] i965/fs: Allow propagation of instructions with saturate flag to sel

Matt Turner mattst88 at gmail.com
Mon Jul 7 10:28:09 PDT 2014


On Mon, Jul 7, 2014 at 6:57 AM, Abdiel Janulgue
<abdiel.janulgue at linux.intel.com> wrote:
> When sel conditon is bounded within 0 and 1.0. This allows code as:
>         mov.sat a b
>         sel.ge  dst a 0.25F
>
> To be propagated as:
>         sel.ge.sat dst b 0.25F
>
> Signed-off-by: Abdiel Janulgue <abdiel.janulgue at linux.intel.com>
> ---
>  src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
> index 28e59c6..f72ed23 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
> @@ -43,6 +43,7 @@ struct acp_entry : public exec_node {
>     fs_reg dst;
>     fs_reg src;
>     enum opcode opcode;
> +   bool saturate;
>  };
>
>  struct block_data {
> @@ -348,11 +349,26 @@ fs_visitor::try_copy_propagate(fs_inst *inst, int arg, acp_entry *entry)
>        }
>     }
>
> +   if (entry->saturate) {
> +      switch(inst->opcode) {
> +      case BRW_OPCODE_SEL:
> +         if (inst->src[1].file != IMM ||
> +             inst->src[1].fixed_hw_reg.dw1.f < 0.0 ||
> +             inst->src[1].fixed_hw_reg.dw1.f > 1.0) {
> +            return false;
> +         }
> +         break;
> +      default:
> +         return false;
> +      }
> +   }
> +
>     inst->src[arg].file = entry->src.file;
>     inst->src[arg].reg = entry->src.reg;
>     inst->src[arg].reg_offset = entry->src.reg_offset;
>     inst->src[arg].subreg_offset = entry->src.subreg_offset;
>     inst->src[arg].stride *= entry->src.stride;
> +   inst->saturate = inst->saturate ? true : entry->saturate;

I'd probably write this as

inst->saturate = inst->saturate || entry->saturate;


More information about the mesa-dev mailing list