Создайте глобальный вектор, используя LLVM IR Builder

Я хочу создать LLVM IR для следующего выражения, чтобы добавить скаляр к вектору

[1,2,3,4]+1

Я нашел правильные методы для создания сложения и скалярного выражения, но не для вектора.

Value *L = //Missing code here
Value *R = ConstantFP::get(getGlobalContext(), APFloat(Val));
Value *exp = Builder.CreateFAdd(L, R, "addresult");

Как я могу создать этот вектор?

1 ответ

Сначала убедитесь, что вам действительно нужен вектор, то есть тип данных, с которым вы можете работать параллельно (SIMD/SIMT), а не простой массив.

После этого убедитесь, что тип, который вы намереваетесь использовать, правильный (APFloat - произвольная точность с плавающей точкой).

Создание вектора может продолжаться так же, как вы добавляете элементы через inserttelement.

  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);
Другие вопросы по тегам