2014-07-18 51 views
0

我想建立LLVM IR下列表達式標量添加到載體創建使用LLVM IR生成器

[1,2,3,4]+1 

我已經找到了正確的方法來創建add和標量表達的整體載體,但不是爲了向量。

Value *L = //Missing code here 
Value *R = ConstantFP::get(getGlobalContext(), APFloat(Val)); 
Value *exp = Builder.CreateFAdd(L, R, "addresult"); 

如何生成此矢量?

回答

0

首先確保您確實需要一個vector即可以並行操作的數據類型(SIMD/SIMT方式),而不是簡單的array

之後,確保你打算使用的類型是正確的(APFloat是任意精度浮點數)。

創建矢量通過insertelement

Type* u32Ty = Type::getInt32Ty(llvmContext); 
    Type* vecTy = VectorType::get(u32Ty, 4); 
    Value* emptyVec = UndefValue::get(vecTy); 
    Constant* index0 = Constant::getIntegerValue(u32Ty, llvm::APInt(32, 0)); 
    Value* insert1 = InsertElementInst(/*First integer value*/, emptyVec, index0, 0); 
+0

在您添加內容的相同方法可以繼續是的,我想用向量採取SIMD的優勢。 – jap

+0

我希望IRBuilder能夠像這樣產生IR:@veca = global [5 x i32] [i32 1,i32 2,i32 3,i32 4,i32 5] – jap

+0

然後上面的代碼可以做到這一點。插入元素,你會很好去。 –