如何使用LLVM C ++ API定义结构成员变量的名称

时间:2016-02-29 08:35:36

标签: llvm llvm-ir llvm-c++-api

我是LLVM的新手。我想创建一个如下所示的结构:

struct abcd{
  int a,
  int c,
  int d
}

我的源代码如下:

 structType at;
 at.setName("abcd");
 std::vector<Type*> EltTys; 
 EltTys->push_back(Type::getInt32Ty(getGlobalContext()));
 EltTys->push_back(Type::getInt32Ty(getGlobalContext()));
 EltTys->push_back(Type::getInt32Ty(getGlobalContext()));
 at.setBody(EltTys);
 ....

这样我可以得到一个名为abcd的结构,但似乎结构只包含类型。如何定义成员变量名称(a,c和d)?

我需要它们,因为我们想以这种方式使用这个结构:

(struct abcd*)data->a = 10;
(struct abcd*)data->b = 11;
(struct abcd*)data->d = 12;

1 个答案:

答案 0 :(得分:2)

LLVM IR中的结构字段没有名称。如果您要查找有关其字段的类型信息,请使用字段索引通过the elements() method访问字段类型。

我不完全确定你想做(struct abcd*)data->a = 10;的意思。如果要插入对生成的代码的字段访问权限,请创建GEP指令。

顺便说一下,您可以这样做而不是您的代码:

Type* int_type = Type::getInt32Ty(getGlobalContext());
StructType* at = StructType::create("abcd", int_type, int_type, int_type);

由于StructTypeconvenient create() methods for creating identified struct types