创建矢量 LLVM 时出现问题

Issue Creating Vector LLVM

本文关键字:问题 LLVM 创建      更新时间:2023-10-16

我正在尝试创建一个向量并使用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 上。

编辑 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
}

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

Builder.Insert(fullVector);