LLVM ASM, который вы опубликовали, не является правильным переводом кода C, который вы представили. Вы выделяете %a
как переменную стека, а затем загружаете из нее неинициализированные данные и используете их. То, что вы хотите сделать, это присвоить свой аргумент %a
и использовать это значение. Попробуйте использовать этот код вместо:
define internal i64 @do_math(i64 %a) {
entry:
%x = alloca i64 ; <i64*> [#uses=1]
%1 = add i64 5, 3 ; <i64> [#uses=1]
%2 = mul i64 %a, %1 ; <i64> [#uses=1]
store i64 %2, i64* %x
ret void
}
Кроме того, ваш main()
прототип может не соответствовать ожиданиям вашей библиотеки времени выполнения C. Кроме того, вы понимаете, что не возвращаете результат из do_math()
, верно?