Menguasai LLD linker cepat (kecepatan vs GNU ld/Gold, thin archives, section GC), LTO (Link-Time Optimization) dan ThinLTO parallel, serta DTLTO (Distributed ThinLTO) untuk distribusi kompilasi lintas mesin dengan praktik perbandingan ukuran/performa binary.

Setelah di episode 18 kita memahami roadmap menulis backend target baru, pada episode ini kita membahas tahapan terakhir pipeline kompilasi: linking — dan optimasi yang dilakukan di tahap ini: LTO (Link-Time Optimization) dan DTLTO (Distributed ThinLTO).
Linking adalah tahapan yang sering dilewatkan, padahal ia menentukan ukuran akhir binary, resolusi symbol, dan — dengan LTO — bisa melakukan optimasi lintas translation unit yang tidak mungkin dilakukan di level kompilasi biasa.
LLVM menyediakan LLD — linker cepat yang merupakan pengganti drop-in untuk GNU ld:
| Aspek | LLD | GNU ld | Gold |
|---|---|---|---|
| Kecepatan | Sangat cepat | Standar | Cepat |
| Link-time (1000 TU) | ~2 detik | ~10 detik | ~5 detik |
| Memory usage | Rendah | Tinggi | Sedang |
| Thin archives | Ya | Terbatas | Ya |
| Section GC | Ya | Terbatas | Ya |
clang -fuse-ld=lld -o program program.o
# atau set default di environment
export LD=ld.lldThin archives (.a format) hanya menyimpan indeks simbol tanpa menyalin object files — mengurangi waktu build dan ukuran archive.
--gc-sections menghapus section yang tidak direferensikan — mengurangi ukuran binary akhir:
ld.lld --gc-sections -o program program.oLTO menunda optimasi hingga tahap linking, saat seluruh program sudah tersedia. Ini memungkinkan optimasi lintas translation unit:
Menggabungkan seluruh bitcode ke satu module besar, optimasi, lalu codegen:
clang -flto -o program main.c utils.cKelebihan: optimasi paling agresif. Kekurangan: waktu linking lama, memory tinggi.
Mempertahankan modul terpisah tetapi mengizinkan cross-module optimization via summary:
clang -flto=thin -o program main.c utils.cThinLTO bisa diparalelkan — waktu linking jauh lebih cepat dari Full LTO.
DTLTO (Distributed ThinLTO) diperkenalkan di LLVM 22 (2026) — mendistribusikan optimasi LTO ke beberapa mesin dalam jaringan:
clang -flto=thin -fdtlto-distributor=dist-server -o program main.c utils.cDTLTO mengirimkan bitcode modules ke distributor yang menugaskan optimasi ke worker berbeda — sangat berguna untuk proyek besar dengan ratusan translation units.
Note
DTLLO adalah fitur baru di LLVM 22 yang masih dalam tahap matang. Untuk production, ThinLTO sudah sangat stabil dan widely used (Google, Apple, Facebook menggunakannya). DTLTO adalah evolusi natural untuk proyek yang sudah memanfaatkan ThinLTO.
# Tanpa LTO
clang -O2 -o no_lto program.c
# Full LTO
clang -O2 -flto -fuse-ld=lld -o full_lto program.c
# ThinLTO
clang -O2 -flto=thin -fuse-ld=lld -o thin_lto program.c
# Bandingkan ukuran
ls -la no_lto full_lto thin_lto
# Bandingkan performa (contoh: waktu eksekusi)
time ./no_lto
time ./full_lto
time ./thin_ltoBiasanya: Full LTO menghasilkan binary paling kecil dan paling cepat, tetapi waktu linking paling lama. ThinLTO menawarkan keseimbangan terbaik.
Inti yang harus dibawa pulang:
Di episode 20 selanjutnya kita akan membahas JIT Compilation dengan ORC — evolusi MCJIT → ORC v2, LLJIT high-level API, dan practical use cases: embedded scripting engine, SQL query JIT, game scripting. Sampai jumpa di episode 20!