add.c
#include <stdio.h>
int main() {
int a = 1;
int b = 2;
int sum = a + b;
printf("%d", sum);
}
add.ll
%a = alloca i32, align 4
%b = alloca i32, align 4
%sum = alloca i32, align 4
store i32 1, i32* %a, align 4
store i32 2, i32* %b, align 4
%0 = load i32, i32* %a, align 4
%1 = load i32, i32* %b, align 4
%add = add nsw i32 %0, %1
store i32 %add, i32* %sum, align 4
%2 = load i32, i32* %sum, align 4
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32 %2)
ret i32 0
- i32: int 32비트
- %0, 1, 2: 임시변수
1) alloca로 로컬 변수 a 스택 메모리 할당
2) alloca로 로컬 변수 b 스택 메모리 할당
3) alloca로 로컬 변수 sum 스택 메모리 할당
4) store로 로컬 변수 a 할당한 주소에 값 1 저장
5) store로 로컬 변수 a 할당한 주소에 값 1 저장
6) load로 로컬 변수 a의 값을 가져와 임시변수 %0에 저장
7) load로 로컬 변수 b의 값을 가져와 임시변수 %1에 저장
8) %0, %1에 저장한 값을 add해서 %add에 저장
9) %add에 저장된 덧셈 결과 값을 로컬 변수 sum 할당한 주소에 저장
10) load로 로컬 변수 sum의 값을 가져와 임시변수 %2에 저장
11) printf 함수 호출, 이때 %2의 값이 인자로 넘어감
12) return 0