Francisco Jerez <[email protected]> writes:

> Jason Ekstrand <[email protected]> writes:
>
>> On Fri, Feb 6, 2015 at 6:42 AM, Francisco Jerez <[email protected]> 
>> wrote:
>>> Fixes rewrite by the register coalesce pass of references to
>>> individual halves of 16-wide coalesced registers.
>>> ---
>>>  src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp | 8 ++++++--
>>>  1 file changed, 6 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp 
>>> b/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp
>>> index 09f0fad..2a26a46 100644
>>> --- a/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp
>>> +++ b/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp
>>> @@ -211,9 +211,13 @@ fs_visitor::register_coalesce()
>>>              continue;
>>>           }
>>>           reg_to_offset[offset] = inst->dst.reg_offset;
>>> -         if (inst->src[0].width == 16)
>>> -            reg_to_offset[offset + 1] = inst->dst.reg_offset + 1;
>>>           mov[offset] = inst;
>>> +
>>> +         if (inst->exec_size * type_sz(inst->src[0].type) > REG_SIZE) {
>>
>> Why are we not using "inst->regs_read(0) > 1"?
>>
> Yeah, that would work too, and is certainly more readable, I'll change
> it.
>
Actually upon re-reading the register coalesce pass I just cannot make
sense of the rewrite loop at the bottom...  Why does it need to loop for
each sub-register of the VGRF once for each instruction?  Wouldn't some
simple arithmetic be sufficient to find out whether a source or
destination overlaps with the coalesced register?  And why does it even
check that the movs are non-NULL?  Isn't it guaranteed because of the
previous checks that the whole register has been copied?

Bah...  How about we drop this patch (except for the line that changes
the condition in the if statement -- that was probably a bug of its own)
and fix the rewrite loop instead?

>>> +            reg_to_offset[offset + 1] = inst->dst.reg_offset + 1;
>>> +            mov[offset + 1] = inst;
>>> +         }
>>> +
>>>           channels_remaining -= inst->regs_written;
>>>        }
>>>
>>> --
>>> 2.1.3
>>>
>>> _______________________________________________
>>> mesa-dev mailing list
>>> [email protected]
>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Attachment: signature.asc
Description: PGP signature

_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to