malloc.c
#include <stdio.h>
#include <stdlib.h>
int main(){
int arr[4] = {4, 3, 2, 1};
int* ptrArr;
// int 타입 사이즈*4 만큼의 메모리를 할당
ptrArr = (int *)malloc(sizeof(int) * 4);
}
malloc.ll
; Function Attrs: noinline nounwind optnone uwtable
define dso_local i32 @main() #0 {
entry:
%arr = alloca [4 x i32], align 16
%ptrArr = alloca i32*, align 8
%0 = bitcast [4 x i32]* %arr to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %0, i8* align 16 bitcast ([4 x i32]* @__const.main.arr to i8*), i64 16, i1 false)
%call = call noalias i8* @malloc(i64 16) #3
%1 = bitcast i8* %call to i32*
store i32* %1, i32** %ptrArr, align 8
ret i32 0
}
1) alloca로 로컬 변수 arr 스택 메모리 할당
2) alloca로 pointer 로컬변수 ptrArr 스택 메모리 할당
3) arr bitcast
4) call memcpy
5) malloc 함수 call하고, 그 리턴값 %call에 저장
6) malloc 리턴 값의 타입dms i8*, (int 32비트 포인트 변수에 저장하려면) i32* 타입으로 bitcast
7) store로 ptrArr 값에 %1값 저장 (즉, malloc 리턴 값 저장)
8) return 0