개요
LLVM(Low Level Virtual Machine)은 모듈화된 구조를 가진 오픈소스 컴파일러 인프라 프로젝트이다. 특정 프로그래밍 언어에 종속되지 않고, 공통의 중간 표현(IR, Intermediate Representation)을 중심으로 다양한 컴파일 최적화와 코드 생성을 수행하는 것이 특징이다.
LLVM의 핵심 아이디어는 프로그래밍 언어 → 중간 표현(IR) → 최적화 → 대상 아키텍처 코드 생성이라는 단계적 구조이다. 이를 통해 여러 언어가 동일한 최적화 파이프라인을 공유할 수 있으며, 새로운 언어나 하드웨어 아키텍처를 비교적 쉽게 지원할 수 있다.
LLVM은 전통적인 단일 컴파일러가 아니라, 컴파일러를 구성하는 재사용 가능한 라이브러리들의 집합으로 설계되었다. 이로 인해 다양한 컴파일 최적화 기법을 독립적으로 구현·조합할 수 있고, 연구 및 산업 전반에서 폭넓게 활용되고 있다.
중간 표현(IR)
LLVM은 프로그램을 LLVM IR(Intermediate Representation)이라는 저수준 중간 언어로 표현한다. LLVM IR은 어셈블리어와 유사한 형태를 가지지만, 플랫폼에 독립적이며 정형화된 구조를 갖는다. 모든 소스 언어는 먼저 LLVM IR로 변환된 후, 언어와 무관한 최적화 과정을 거치게 된다.
LLVM IR의 주요 특징은 다음과 같다.
- 정적 단일 할당(SSA, Static Single Assignment) 형식을 사용하여 분석과 최적화가 용이함
- 고급 언어의 구조를 유지하면서도 저수준 최적화가 가능함
- 텍스트 형식(.ll)과 바이너리 형식(.bc)을 모두 지원함