> On Mar 5, 2015, at 6:50 AM, Tom Stellard <t...@stellard.net> wrote:
> 
> On Mon, Mar 02, 2015 at 02:09:29PM -0800, Matt Arsenault wrote:
>> 
>>> On Mar 2, 2015, at 1:19 PM, Tom Stellard <t...@stellard.net> wrote:
>>> 
>>> On Mon, Mar 02, 2015 at 10:14:00PM +0100, Marek Olšák wrote:
>>>> On Mon, Mar 2, 2015 at 10:05 PM, Tom Stellard <t...@stellard.net> wrote:
>>>>> On Mon, Mar 02, 2015 at 12:54:16PM +0100, Marek Olšák wrote:
>>>>>> From: Marek Olšák <marek.ol...@amd.com>
>>>>>> 
>>>>>> ---
>>>>>> src/gallium/drivers/radeonsi/si_shader.c | 22 ++++++++++++++++------
>>>>>> 1 file changed, 16 insertions(+), 6 deletions(-)
>>>>>> 
>>>>>> diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
>>>>>> b/src/gallium/drivers/radeonsi/si_shader.c
>>>>>> index b0417ed..f125483 100644
>>>>>> --- a/src/gallium/drivers/radeonsi/si_shader.c
>>>>>> +++ b/src/gallium/drivers/radeonsi/si_shader.c
>>>>>> @@ -192,6 +192,20 @@ static int get_param_index(unsigned semantic_name, 
>>>>>> unsigned index,
>>>>>> }
>>>>>> 
>>>>>> /**
>>>>>> + * BitField Extract: ((value >> rshift) & ((1 << bitwidth) - 1))
>>>>>> + */
>>>>> 
>>>>> Ideally, we would just add a pattern for this in the backend and emit 
>>>>> generic
>>>>> LLVM IR here.  This would also make it possible to share the code with 
>>>>> llvmpipe.
>>>>> 
>>>>> I think the best place to do this would be in 
>>>>> AMDGPUTargetLowering::performDAGCombine().
>>>> 
>>>> Why not SIInstructions.td?
>>>> 
>>> 
>>> Because for patterns like this, I think it is important to match them as
>>> early as possible, because there may be another optimization which reduces
>>> the sequence from 5 to 4 instructions which would cause the pattern not to 
>>> match.
>>> 
>>> -Tom
>> 
>> 
>> I think the opposite in this case. The basic bit operations have a lot of 
>> existing combines on them, and the computeKnownBits implementations are more 
>> complete. The BFE nodes are not as well understood, and trickier to deal 
>> with. AArch64 and NVPTX both have essentially the same instruction, and they 
>> have a large bit of code to match them in their ISelDAGToDAGs. I’ve wanted 
>> to add a generic BFE node to be matched after legalization, but I haven’t 
>> had time to do it.
>> 
> 
> Isn't there a potential for a DAG combine on bit operations, to 'break'
> the pattern so it can't be recognized?
> 
> -Tom
> 

Yes and no. There isn’t really only one pattern for this. Ideally the different 
∑ays to use this would each form a single canonical form the pattern would need 
to match, but that isn’t always possible. The AArch64 code for example tries 
many different patterns (see isBitfieldExtractOp in AArch64ISelDAGToDAG)

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

Reply via email to