Sebuah compiler adalah program yang menerjemahkan kode sumber dari bahasa pemrograman tingkat tinggi menjadi bahasa mesin yang dapat dijalankan komputer. Di dalamnya terdapat serangkaian algoritma dan teknik yang disebut optimisasi compiler (compiler optimizations). Tujuan utama dari optimisasi ini adalah agar kode akhir memiliki performa lebih baik—cepat, efisien dalam penggunaan memori, dan hemat energi.
Optimisasi compiler dilaksanakan dalam berbagai level. Salah satunya dilakukan oleh middle end—fase tengah sebelum kode diubah ke bahasa mesin—di mana compiler melakukan analisis data-flow, penghilangan kode mati (dead-code elimination), propagasi konstanta (constant propagation), dan penyederhanaan loop seperti loop-invariant code motion. Teknik ini memungkinkan compiler memahami struktur dan efek kode secara global agar menghasilkan versi yang lebih optimal.
Ada pula optimisasi skop lokal seperti peephole optimization, yang memeriksa potongan kecil instruksi mesin untuk digantikan dengan instruksi yang lebih singkat atau efisien. Misalnya, operasi perkalian x * 2 bisa diubah menjadi shift-left, lebih cepat dan hemat ruang . Teknik-teknik ini umumnya dilakukan saat fase akhir kompiler, menyasar performa pada level low-level machine code.
Kompleksitas optimisasi ini sangat tinggi—bahkan beberapa kasus dapat masuk dalam kategori NP-complete atau tidak dapat diputuskan secara umum. Untuk itu, compiler menggunakan pendekatan heuristik berdasarkan analisis biaya–manfaat. Misalnya, interprocedural optimization melibatkan analisis antar fungsi, seperti inlining, untuk mempercepat akses dan menekan overhead pemanggilan fungsi.
Ada juga teknik lanjutan seperti static single assignment (SSA), yang menyediakan struktur kode dengan setiap variabel hanya diinisialisasi sekali. Format ini mempermudah optimisasi global seperti penghapusan redundansi nilai (global value numbering) dan sparse conditional constant propagation.
Kesimpulannya, optimisasi compiler bukan sekadar fitur tambahan, tetapi bagian inti dari proses compilasi untuk mencapai kode akhir yang efisien. Dengan memahami algoritma dan teknik ini—seperti analisis data-flow, peephole, interprocedural, dan SSA—seorang pengembang dapat lebih sensitif terhadap performa kode dan bahkan mampu memilih opsi compiler atau flags yang tepat ketika membangun aplikasi kritis performa atau terbatas memori.

