LLVM
LLVM이란?
- Low Level Virtual Machine
- LLVM으로 언어에 가상기계를 생성, 가상 기걔가 언어의 독립적인 최적화를 실행
- 코드를 정적으로 컴파일할수도 있고, 자바처럼 한번 더 컴파일되는 중간언어로 컴파일이 될수가 있다.
코드 표현
- 독립적인 명령어 집합과 형식 시스템
- 3-어드레스 코드 형식과 유사
- 3-어드레스 코드 방식 : 2개의 입력용과 1개의 출력용 메모리 주소 혹은 레지스터를 사용하는 방식.
- 배열, 벡터, 구조체, 함수의 5가지가 존재
- C++의 클래스는 구조체와 함수와 함수에 대한 포인터의 배열을 함께 사용하여 표현
구성 요소
프론트 엔드 표현
- C, C++, Swift 등의 컴파일을 지원
- 일부는 GCC 4.0.1 및 4.2에서 가지고 온것.
LLVM의 중간 표현
@.str = internal constant [14 x i8] c"hello, world\0A\00"
declare i32 @printf(i8*, ...)
define i32 @main(i32 %argc, i8** %argv) nounwind {
entry:
%tmp1 = getelementptr [14 x i8]* @.str, i32 0, i32 0
%tmp2 = call i32 (i8*, ...)* @printf( i8* %tmp1 ) nounwind
ret i32 0
}
백엔드: 명령어 집합 및 마이크로아키텍처 지원
- ARM, MIPS, AMD 등 수많은 명령어 집합을 지원을 한다.
Reference