0

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

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

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

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

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

4

1 回答 1

1

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

因此,最后一个结果InsertElementInst将是Value*您正在寻找的结果(即包含值的向量)。请注意,根据您要执行的操作,StoreInst实际上可能根本不需要。

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

编辑:还请注意,根据您要执行的操作,可能更适合使用ArrayType::get而不是VectorType::get.

于 2013-09-25T19:25:13.360 回答