Jawaban:
LLVM adalah perpustakaan yang digunakan untuk membangun, mengoptimalkan dan menghasilkan kode mesin menengah dan / atau biner.
LLVM dapat digunakan sebagai kerangka kerja kompiler, di mana Anda memberikan "ujung depan" (parser dan lexer) dan "ujung belakang" (kode yang mengubah representasi LLVM menjadi kode mesin yang sebenarnya).
LLVM juga dapat bertindak sebagai kompiler JIT - ia memiliki dukungan untuk generasi perakitan x86 / x86_64 dan PPC / PPC64 dengan optimasi kode cepat yang ditujukan untuk kecepatan kompilasi.
Jika Anda tertarik, Anda dapat bermain dengan kode mesin LLVM yang dihasilkan dari kode C atau C ++ di halaman demo mereka , tetapi halaman demo saat ini dinonaktifkan sejak tahun 2013.
Ringkasan yang baik dari LLVM adalah ini:
Di frontend Anda memiliki Perl, dan banyak bahasa tingkat tinggi lainnya. Di backend, Anda memiliki kode asli yang berjalan langsung di mesin.
Di tengah adalah representasi kode perantara Anda. Jika setiap bahasa tingkat tinggi dapat direpresentasikan dalam format IR LLVM ini, maka alat analisis berdasarkan IR ini dapat dengan mudah digunakan kembali - itu adalah alasan dasar.
LLVM (dulu berarti "Mesin Virtual Tingkat Rendah" tetapi sekarang tidak lagi) adalah infrastruktur penyusun, ditulis dalam C ++, yang dirancang untuk pengoptimalan waktu kompilasi, waktu tautan, waktu berjalan, dan "waktu idle" dari program yang ditulis dalam bahasa pemrograman yang sewenang-wenang. Awalnya diimplementasikan untuk C / C ++, desain bahasa-independen (dan keberhasilan) LLVM sejak itu telah melahirkan berbagai macam ujung depan, termasuk Objective C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL , dan lain-lain.
Baca ini untuk penjelasan lebih lanjut. Lihat
juga Unladen Swallow
Menurut buku 'Memulai Dengan LLVM Core Libraries' (c):
Bahkan, nama LLVM mungkin merujuk pada salah satu dari yang berikut:
Proyek / infrastruktur LLVM: Ini adalah payung untuk beberapa proyek yang, bersama-sama, membentuk kompiler lengkap: frontends, backends, optimizer, assembler, linker, libc ++, compiler-rt, dan engine JIT. Kata "LLVM" memiliki arti ini, misalnya, dalam kalimat berikut: "LLVM terdiri dari beberapa proyek".
Kompiler berbasis LLVM: Ini adalah kompiler yang dibangun sebagian atau seluruhnya dengan infrastruktur LLVM. Sebagai contoh, kompiler mungkin menggunakan LLVM untuk frontend dan backend tetapi menggunakan pustaka sistem GCC dan GNU untuk melakukan tautan terakhir. LLVM memiliki makna ini dalam kalimat berikut, misalnya: "Saya menggunakan LLVM untuk mengkompilasi program C ke platform MIPS".
Perpustakaan LLVM: Ini adalah bagian kode yang dapat digunakan kembali dari infrastruktur LLVM. Misalnya, LLVM memiliki makna ini dalam kalimat: "Proyek saya menggunakan LLVM untuk menghasilkan kode melalui kerangka kompilasi Just-in-Time-nya".
Inti LLVM: Optimalisasi yang terjadi pada tingkat bahasa menengah dan algoritma backend membentuk inti LLVM di mana proyek dimulai. LLVM memiliki makna ini dalam kalimat berikut: "LLVM dan Dentang adalah dua proyek yang berbeda".
LLVM IR: Ini adalah representasi perantara kompilator LLVM. LLVM memiliki makna ini ketika digunakan dalam kalimat seperti "Saya membangun sebuah frontend yang menerjemahkan bahasa saya sendiri ke LLVM".
LLVM pada dasarnya adalah perpustakaan yang digunakan untuk membangun kompiler dan / atau perangkat lunak yang berorientasi bahasa. Inti dasarnya adalah walaupun Anda memiliki gcc yang mungkin merupakan kumpulan paling umum dari kompiler, ia tidak dibangun untuk dapat digunakan kembali yaitu. sulit untuk mengambil komponen dari gcc dan menggunakannya untuk membangun aplikasi Anda sendiri. LLVM menangani masalah ini dengan baik dengan membangun satu set "teknologi kompiler dan toolchain modular dan dapat digunakan kembali" yang dapat digunakan siapa pun untuk membangun kompiler dan perangkat lunak yang berorientasi bahasa.
Infrastruktur Kompiler LLVM sangat berguna untuk melakukan optimasi dan transformasi pada kode. Ini juga terdiri dari sejumlah alat yang melayani penggunaan berbeda. llvm-prof adalah alat profil yang memungkinkan Anda melakukan profiling eksekusi untuk mengidentifikasi hotspot program. Opt adalah alat optimisasi yang menawarkan berbagai lintasan optimisasi (misalnya, penghapusan kode mati)
LLVM yang penting memberi Anda perpustakaan, untuk menulis Passes Anda sendiri. Misalnya, jika Anda perlu menambahkan rentang pemeriksaan pada argumen tertentu yang diteruskan ke fungsi tertentu dari Program, menulis Pass LLVM sederhana sudah cukup.
Untuk informasi lebih lanjut tentang cara menulis Pass Anda sendiri, periksa http://llvm.org/docs/WritingAnLLVMPass.html ini