在LLVM中创建整数数组

时间:2013-09-25 16:08:37

标签: llvm

我的LLVM代码中有一个整数值向量vector<Value*> myIntegers(不一定是常数)。我想创建一个Store指令来存储这些整数。要使用下面的格式创建存储指令,对于第一个参数,我需要创建一个指向这些整数的Value *(从中创建一个数组)。

new StoreInst(Value *Val, Value *Ptr, ...);

如果我的整数是常数,我会使用:

Constant *IntArrayConstant = ConstantDataArray::get(getGlobalContext(), ArrayRef<Value*> myIntegers);

如何创建i32类型的通用数组,并指向Value*?文档说存储ArrayRef也不安全。

1 个答案:

答案 0 :(得分:1)

您应该使用VectorType::get(),创建刚刚获得的UndefValue类型,然后使用N InsertElementInst s填充它,其中N为元素数量。然后,您将创建StoreInst以将Value*存储在堆上。

最后InsertElementInst的结果将是您要查找的Value*(即包含值的向量)。请注意,根据您的目的,实际上可能根本不需要StoreInst

请注意,我假设您的所有Value具有相同的基础类型(即getType()会为所有ArrayType::get返回相同的结果。

修改:还请注意,根据您尝试执行的操作,使用VectorType::get代替{{1}}可能更合适。