Samuel Iglesias Gonsálvez <sigles...@igalia.com> writes:

> From: Iago Toral Quiroga <ito...@igalia.com>
>
> Specifically, consider the size of the data type of the operand to compute
> the number of registers written.
> ---
>  src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp | 2 +-
>  1 file changed, 1 insertion(+), 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 9147e60..abc68c8 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
> @@ -775,7 +775,7 @@ fs_visitor::opt_copy_propagate_local(void *copy_prop_ctx, 
> bblock_t *block,
>           int offset = 0;
>           for (int i = 0; i < inst->sources; i++) {
>              int effective_width = i < inst->header_size ? 8 : 
> inst->exec_size;
> -            int regs_written = effective_width / 8;
> +            int regs_written = effective_width / 8 * 
> type_sz(inst->src[i].type) / 4;

Please use 'effective_width * type_sz(...) / REG_SIZE' instead, they are
not necessarily equivalent due to rounding and only the latter is
correct when they aren't.  (The existing code still looks broken when
the result is not an exact multiple of REG_SIZE but that probably
belongs in a separate patch...)

With that fixed:
Reviewed-by: Francisco Jerez <curroje...@riseup.net>

>              if (inst->src[i].file == VGRF) {
>                 acp_entry *entry = ralloc(copy_prop_ctx, acp_entry);
>                 entry->dst = inst->dst;
> -- 
> 2.5.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Attachment: signature.asc
Description: PGP signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to