[LLVMdev] getMinimalPhysRegClass

reed kotler rkotler at mips.com
Mon May 14 14:28:45 PDT 2012


On 05/14/2012 02:17 PM, Jakob Stoklund Olesen wrote:
> On May 14, 2012, at 1:02 PM, reed kotler wrote:
>
>> Does anyone understand the purpose of :
>>
>> TargetRegisterInfo::getMinimalPhysRegClass ???
> Barely.
>
>> Why is there the presumption to use the minimal subclass?
> The function can be traced back to a time when men were men and registers belonged to ONE register class. That concept doesn't make sense any longer, as LLVM supports and aggressively uses overlapping register classes.
>
> I changed the meaning of the function to be 'the most specific register class containing Reg' which at least attempts to assign some meaning to a unique answer.
>
> In general, there isn't a good answer to "What is the register class of R?"
>
>> I want to introduct a different register class for MIPS 16 but don't
>> want it to chose MIPS 16 when
>> I'm compiling for MIPS 32.
> What exactly are you trying to do? The getMinimalPhysRegClass hook shouldn't be used for much these days. The most prominent client is PEI spilling callee-saved registers.
>
> The register allocator is generally assuming that sub-classes of legal register classes are usable. That is a pervasive assumption.
>
> /jakob
>
I'm not using getMinimalPhysRegClass. Some target independent code is 
using it.

It makes trouble for us and I would like to submit a patch to make it a 
virtual function so that I can override it and make it meaningful for 
Mips, as long as this method still exists.

I want to add another register class for Mips16 and don't want to define 
a Mips16 set of registers because in reality there is no such thing; 
MIPS16 is an application extension that can exist for either Mips32 or 
Mips64 which uses a different instruction encoding.

When I'm compiling for -mips23 -nomips16 I don't want the mips16 
register class being passed to any functions which take such a register 
class parameter.

As it is right now, it sees mips16 as the minimal size class and passes 
it when I'm compiling for -mips32 -nomips16





More information about the llvm-dev mailing list