我的LLVM代码中有一个整数值向量vector<Value*> myIntegers
(不一定是常数)。我想创建一个Store指令来存储这些整数。要使用下面的格式创建存储指令,对于第一个参数,我需要创建一个指向这些整数的Value *(从中创建一个数组)。
new StoreInst(Value *Val, Value *Ptr, ...);
如果我的整数是常数,我会使用:
Constant *IntArrayConstant = ConstantDataArray::get(getGlobalContext(), ArrayRef<Value*> myIntegers);
如何创建i32
类型的通用数组,并指向Value*
?文档说存储ArrayRef也不安全。
答案 0 :(得分:1)
您应该使用VectorType::get()
,创建刚刚获得的UndefValue
类型,然后使用N InsertElementInst
s填充它,其中N为元素数量。然后,您将创建StoreInst
以将Value*
存储在堆上。
最后InsertElementInst
的结果将是您要查找的Value*
(即包含值的向量)。请注意,根据您的目的,实际上可能根本不需要StoreInst
。
请注意,我假设您的所有Value
具有相同的基础类型(即getType()
会为所有ArrayType::get
返回相同的结果。
修改:还请注意,根据您尝试执行的操作,使用VectorType::get
代替{{1}}可能更合适。