Intermediate Representation (IR) adalah bentuk perantara dalam sebuah compiler atau virtual machine, di mana kode sumber dikonversi menjadi struktur data atau bahasa khusus sebelum diterjemahkan menjadi kode mesin. IR ini dibuat agar cocok untuk proses analisis dan optimisasi serta bersifat netral terhadap bahasa asal dan target mesin. Bentuknya bisa berupa struktur in-memory (misalnya graph), kode tiga-alamat, atau bahasa perantara (intermediate language).
Salah satu evolusi penting pada IR adalah adopsi Static Single Assignment (SSA) sejak 1980-an. Dalam SSA, setiap variabel hanya memiliki satu titik penugasan—variabel tak pernah ditimpa kembali—yang membuat aliran data jauh lebih mudah dianalisis. Transformasi ke SSA melibatkan penambahan versi variabel serta fungsi Φ (phi) pada titik pertemuan alur kontrol, sehingga setiap penggunaan variabel jelas sekali asal sumber nilainya.
Manfaat SSA dalam optimisasi compiler sangat besar. Compiler dapat lebih mudah melakukan constant propagation, dead-code elimination, global value numbering, dan sparse conditional constant propagation. Karena variabel hanya didefinisikan sekali, berbagai analisis seperti use-def chain menjadi sederhana dan efisien, serta optimisasi bisa dilakukan secara berurutan tanpa overhead analisis ulang.
Contoh populernya adalah LLVM IR, yang benar-benar menggunakan SSA sebagai format IR-nya. Selain itu, compiler lain seperti GCC (melalui GIMPLE), serta runtime seperti JIT di HotSpot JVM, juga memanfaatkan SSA . Popularitas SSA juga melahirkan representasi lanjutan seperti sea of nodes, yang menggabungkan aliran data dan kontrol dalam bentuk graph utuh.
Perkembangan terbaru menunjukkan evolusi IR ke arah multi-level dan domain-specific. Contohnya adalah MLIR dari proyek LLVM, yang memungkinkan penggunaan berbagai tingkat abstraksi dalam satu infrastruktur compiler. Selain itu, representasi seperti CPS (continuation-passing style) sering digunakan untuk bahasa fungsional, tapi SSA terbukti setara dalam mendukung optimisasi lanjutan.
Secara keseluruhan, penggunaan IR dan SSA dalam pengembangan compiler modern adalah landasan utama yang memungkinkan performa kode optimal dan portabilitas tinggi. Dengan struktur IR yang modular dan didukung SSA, compiler saat ini dapat dengan mudah melakukan optimisasi canggih, mendukung banyak bahasa pemrograman, serta diadaptasi untuk arsitektur hardware beragam — dari CPU tradisional hingga akselerator AI.

