2013-09-25 60 views
0

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

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

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

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

如何创建i32类型的通用阵列,具有Value*指向它?该文件说,存储ArrayRef也不安全。

回答

1

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

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

请注意,我假设您所有的Value都具有相同的基础类型(即getType()对所有这些类型返回相同的结果)。

编辑:也请注意,也许,根据您要做的事情,使用ArrayType::get而不是VectorType::get可能更合适。