func.c
#include <stdio.h>
unsigned add1(unsigned a, unsigned b) {
int c;
return a + b;
}
func.ll
; Function Attrs: noinline nounwind optnone uwtable
define dso_local i32 @add1(i32 %a, i32 %b) #0 {
entry:
%a.addr = alloca i32, align 4
%b.addr = alloca i32, align 4
%c = alloca i32, align 4
store i32 %a, i32* %a.addr, align 4
store i32 %b, i32* %b.addr, align 4
%0 = load i32, i32* %a.addr, align 4
%1 = load i32, i32* %b.addr, align 4
%add = add i32 %0, %1
ret i32 %add
}
- var.addr: 함수 인자 저장한 local variable 포인터 주소???
1) 함수 이름 add1이고 전역 변수, 파라미터는 로컬 변수 %a, %b
2) a.addr(함수 인자 a 주소), alloca로 스택 메모리 할당
3) b.addr(함수 인자 b 주소), alloca로 스택 메모리 할당
4) alloca로 지역 변수 스택 메모리 할당
5) store로 a 주소를 a.addr 값으로 저장
6) store로 a 주소를 a.addr 값으로 저장
7) 임시 변수 %0에 a.addr에 있는 값을 가져와 저장
8) 임시 변수 %1에 b.addr에 있는 값을 가져와 저장
9) %0, %1에 저장한 값을 add해서 %add에 저장
10) return %add