我想为以下表达式构建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 :(得分: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);