LLVM

LLVM

informație
Dezvoltat de LLVM Developer Group , Universitatea din Illinois , Apple , Google
Prima versiune 24 octombrie 2003
Ultima versiune 12.0.0 (14 aprilie 2021)
Depozit github.com/llvm/llvm-project
Scris in C ++ , C și asamblare
Sistem de operare Multiplatform
Limbi Engleză
Tip Compilator
Licență Licență open source NCSA / University of Illinois și licență Apache
Site-ul web llvm.org

LLVM (denumită anterior mașină virtuală de nivel scăzut în franceză: „mașină virtuală de nivel scăzut”) este o infrastructură de compilare concepută pentru optimizarea codului la compilare, editarea link-urilor , chiar și în timpul rulării sau în timpul „Dead Time” al unui program, indiferent de limba originală .

Caracteristici

LLVM vă permite să creați o mașină virtuală pentru limbaje similare cu Java și JVM-ul său , un generator de cod pentru o arhitectură hardware specifică și optimizatori de compilație independenți de orice platformă și orice limbaj. LLVM este independent de limbaje și arhitecturi: este responsabil pentru realizarea legăturii către un modul specific pentru limbă și către un generator de cod pentru o anumită mașină. Suportă optimizarea inter-procedurală (IPO) de nivel înalt, oferă compilatoare statice sau din mers (JIT) și multe componente în diferite faze ale dezvoltării (de exemplu, coduri de interfețe Java CIL ale Microsoft. NET , o interfață Python , alocare înregistrare prin colorarea graficului etc.). Compilatorul on-the-fly este capabil să optimizeze ramurile statice inutile în timp ce rulează un program și, prin urmare, este util în cazurile în care programul are mai multe opțiuni: dintre care majoritatea pot fi diagnosticate cu ușurință ca fiind inutile, indiferent de mediu. Acesta este motivul pentru care, de exemplu, această infrastructură este utilizată în conducta de anumite OpenGL implementări și , în special , sub Linux sau BSD , cu LLVMpipe în Gallium3D modulul de Mesa 3D , precum și în Mac OS X 10.5 ( Leopard ) pentru a oferi suport pentru hardware-ul lipsă.

Compilare

Până la versiunea 2.9, LLVM a oferit compilarea C / C ++ și ObjectiveC prin LLVM-GCC. De atunci, DragonEgg înlocuiește LLVM-GCC pentru a oferi, printr-un plugin gcc , o compilație completă a limbajelor Ada, C, C ++, Fortran și parțial din Go, Java, Objective-C și Objective-C ++. Important, LLVM oferă un compilator C, C ++, Objective-C și Objective-C ++ numit Clang . În versiunea sa 3.0, suportul pentru limbajele C și C ++ este aproape complet, doar câteva extensii GCC nefiind încă acceptate. Astfel, din aproape 33.000 de pachete din arhiva Debian, 4% dintre ele nu compilează cu Clang.

Conductă

LLVM are o conductă foarte simplă. Fișierele sursă (de exemplu, fișiere C ++) sunt traduse într-o limbă intermediară, numită LLVM-IR (din engleză LLVM Intermediate Representation ). Apoi, se fac multiple analize și transformări asupra acestei reprezentări intermediare. De asemenea, la acest nivel intervin anumite extensii, cum ar fi Polly, de exemplu. În sfârșit, ca ultim pas, codul mașinii este generat în funcție de reprezentarea intermediară.

Reprezentarea codului

LLVM oferă un set de instrucțiuni independente de orice limbă și orice sistem. Majoritatea instrucțiunilor sunt similare în formă cu codul cu trei adrese . Fiecare instrucțiune are, de asemenea, un formular simplu de alocare static (formular SSA ), ceea ce înseamnă că fiecare variabilă (numită registru tipat ) este atribuită o singură dată și apoi este înghețată: acest lucru face posibilă simplificarea analizei dependențelor dintre variabile.

Toate tipurile de conversie de tip , de la constrângerea de jos până la constrângerea descendentă a unui obiect trebuie efectuate folosind instrucțiuni explicite cast. LLVM are tipuri de bază, cum ar fi numere întregi cu dimensiuni fixe , și exact cinci tipuri derivate, și anume: pointeri , tablouri , vectori, structuri și funcții . Un tip dintr-un limbaj concret poate fi reprezentat de o combinație a acestor tipuri în LLVM. De exemplu, o clasă în C ++ poate fi reprezentată printr-o combinație de structuri, funcții și tablouri de indicatori de funcții.

Note și referințe

  1. Chris Lattner , „  Lansarea LLVM 1.0 este în sfârșit disponibilă!  "
  2. „  Versiunea 12.0.0  ” ,14 aprilie 2021(accesat la 15 aprilie 2021 )
  3. (în) Informații despre versiune 2.9 .
  4. (în) Reconstrucția arhivei Debian cu clang .

Lansarea versiunii 3.3: (ro) Michael Larabel, LLVM 3.3 Oficial lansat  " , Phoronix,18 iunie 2013

linkuri externe