[Mesa-dev] [PATCH] st/mesa: kill instruction if writemask=0 in eliminate_dead_code_advanced()

Marek Olšák maraeo at gmail.com
Sun Oct 9 12:22:49 PDT 2011


Correct.

The thing was: even though we have an addressing register in TGSI
(e.g. tgsi_full_dst|src_register::Indirect), everybody except nv50 and
partially svga doesn't use it now. They expect the indirect register
file is always TGSI_FILE_ADDRESS and the index is 0, making the
destination of ARL irrelevant. This is probably a bug in those drivers
and that's what made me think that ARL doesn't need a destination
register. Sorry for the noise.

Marek

On Sun, Oct 9, 2011 at 8:51 PM, Bryan Cain <bryancain3 at gmail.com> wrote:
> What does it do if there's no destination register?  In any case, I
> don't think glsl_to_tgsi emits any ARLs of that form, so it shouldn't be
> a problem.
>
> Bryan
>
> On 10/07/2011 01:06 PM, Marek Olšák wrote:
>> I think ARL is allowed to have no destination register, right? In that
>> case, there should be a special case not to eliminate ARLs.
>>
>> Marek
>>
>> On Fri, Oct 7, 2011 at 5:40 PM, Brian Paul <brian.e.paul at gmail.com> wrote:
>>> From: Brian Paul <brianp at vmware.com>
>>>
>>> This fixes a bug where we'd wind up emitting an invalid instruction like
>>> MOVE R[0]., R[1];  - note the empty/zero writemask.  If we don't write to
>>> any dest register channels, cull the instruction.
>>> ---
>>>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp |    8 +++++++-
>>>  1 files changed, 7 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>>> index d8ef8a3..44b1149 100644
>>> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>>> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>>> @@ -3776,8 +3776,14 @@ glsl_to_tgsi_visitor::eliminate_dead_code_advanced(void)
>>>          iter.remove();
>>>          delete inst;
>>>          removed++;
>>> -      } else
>>> +      } else {
>>>          inst->dst.writemask &= ~(inst->dead_mask);
>>> +         if (inst->dst.writemask == 0) {
>>> +            iter.remove();
>>> +            delete inst;
>>> +            removed++;
>>> +         }
>>> +      }
>>>    }
>>>
>>>    ralloc_free(write_level);
>>> --
>>> 1.7.3.4
>>>
>>> _______________________________________________
>>> mesa-dev mailing list
>>> mesa-dev at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>


More information about the mesa-dev mailing list