Выпуск Создание Вектор LLVM - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь создать вектор и вернуть его как значение, используя 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
}

1 Ответ

0 голосов
/ 17 мая 2018

Проблема заключалась в том, что я не добавил вектор в свой конструктор.Следующее помогло мне:

Builder.Insert(fullVector);
...