On 28/09/18 15:28, Richard Earnshaw (lists) wrote:
> On 28/09/18 13:33, Wilco Dijkstra wrote:
>> Matthew wrote:
>>
>>> The canonical way to require even-odd pairs of registers to implement a 
>>> TImode
>>> pseudo register as mentioned in the documentation is to limit *all* TImode
>>> registers to being even-odd by using the TARGET_HARD_REGNO_MODE_OK hook.
>>
>> And that is the best approach for cases like this. Adding new register 
>> classes is rarely
>> a good idea since they complicate matters and slow down the register 
>> allocator. We've 
>> had several cases where a new register class caused unexpected code quality 
>> issues.
>> How do we know that won't happen this time?
>>
>>> We don't want to use this method as it would apply to all register pairs.
>>
>> Why not? From our Arm/Thumb-2 experiments on DImode splitting and allocation 
>> we 
>> know even/odd pairs give a better allocation, and there are fewer cases 
>> where the
>> allocation completely fails under high register pressure.
> 
> We have to be able to support TImode starting in odd-numbered registers
> because the ABI might use that for passing parameters to functions.
> 

err strike that.  Bit rot in my memory of the ABI.  We do require
128-bit aligned objects to be passed in even numbered pairs of registers...

R.

> 
>>
>>> (It is noteworthy that the current cost model in ira prefers to put values 
>>> that
>>> span two registers in an even-odd pair anyway, so the use of
>>> TARGET_HARD_REGNO_MODE_OK would likely not cause much change in low register
>>> pressure situations)
>>
>> Exactly. TImode is not used that much (unlike DImode on Arm/Thumb-2), so it 
>> would
>> be hard to find any difference.
>>
>> So I would strongly suggest to keep things simple and just use even/odd 
>> pairs. Adding a
>> new register class is generally not worth it unless you can show it will 
>> significantly improve
>> code quality.
>>
>> Wilco
>>
> 
> R.
> 

Reply via email to