0
Я пытаюсь написать 5-элементную программу сложения векторов в LLVM и не могу понять, как вернуть весь результирующий вектор. Мой код ниже, и ошибкаПрограмма добавления векторов в LLVM
LLVM ERROR: Invalid return type of main() supplied
@veca = global [5 x i32] [i32 1, i32 2, i32 3, i32 4, i32 5]
@vecb = global [5 x i32] [i32 4, i32 6, i32 9, i32 2, i32 4]
define [5 x i32]* @vector_add([5 x i32]* %vec1, [5 x i32]* %vec2)
{
entry:
%vecc = alloca [5 x i32]
br label %loop
loop:
%i = phi i32 [0, %entry], [%nexti, %loop]
%nexti = add i32 %i, 1
%ptra = getelementptr [5 x i32]* %vec1, i64 0, i32 %i
%loada = load i32* %ptra
%ptrb = getelementptr [5 x i32]* %vec2, i64 0, i32 %i
%loadb = load i32* %ptrb
%added = add i32 %loada, %loadb
%ptr = getelementptr [5 x i32]* %vecc, i32 0, i32 %i
store i32 %added, i32* %ptr
%eq = icmp eq i32 %i, 4
br i1 %eq, label %loop, label %exit
exit:
ret [5 x i32]* %vecc
}
define [5 x i32] @main()
{
%answer = call [5 x i32]* @vector_add([5 x i32]* @veca, [5 x i32]* @vecb)
%ans = load [5 x i32]* %answer
ret [5 x i32] %ans
}
Я скомпилированные с LLVM-как вектор-add.ll и побежал с LLi вектор-add.bc который затем произвел ошибку. Что мне следует запускать в терминале linux, чтобы он работал правильно? – FCo
Я мог бы также распечатать ответ, а не возвращать его. В этом случае я мог бы использовать: 'declare i32 @main() {.... @puts ..... return 0} '. В этом случае вы знаете, как печатать 5 целых чисел, используя @puts? – FCo
@FCo: простой способ сделать такие вещи - это скомпилировать небольшие фрагменты кода C с помощью «clang» и изучить IR, который он производит –