[LLVMdev] Do I need to calculate padding by myself to construct a StructType ?

Eli Friedman eli.friedman at gmail.com
Thu Nov 8 17:37:05 PST 2012


On Thu, Nov 8, 2012 at 5:22 PM, Wei Li <limijd at gmail.com> wrote:
> I am using LLVM C++ API to generate IR for some structure data.
>
> For example:
>
> struct mystruct {int a:1; int b:2; unsigned long c} = {{1, 2, 3}};
>
> I read the document and tried the demo cgi, it seems the API requires user
> to handle padding and value combination for the initializer by themselves.
>
> Is there any way to create the struct more simply like this:
>
> fields.push_back(Type::getIntNTy(context, 1));
> fields.push_back(Type::getIntNTy(context, 2));
> fields.push_back(Type::getIntNTy(context, 64));
> structTy.setBody(fields, false /* isPacked*/);
>
> It's really tough to do layout work and it's very likely to cause bugs.
> Combining the values for the initializer is also not easy.
>
> As my understanding, if I tell llvm API that the struct is not packed, it
> should handle padding automatically, right?
>
> Any comments? Any pointer to references is also appreciated.

LLVM struct types will handle simple cases, but it doesn't know
anything about bitfield layout.  i1 and i2 each take up a whole byte
no matter how you specify the packing.

-Eli



More information about the llvm-dev mailing list