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. > >> (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.