[Mesa-dev] [PATCH 21/25] i965/fs: Extend remove_duplicate_mrf_writes() to handle non-VGRF to MRF copies.

Michael Schellenberger mschellenbergercosta at googlemail.com
Sat May 28 11:14:43 UTC 2016


Hi curro,

Am 28.05.2016 um 04:06 schrieb Francisco Jerez:
> ---
>  src/mesa/drivers/dri/i965/brw_fs.cpp | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index 50552cb..660a8db 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -3127,18 +3127,18 @@ fs_visitor::remove_duplicate_mrf_writes()
>        }
>  
>        /* Clear out any MRF move records whose sources got overwritten. */
> -      if (inst->dst.file == VGRF) {
> -	 for (unsigned int i = 0; i < ARRAY_SIZE(last_mrf_move); i++) {
> -	    if (last_mrf_move[i] &&
> -                last_mrf_move[i]->src[0].nr == inst->dst.nr) {
> -	       last_mrf_move[i] = NULL;
> -	    }
> -	 }
> +      for (unsigned int i = 0; i < ARRAY_SIZE(last_mrf_move); i++) {
maybe just unsigned?
--Michael
> +         if (last_mrf_move[i] &&
> +             regions_overlap(inst->dst, inst->regs_written * REG_SIZE,
> +                             last_mrf_move[i]->src[0],
> +                             last_mrf_move[i]->regs_read(0) * REG_SIZE)) {
> +            last_mrf_move[i] = NULL;
> +         }
>        }
>  
>        if (inst->opcode == BRW_OPCODE_MOV &&
>  	  inst->dst.file == MRF &&
> -	  inst->src[0].file == VGRF &&
> +	  inst->src[0].file != ARF &&
>  	  !inst->is_partial_write()) {
>           last_mrf_move[inst->dst.nr] = inst;
>        }



More information about the mesa-dev mailing list