[LLVMdev] How to handle size_t in front ends?

Talin viridia at gmail.com
Thu May 22 22:00:28 PDT 2008


Chris Lattner wrote:
> On May 22, 2008, at 6:40 PM, Talin wrote:
>   
>>> LLVM already does this.
>>>
>>> http://www.nondot.org/sabre/LLVMNotes/SizeOf-OffsetOf-VariableSizedStructs.txt
>>>
>>> — Gordon
>>>
>>>       
>> Is there a similar technique that would allow calculation of the
>> alignment? (which is also required by the DWARF derived-type  
>> descriptor.)
>>     
>
> There is more than one form of alignment.  To find the struct field  
> alignment of something, you can do something like:
>
> "sizeof({i8, T}) - sizeof(T)"
>   
Clever. I'll use that.

However, I feel that when a "trick" like this gets used enough times, 
that's a signal that it should be codified. Making sizeof() and 
alignmentof() first-class operations in the IR would have the advantage 
of making the generated IR clearer; And we already know that it can be 
done because the tricks exist.

A lot of this thinking comes out of my attempting to create (as I 
mentioned on the other thread) a generic "DebugBuilder", similar to 
IRBuilder, that pumps out source level debugging definitions. As much as 
possible, I want to hide details of the target machine from the user of 
the API. You ought to be able to hand it an LLVM type, plus a little 
sprinkling of source-derived metadata to go along with it, and it 
figures out all the metrics for you.

This is separate from the issue of size_t, which I realize is much more 
complex because it's not merely a machine-dependent constant, it's a 
machine-dependent *type*. And unlike constants, types cannot be the 
product of an expression in LLVM, so there's no handy trick that can be 
used.

-- Talin




More information about the llvm-dev mailing list