Создайте глобальный вектор, используя 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");

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

0

Решение

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

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

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

  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);
0

Другие решения


По вопросам рекламы [email protected]