Я пытаюсь создать вектор и вернуть его как значение, используя 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
Если я не ошибаюсь (я вполне мог быть), ИК-код должен выглядеть так:
define <4 x double> @x() {
entry:
%tmp4 = insertelement <4 x double> undef, double 1.000000e+01, i32 0
ret <4 x double> %tmp4
}