[LLVMdev] The type or size of virtual registers

John Criswell criswell at illinois.edu
Fri Jan 28 07:39:11 PST 2011


On 1/28/11 8:14 AM, Qingan Li wrote:
> Thanks for your help with me about the way to access type and size of 
> Value.
> But, I want also know the interface for me to access  the type or size 
> of virtual registers in the SSA form.
> 1. I find no way to associate the virtual registers with the Value class.

In the in-memory LLVM IR, all of the SSA values are C++ objects derived 
from the Value class.  For example, an Instruction object (class 
Instruction derives from class Value) *is* the SSA value generated by 
its result; they are one and the same.

> 2. I also tried to get the size of register nReg by:
>   TargetRegisterClass::getSize(), where the TargetRegisterClass object 
> is obtained by  MachineRegisterInfo::getRegClass( nReg ).
>  But, I found it always returned with the value 4 bytes, say, GR32 (My 
> target is the x86-32 bits). If all virtual registers were size of 32 
> bits, how could we consider the alias register file during register 
> allocation? Namely, if a temporary value could be stored in 8 bits, 
> why do we give it 32 bits? So, I doubt my second way to get the size 
> of virtual register was wrong. Need your further help.

I don't work much with LLVM's code generator infrastructure (I primarily 
do LLVM IR analysis and transforms), so I don't think I can answer your 
question.

When working with pure LLVM IR, we use the TargetData class 
(http://llvm.org/doxygen/classllvm_1_1TargetData.html) to determine the 
size of various LLVM types.  I'm not sure if it's what you want to use 
in the code generator.  Someone else will have to help you with that.

-- John T.

>
> 2011/1/28 John Criswell <criswell at illinois.edu 
> <mailto:criswell at illinois.edu>>
>
>     On 1/27/11 3:23 AM, Qingan Li wrote:
>
>         Hi,
>
>         I wonder if there is an interface for me to access the type or
>         size of virtual registers in the SSA form?
>         I have scanned the MachineOperand in CodeGen part, and failed
>         to find this kind of info for virtual registers.
>
>
>     The getType() method of Value * will return the LLVM type.  The
>     TargetData class will provide information on size for a type on a
>     particular hardware platform.
>
>     -- John T.
>
>
>         -- 
>         Best regards,
>
>         Li Qingan
>
>
>
>
>
> -- 
> Best regards,
>
> Li Qingan
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110128/f704cb3f/attachment.html>


More information about the llvm-dev mailing list