Belajar LLVM - Pengenalan Compiler Infrastructure & Sejarah LLVM
Episode 1 of 28

Belajar LLVM - Pengenalan Compiler Infrastructure & Sejarah LLVM

Menelusuri perjalanan LLVM dari proyek riset Chris Lattner di UIUC tahun 2000 hingga menjadi fondasi Clang, Swift, Rust, dan Mojo, serta memahami arsitektur 3-fase (front-end, middle-end, back-end) yang memungkinkan N bahasa × M target dalam satu framework.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Setelah di episode 0 kita menyiapkan environment — LLVM/Clang toolchain terinstall, CMake + Ninja siap, dan "Hello World" berhasil dikompilasi — pada episode ini kita menarik napas sejenak dari hands-on dan memahami mengapa LLVM ada.

Sejarah sebuah infrastruktur mungkin terasa tidak penting, padahal justru di sanalah letak alasan mengapa desainnya modular. Memahami asal-usul LLVM akan menjelaskan keputusan-keputusan desainnya: mengapa ia memisahkan front-end dari back-end, mengapa ia berupa library daripada monolitik, dan mengapa puluhan bahasa pemrograman bisa berbagi satu framework kompilasi.

Lahir dari Riset Chris Lattner

LLVM dimulai sebagai proyek riset oleh Chris Lattner di University of Illinois at Urbana-Champaign pada tahun 2000. Nama "LLVM" awalnya adalah akronim dari "Low Level Virtual Machine", tetapi seiring waktu proyek ini berkembang jauh melampaui konsep VM — dan pada tahun 2011 nama LLVM secara resmi tidak lagi dipandang sebagai akronim.

FaktaDetail
PenciptaChris Lattner
AsalUIUC (University of Illinois)
Rilis pertama2003 (v1.0)
Asal nama"Low Level Virtual Machine" (tidak lagi dipandang sebagai akronim)
BahasaC++
LisensiApache 2.0 with LLVM Exception

Apple mengadopsi LLVM pada tahun 2005 dan Lattner bergabung dengan Apple pada tahun yang sama. Apple kemudian menjadi kontributor terbesar LLVM, menggunakannya sebagai fondasi toolchain Xcode, sistem build, dan bahkan bahasa Swift. Pada tahun 2012, LLVM menerima ACM Software System Award sebagai pengakuan atas dampaknya yang luar biasa terhadap industri perangkat lunak.

Arsitektur 3-Fase: Front-End × Back-End

Keunggulan desain LLVM terletak pada pemisahan pipeline kompilasi menjadi tiga fase independen:

100%
FaseTanggung JawabContoh di LLVM
Front-EndParsing, semantic analysis, AST → LLVM IRClang (C/C++/ObjC), Flang (Fortran)
Middle-EndOptimasi level IR (analysis + transform passes)opt (LLVM optimizer)
Back-EndCode generation untuk target spesifikllc, target X86/AArch64/RISC-V/NVPTX

Dengan desain ini, kalian bisa menulis N bahasa front-end dan M back-end target, dan setiap kombinasi otomatis tersedia. Clang menulis IR dari C/C++; Swift menulis IR dari Swift; Rust menulis IR dari Rust. Semua back-end X86, ARM, RISC-V, WASM, PTX langsung tersedia untuk ketiganya.

Inilah revolusi LLVM dibanding compiler tradisional:GCC harus menulis ulang seluruh pipeline untuk setiap pasangan bahasa+target. LLVM membuatnya sekali编写, selamanya tersedia.

Ekosistem Proyek LLVM

LLVM bukan satu tool — ia adalah ekosistem proyek yang saling melengkapi:

ProyekFungsi
ClangFront-end C, C++, Objective-C, Objective-C++
LLDLinker cepat (pengganti GNU ld)
LLDBDebugger modern (pengganti GDB untuk LLVM)
PollyLoop optimizer berbasis polyhedral model
FlangFront-end Fortran (menggunakan MLIR)
libc++Implementasi standard library C++
compiler-rtRuntime support: sanitizer, profiling, builtins
MLIRMulti-Level IR untuk domain khusus dan accelerator
libunwindStack unwinding untuk exception handling

Kita akan menyentuh sebagian besar proyek ini selama 28 episode. MLIR (episode 22) dan compiler-rt (episode 21) layak mendapat perhatian khusus karena merepresentasikan arah masa depan LLVM.

Bahasa yang Dibangun di Atas LLVM

Peta ini menunjukkan betapa luasnya adopsi LLVM di ekosistem bahasa pemrograman modern:

BahasaAspek LLVM yang Digunakan
SwiftFront-end Swift → LLVM IR → back-end
Rustrustc → LLVM IR (dengan pass kustom)
ZigZig backend → LLVM IR → native code
JuliaJIT compilation via LLVM
MojoPython-like syntax → MLIR → LLVM IR
Kotlin/NativeKotlin → LLVM IR → native
DDMD → LLVM IR (opsi backend)

Swift dan Rust adalah dua contoh terkuat: keduanya memilih LLVM bukan karena tidak ada alternatif, melainkan karena LLVM menawarkan optimasi IR terbaik dan dukungan target paling luas di dunia open-source.

Note

Mojo (rilis 2023-2025) adalah bahasa baru dari Modular yang dibangun di atas MLIR dari awal, bukan LLVM IR langsung. Ini menunjukkan tren: MLIR menjadi titik masuk baru untuk domain-specific compilation, sementara LLVM IR tetap menjadi target codegen akhir.

Mengapa LLVM: Keunggulan Inti

Empat alasan utama LLVM menjadi pilihan dominan:

KeunggulanArti Praktis
Modular & library-firstSetiap komponen bisa dipakai terpisah (clangd, sanitizer, JIT)
Optimasi IR kelas duniaPass optimizer LLVM menghasilkan kode native yang kompetitif dengan GCC
Ekosistem luasSupport untuk X86, ARM, RISC-V, WASM, NVPTX, AMDGPU, SPIR-V
Open-source & governanceApache 2.0, kontribusi dari Apple, Google, AMD, Intel, Arm, NVIDIA

Keunggulan pertama — modularitas — adalah yang paling transformatif: karena LLVM berupa library (bukan monolitik), IDE seperti VS Code bisa memanggil Clang API untuk autocompletion (via clangd), tool seperti clang-tidy bisa menganalisis kode tanpa mengompilasi, dan sanitizer bisa diinstrumentasikan tanpa mengubah source code.

Timeline Singkat

TahunTonggak
2000Chris Lattner memulai LLVM di UIUC
2003LLVM 1.0 dirilis
2005Apple mengadopsi LLVM; Lattner bergabung Apple
2007Clang dimulai sebagai pengganti GCC di macOS
2012ACM Software System Award untuk LLVM
2015LLVM 3.6 — Clang menjadi default compiler di macOS
2019LLVM 9 — support RISC-V, WebAssembly
2023LLVM 17 — New Pass Manager default, MLIR mature
2025LLVM 21 — DTLTO, BF16 SPIR-V, AMDGPU COV6
2026LLVM 22.1 (Feb 2026) — C2y Named Loops, libsycl runtime, Intel Nova Lake

Penutup

Pada episode 1 ini, kalian telah menelusuri perjalanan LLVM dari proyek riset 2000 hingga menjadi compiler infrastructure paling berpengaruh di dunia modern.

Inti yang harus dibawa pulang:

  • LLVM dirintis Chris Lattner di UIUC 2000, diadopsi Apple 2005, dan menerima ACM Software System Award 2012.
  • Arsitektur 3-fase (front-end × back-end) memungkinkan N bahasa berbagi M target dalam satu framework.
  • Ekosistem mencakup Clang, LLD, LLDB, Polly, Flang, MLIR, dan puluhan bahasa (Swift, Rust, Zig, Julia, Mojo).
  • Keunggulan inti: modularitas, optimasi IR kelas dunia, dukungan target luas, dan governance open-source.

Di episode 2 selanjutnya, kita akan membedah anatomi pipeline kompilasi — tahapan dari lexing hingga binary, perbandingan GCC monolitik vs LLVM modular library-first, dan cara menelusuri satu file C dari source sampai binary dengan flag -### dan -save-temps. Sampai jumpa di episode 2!

Belajar LLVM - Pengenalan Compiler Infrastructure & Sejarah LLVM | Belajar LLVM