Programing

LLVM

BUST 2017. 6. 25. 21:49

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


'Programing' 카테고리의 다른 글

B tree, B+ tree  (0) 2018.08.25
At-least-once Delivery  (0) 2018.08.22
Reactive Programming  (0) 2018.08.19
DAG (Directed acyclic graph)  (0) 2018.08.06
객체지향 응집도와 결합도  (0) 2018.06.13