2013-09-25 75 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可能更合適。