使用LLVM IR Builder创建全局向量

时间:2014-07-18 08:32:27

标签: c++ llvm 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");

如何生成此向量?

1 个答案:

答案 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);