Я преобразую простейший код C
#include <stdio.h>
int main()
{
return 0;
}
к его LLVM IR, используя
clang -emit-llvm -S hello.c
Сгенерированный IR:
define i32 @main() #0 {
%1 = alloca i32, align 4
store i32 0, i32* %1
ret i32 0
}
Однако я не понимаю этого IR. (LLVM doc помогает, но не так много для начинающих)
- Почему у нас есть
%1 = alloca i32, align 4
? Как это соотносится в исходном коде? - Тот же вопрос для
store i32 0, i32* %1
- Предоставляет ли alloca выделение в стеке (вместо динамического выделения)?
- Что означает "выровнять 4"?