Llvm 我是否需要自己计算填充来构造StructType?

Llvm 我是否需要自己计算填充来构造StructType?,llvm,llvm-c++-api,Llvm,Llvm C++ Api,我正在使用LLVM IR生成一些结构数据 例如: struct mystruct {int a:1; int b:2; unsigned long c} = {{1, 2, 3}}; 我阅读了文档并尝试了演示,似乎API要求用户自己处理填充和值组合 有没有办法创建更简单的结构,如下所示: fields.push_back(Type::getIntNTy(context, 1)); fields.push_back(Type::getIntNTy(context, 2)); fields.pus

我正在使用LLVM IR生成一些结构数据

例如:

struct mystruct {int a:1; int b:2; unsigned long c} = {{1, 2, 3}};
我阅读了文档并尝试了演示,似乎API要求用户自己处理填充和值组合

有没有办法创建更简单的结构,如下所示:

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*/);
做布局工作真的很难,而且很可能会引起bug。组合初始值设定项的值也很困难

据我所知,如果我告诉LLVMAPI结构没有打包,它应该自动处理填充,对吗


有什么意见吗?

填充由目标系统的C标准和ABI指定。LLVM本身不知道这些规则(因为它们是针对C的,而不是针对LLVM IR的)

不幸的是,您要负责处理所有填充奇怪和位字段布局。通常,这是C/C++前端的工作(例如,clang)