[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