[LLVMdev] How to handle size_t in front ends?

Chris Lattner sabre at nondot.org
Fri May 23 17:07:33 PDT 2008


On May 22, 2008, at 10:00 PM, Talin wrote:
>> 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.

Sure, I'd be fine with adding them as constant exprs.  Go for it.

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

Yep.

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

Right.

-Chris



More information about the llvm-dev mailing list