On Wednesday, November 25, 2015 06:14:28 PM Matt Turner wrote:
> Removes dead code from glsl-mat-from-int-ctor-03.shader_test.
> 
> Reported-by: Juan A. Suarez Romero <jasua...@igalia.com>
> ---
>  src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp   | 4 ++++
>  src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp | 4 ++++
>  2 files changed, 8 insertions(+)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp 
> b/src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp
> index a50cf6f..6b4b602 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp
> @@ -109,6 +109,10 @@ fs_visitor::dead_code_eliminate()
>              BITSET_CLEAR(flag_live, inst->flag_subreg);
>           }
>  
> +         /* Don't mark dead instructions' sources as live */
> +         if (inst->opcode == BRW_OPCODE_NOP)
> +            continue;
> +
>           for (int i = 0; i < inst->sources; i++) {
>              if (inst->src[i].file == VGRF) {
>                 int var = live_intervals->var_from_reg(inst->src[i]);
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp 
> b/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp
> index 58aed81..369941b 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp
> @@ -150,6 +150,10 @@ vec4_visitor::dead_code_eliminate()
>                 BITSET_CLEAR(flag_live, c);
>           }
>  
> +         /* Don't mark dead instructions' sources as live */
> +         if (inst->opcode == BRW_OPCODE_NOP)
> +            continue;
> +
>           for (int i = 0; i < 3; i++) {
>              if (inst->src[i].file == VGRF) {
>                 for (unsigned j = 0; j < inst->regs_read(i); j++) {
> 

This is
Reviewed-by: Kenneth Graunke <kenn...@whitecape.org>

A while back I grumbled at you and Tapani about not updating
inst->sources and leaving junk source registers in place when mutating
an instruction to change its opcode.

If inst->sources were updated correctly when converting to NOP (i.e. set
to 0), you would not have this bug, as the loop over sources would not
happen.  You wouldn't need to special case NOP here, either.

Which actually makes me wonder: if we convert from ADD to MOV (or
similar), do we leave a bogus src[1] in place and treat it as live?
Presumably most cases where that happens are because we did algebraic
optimizations involving IMMs, so the extra live thing would be an
immediate and not cause any trouble...

--Ken

Attachment: signature.asc
Description: This is a digitally signed message part.

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

Reply via email to