var.c
#include <stdio.h>
int global_var = 12;
int main(){
int local_var;
local_var = 14;
return global_var;
}
var.ll
@global_var = dso_local global i32 12, align 4
; Function Attrs: noinline nounwind optnone uwtable
define dso_local i32 @main() #0 {
entry:
%retval = alloca i32, align 4
%local_var = alloca i32, align 4
store i32 0, i32* %retval, align 4
%0 = load i32, i32* @global_var, align 4
ret i32 %0
}
- @: 전역 변수 (global variable)
- %: 지역 변수 (local variable)
1) global로 global_var이라는 전역 변수, 값 12, data 영역에 메모리 할당
2) alloca로 %retval 변수 스택 메모리 할당
3) alloca로 %local_var 지역 변수 스택 메모리 할당
4) %retval 할당한 주소에 값 0 저장
5) load로 전역 변수 global_var의 값을 가져와 임시변수 %0에 저장
6) %0 값 return
var2.c
#include <stdio.h>
int global_var = 12;
int main(){
int local_var = 14;
return global_var;
}
var2.ll
; Function Attrs: noinline nounwind optnone uwtable
define dso_local i32 @main() #0 {
entry:
%retval = alloca i32, align 4
%local_var = alloca i32, align 4
store i32 0, i32* %retval, align 4
store i32 14, i32* %local_var, align 4
%0 = load i32, i32* @global_var, align 4
ret i32 %0
}
1) global로 global_var이라는 전역 변수, 값 12, data 영역에 메모리 할당
2) alloca로 %retval 변수 스택 메모리 할당
3) alloca로 %local_var 지역 변수 스택 메모리 할당
4) %retval 할당한 주소에 값 0 저장
5) store로 로컬 변수 local_var 할당한 주소에 값 14 저장
6) load로 전역 변수 global_var의 값을 가져와 임시변수 %0에 저장
7) %0 값 return