3

我正在使用 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*/);

布局工作真的很难,而且很可能会导致错误。组合初始化器的值也很困难。

据我了解,如果我告诉 llvm API 结构没有打包,它应该自动处理填充,对吧?

任何意见?

4

1 回答 1

0

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

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

于 2012-11-10T19:18:54.273 回答