On Sun, Feb 03, 2013 at 06:22:42PM +0100, Marek Olšák wrote:
> ---

Hi Marek,

If you are interested in expanding the propagation of _SAT to instructions
besides MOV, you can look at peephole_mul_omod() as an example of how to
do this.

Anyway, these patches look good.

For the series:
Reviewed-by: Tom Stellard <thomas.stell...@amd.com>



>  .../drivers/r300/compiler/radeon_optimize.c        |   21 
> ++++++++++++++++++--
>  1 file changed, 19 insertions(+), 2 deletions(-)
> 
> diff --git a/src/gallium/drivers/r300/compiler/radeon_optimize.c 
> b/src/gallium/drivers/r300/compiler/radeon_optimize.c
> index 0714d79..7be9d9e 100644
> --- a/src/gallium/drivers/r300/compiler/radeon_optimize.c
> +++ b/src/gallium/drivers/r300/compiler/radeon_optimize.c
> @@ -143,8 +143,7 @@ static void copy_propagate(struct radeon_compiler * c, 
> struct rc_instruction * i
>       unsigned int i;
>  
>       if (inst_mov->U.I.DstReg.File != RC_FILE_TEMPORARY ||
> -         inst_mov->U.I.WriteALUResult ||
> -         inst_mov->U.I.SaturateMode)
> +         inst_mov->U.I.WriteALUResult)
>               return;
>  
>       /* Get a list of all the readers of this MOV instruction. */
> @@ -156,6 +155,22 @@ static void copy_propagate(struct radeon_compiler * c, 
> struct rc_instruction * i
>       if (reader_data.Abort || reader_data.ReaderCount == 0)
>               return;
>  
> +     /* We can propagate SaturateMode if all the readers are MOV instructions
> +      * without a presubtract operation, source negation and absolute.
> +      * In that case, we just move SaturateMode to all readers. */
> +        if (inst_mov->U.I.SaturateMode) {
> +             for (i = 0; i < reader_data.ReaderCount; i++) {
> +                     struct rc_instruction * inst = 
> reader_data.Readers[i].Inst;
> +
> +                     if (inst->U.I.Opcode != RC_OPCODE_MOV ||
> +                         inst->U.I.SrcReg[0].File == RC_FILE_PRESUB ||
> +                         inst->U.I.SrcReg[0].Abs ||
> +                         inst->U.I.SrcReg[0].Negate) {
> +                             return;
> +                     }
> +             }
> +     }
> +
>       /* Propagate the MOV instruction. */
>       for (i = 0; i < reader_data.ReaderCount; i++) {
>               struct rc_instruction * inst = reader_data.Readers[i].Inst;
> @@ -163,6 +178,8 @@ static void copy_propagate(struct radeon_compiler * c, 
> struct rc_instruction * i
>  
>               if (inst_mov->U.I.SrcReg[0].File == RC_FILE_PRESUB)
>                       inst->U.I.PreSub = inst_mov->U.I.PreSub;
> +             if (!inst->U.I.SaturateMode)
> +                     inst->U.I.SaturateMode = inst_mov->U.I.SaturateMode;
>       }
>  
>       /* Finally, remove the original MOV instruction */
> -- 
> 1.7.10.4
> 
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to