Hat hónap fejlesztés után bemutatták az LLVM 11.0 projekt új kiadásának elindítását amelyben számos fejlesztés van bemutatva, például a Python 3 frissítése, a RISC-V kísérleti utasításait támogató javítások és még sok más változás.
Azok számára, akik nem ismerik az LLVM-et, tudják, mi az GCC-kompatibilis eszköztár (fordítók, optimalizálók és kódgenerátorok), amelyek a programokat RISC-szerű bitkódú köztes virtuális utasításokba fordítják (alacsony szintű virtuális gépek többszintű optimalizálási rendszerrel).
Úgy tervezték, hogy optimalizálja a fordítási időt, a kötés ideje, a végrehajtás ideje a felhasználó által megadandó programozási nyelvben. Eredetileg a C és a C ++ fordításához készült, Az LLVM nyelvi agnosztikai terve és a projekt sikere sokféle nyelvet születtek.
A létrehozott álkódot a JIT fordító segítségével konvertálhatjuk gépi utasításokká közvetlenül a program futtatásakor.
Az LLVM 11.0 fő újdonságai
Az LLVM 11.0 új verziójában a build rendszert áthelyezték a Python 3 használatáraMint ilyen, a Python 3 használata nem kényszerített, mivel ha nem érhető el, akkor a visszagörgetési opciót a Python 2 használatára hajtják végre.
Tulajdonság vektor-függvény-abi-variáns került hozzá köztes reprezentációig (IR) a skalár és a vektor függvények leképezésének leírására vektorizációs hívásokhoz. Két különálló vektortípust, az llvm :: FixedVectorType és az llvm :: ScalableVectorType elemeket vonjuk ki az llvm :: VectorType könyvtárból.
A meghatározatlan viselkedés undef-alapú elágazás és a meghatározatlan értékekről a standard könyvtárfunkciókra való áttérés.
A memset / memcpy / memmove fájlban megadhatunk nem definiált mutatókat, de ha a paraméter értéke nulla.
Az LLJIT támogatja a statikus inicializálást az LLJIT :: inicializálás és az LLJIT :: deinitializálás módszerekkel.
Hozzáadta a statikus könyvtárak hozzáadásának képessége a JITDylibhez a StaticLibraryDefinitionGenerator osztály használatával. Hozzáadott C API az ORCv2-hez (API JIT fordítók létrehozásához).
A különböző processzor-architektúrák támogatásának fejlesztése részéről:
- Hozzáadva támogatás a Cortex-A34, Cortex-A77, Cortex-A78 és Cortex-X1 processzorokhoz az AArch64 architektúra hátterében. Az ARMv8.2-BF16 (BFloat16) és az ARMv8.6-A kiterjesztések megvalósításra kerültek, beleértve az RMv8.6-ECV (Enhanced Counter Virtualization), az ARMv8.6-FGT (finom szemcsés csapdák), ARMv8.6-AMU (tevékenység) Figyeli a virtualizációt) és az ARMv8.0-DGH (adatgyűjtési tipp).
- Hozzáadott támogatás a Cortex-M55, Cortex-A77, Cortex-A78 és Cortex-X1 processzorokhoz az ARM háttérprogramon. Megvalósította az Armv8.6-A Matrix Multiply és az RMv8.2-AA32BF16 BFloat16 kiterjesztéseket.
- Hozzáadott támogatás a POWER10 processzorok kódgenerálásához a PowerPC háttérrendszerben. Javított hurokoptimalizálás és jobb lebegőpontos műveletek támogatása.
- Az építészeti háttér A RISC-V támogatja a javításokat kísérleti kiterjesztett utasításkészletekhez, amelyeket még hivatalosan nem hagytak jóvá.
Ezen kívül biztosított a kód létrehozásának képessége a kötési funkciók számára integrálva a vektor SVE utasításokba.
Az AVR architektúra háttérprogramja a kísérleti kategóriából az alap disztribúcióban szereplő stabilak közé került.
Az x86 háttérrendszer támogatja az Intel AMX és TSXLDTRK utasításokat. Védelem az LVI-támadások ellen (Load Value Injection) és az általános spekulatív végrehajtási mellékhatások elnyomási mechanizmusát is megvalósították a CPU-n végzett műveletek spekulatív végrehajtása által okozott támadások blokkolására.
A többi kiemelkedő változás közül:
- A SystemZ architektúra háttérprogramja támogatja a MemorySanitizer és a LeakSanitizer támogatását.
- A Libc ++ támogatja a matematikai állandó fejlécfájl támogatását .
- Kiterjesztett LLD linkelő képességek.
- Továbbfejlesztett ELF-támogatás, beleértve a „–lto-emit-asm”, „–lto-egész-program-látható”, „–print-archive-stats”, „–shuffle-section”, „–thinlto-single -module” opciókat "," –Unika "," –részlet "," –szálak = N ".
- Hozzáadva a „–time-trace” opciót a nyomkövetés fájlba mentéséhez, amelyet aztán a Chrome chrome: // trace felületén lehet elemezni.
- A Go (llgo) fordítóval való interfészt eltávolítottuk a kiadásból, és a jövőben átalakíthatjuk.
Végül ha többet szeretne tudni róla erről az új verzióról ellenőrizheti a részleteket a következő linken.