LLVM

LLVM

Információ
Fejlesztette LLVM fejlesztői csoport , Illinoisi Egyetem , Apple , Google
Az első verzió 2003. október 24
Utolsó verzió 12.0.0 (2021. április 14)
Letét github.com/llvm/llvm-project
Beírva C ++ , C és szerelő
Operációs rendszer Többplatformos
Nyelvek angol
típus Fordítóprogram
Engedély NCSA / University of Illinois Open Source License és Apache License
Weboldal llvm.org

LLVM (korábbi nevén Low Level Virtual Machine francia nyelven: „alacsony szintű virtuális gép”) egy fordítóprogram infrastruktúra tervezett kódoptimalizálás fordításkor, kapcsolat szerkesztése , még futási vagy alatt „holtidő” program, függetlenül az eredeti nyelven .

Jellemzők

Az LLVM lehetővé teszi virtuális gép létrehozását a Java-hoz és annak JVM-jéhez hasonló nyelvekhez , egy kódgenerátort egy adott hardverarchitektúrához, valamint fordításoptimalizálókat, függetlenül bármely platformtól és nyelvtől. Az LLVM független a nyelvektől és az architektúráktól: felelős a link létrehozásáért egy nyelvspecifikus modulhoz és egy adott gép kódgenerátorához. Támogatja a magas szintű eljárásközi optimalizálást (IPO), statikus fordítókat vagy menet közben (JIT) és számos komponenst kínál a fejlesztés különböző fázisaiban (pl. Bytecode Java interfészek CIL of Microsoft. NET , Python interfész , regisztrációk kiosztása grafikon színezése stb.). Az on-the-fly fordító képes optimalizálni a felesleges statikus elágazásokat egy program futása közben, ezért nagyon jól jön azokban az esetekben, amikor a programnak több lehetősége van: amelyek többsége a környezettől függetlenül könnyen feleslegesnek diagnosztizálható. Ez az oka annak, hogy például, ez az infrastruktúra a csővezeték egyes OpenGL implementáció és különösen az Linux vagy BSD , azzal LLVMpipe belül Gallium3D modul a Mesa 3D , valamint a Mac OS X 10.5 ( Leopard ) hogy támogatást nyújtson a hiányzó hardverekhez.

Összeállítás

A 2.9 verzióig az LLVM C / C ++ és ObjectiveC fordítást ajánlott fel az LLVM-GCC-n keresztül. Azóta a DragonEgg lecseréli az LLVM-GCC-t, hogy a gcc plugin segítségével teljes összeállítást kínáljon az Ada, C, C ++, Fortran nyelvekről, részben pedig a Go, Java, Objective-C és Objective-C ++ nyelvekről. Fontos, hogy az LLVM egy Clang nevű C, C ++, Objective-C és Objective-C ++ fordítót kínál . A 3.0 verzióban a C és C ++ nyelvek támogatása majdnem teljes, csak néhány GCC kiterjesztés még nem támogatott. Így a Debian archívumban található majdnem 33 000 csomagból 4% -uk nem fordít Clang-nal.

Csővezeték

Az LLVM nagyon egyszerű csővezetékkel rendelkezik. A forrásfájlokat (például C ++ fájlokat) lefordítják egy köztes nyelvre, az úgynevezett LLVM-IR (angolul LLVM Intermediate Representation-ről ). Ezután több elemzés és transzformáció történik ezen a köztes ábrázoláson. Ezen a szinten is beavatkoznak bizonyos kiterjesztések, például Polly . Végül utolsó lépésként a gépi kód generálódik a köztes ábrázolás szerint.

Kód reprezentáció

Az LLVM minden nyelvtől és rendszertől független utasításkészletet kínál. Az utasítások többsége formában hasonló a háromcímű kódhoz . Minden utasítás rendelkezik egy egyszerű statikus allokációs űrlappal ( SSA űrlap ) is, ami azt jelenti, hogy minden változót (az úgynevezett tipizált regisztert ) csak egyszer rendelünk hozzá, majd lefagyasztjuk: ez lehetővé teszi a változók közötti függőségek elemzésének egyszerűsítését.

Mindenféle típusú átalakítást , az objektum alsó kényszerétől a lefelé irányuló kényszerítésig , kifejezett utasításokkal kell végrehajtani cast. Az LLVM-nek alapvető típusai vannak, például rögzített méretű egész számok , és pontosan öt levezetett típusa van, nevezetesen: mutatók , tömbök , vektorok, struktúrák és függvények . Egy konkrét nyelvből származó típus képviselhető ezen típusok kombinációjával az LLVM-ben. Például a C ++ osztályban szereplő osztályok struktúrák, függvények és funkciómutatók tömbjeinek kombinációjával ábrázolhatók.

Megjegyzések és hivatkozások

  1. Chris Lattner : „  Végre elérhető az LLVM 1.0 kiadás!  "
  2. 12.0.0 kiadás  " ,2021. április 14(megtekintve 2021. április 15-én )
  3. (in) Verzió információ 2.9 .
  4. (in) A Debian archívum rekonstrukciója csengéssel .

A 3.3 verzió kiadása: (en) Michael Larabel, LLVM 3.3 Hivatalosan kiadva  " , Phoronix,2013. június 18

Külső linkek