본문 바로가기
LLVM

LLVM 컴파일러는 무엇일까?

by ElectroPy 2021. 1. 26.

LLVM은 C와 C++과 같은 native language를 컴파일하는 단계에서

컴파일 중간에 코드의 일부를 변경하거나 읽어내는 Pass를 적용하는 컴파일러이다.

즉, 특정 코드들에 대해 일관되게 어떠한 처리를 하고 싶을 때 LLVM을 쓸 수 있다.

LLVM의 구조는 크게 프론트엔드(Front-end)-LLVM Optimizer-백엔드(Back-end)로 나뉜다.

LLVM이 프론트엔드에서 LLVM Optimizer로 넘어갈 때 중간 단계 표현(IR, Intermediate Representation)을 사용하는데,

이것을 줄여서 IR 코드라고 부른다.

먼저 프론트엔드에서 Native Language를 IR 코드로 번역하면,

여러개의 Pass가 이 IR 코드에 여러가지 사항을 적용하면서 최종적으로 Machine Code를 만들어낸다.

즉, Pass를 수정해 컴파일 단계에서 코드의 기작을 수정하거나, 분석할 수 있다.

C++의 경우 Clang, Go의 경우 Gollvm, 그리고 Rust의 경우 rustc가 프론트엔드에서 언어를 컴파일 한다고 한다.

우리 랩은 C/C++을 사용하기 때문에 Clang을 사용한다.

사실 LLVM은 IR이라는 새로운 언어를 사용하는 것처럼 보이지만, Clang을 Front-end로 사용하는 IR의 경우 LLVM과 관련된 구조체나 클래스들을 사용하는 C++이다. 따라서 C++을 알고 있다면 도큐먼트를 보면서 LLVM에서 어떤 클래스를 사용해야 원하는 것을 구현할 수 있을지 찾아보면서 배우면 된다.

https://llvm.org/docs/

 

About — LLVM 12 documentation

About Warning If you are using a released version of LLVM, see the download page to find your documentation. The LLVM compiler infrastructure supports a wide range of projects, from industrial strength compilers to specialized JIT applications to small res

llvm.org

여러번의 구글링을 통해 확인해본 결과 LLVM과 관련된 한국어 자료는 없다고 말해도 무방할 정도로 적다는 것을 확인할 수 있었다.

공대는 영어와 어쩔 수 없이 친해져야 하는 것 같다...

'LLVM' 카테고리의 다른 글

IR코드의 구성요소(Module, Function, Block, Instruction)  (0) 2021.01.26
LLVM 시작  (0) 2021.01.26

댓글