问题创建矢量LLVM

时间:2018-05-16 15:02:47

标签: c++ llvm llvm-ir

我正在尝试创建一个向量,并使用llvm将其作为值返回。这是我的代码:

  Value *ArrayAST::codeGen() {
    Type *dType = Type::getDoubleTy(mContext);
    Type *vectorType = VectorType::get(dType, 4);
    Value *emptyVector = UndefValue::get(vectorType);
    Constant *index0 = Constant::getIntegerValue(dType, llvm::APInt(32, 0));
    Value *numberValue = numbers[0] -> codeGen(); // double 1.000000e+00
    Value *fullVector = InsertElementInst::Create(emptyVector, numberValue, index0);
    return fullVector;
  }

这会生成以下IR代码:

define <4 x double> @x() {
entry:
  ret <4 x double> <badref>
}

但是,正如您在上面所看到的,存在一个问题:<badref>。当我尝试运行它时,它无法构建:

llvm-as: out.ll:3:21: error: expected type
  ret <4 x double> <badref>

我是LLVM的新手,我不太确定解决这个问题的最佳方法是什么。

修改

如果有用,则所有代码都在GitHub here上。

编辑2

如果我没有记错(我完全可以),IR代码应如下所示:

define <4 x double> @x() {
entry:
  %tmp4 = insertelement <4 x double> undef, double 1.000000e+01, i32 0
  ret <4 x double> %tmp4
}

1 个答案:

答案 0 :(得分:0)

问题是我没有将矢量添加到我的构建器中。以下为我做了诀窍:

Builder.Insert(fullVector);