Po šiestich mesiacoch vývoja bolo predstavené uvedenie novej verzie projektu LLVM 9.0, čo je sada nástrojov kompatibilných s GCC (kompilátory, optimalizátory a generátory kódu), ktorý kompiluje programy do prechodného bitového kódu virtuálnych inštrukcií podobných RISC (nízkoúrovňový virtuálny stroj s viacúrovňovým optimalizačným systémom).
Je navrhnutý tak, aby optimalizoval čas kompilácie, čas väzby, čas vykonania v ľubovoľnom programovacom jazyku, ktorý chce používateľ definovať. Pôvodne implementované na kompiláciu C a C ++, Agnostický dizajn jazyka LLVM a úspešnosť projektu plodili širokú škálu jazykov, vrátane Objective-C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL, Clang, Rust, Gambas a ďalších.
Vygenerovaný pseudokód je možné previesť pomocou kompilátora JIT na strojové pokyny priamo v čase vykonania programu.
Hlavné nové funkcie LLVM 9.0
Medzi nové funkcie LLVM 9.0 nájsť podporu na odstránenie značky experimentálneho vývoja z platformy RISC-V, Podpora C ++ pre OpenCL.
Ďalšia novinka, ktorá vyniká schopnosť rozdeliť program na dynamicky načítané časti v LLD a implementácia konštruktu »asm goto» použitého v kóde jadra Linuxu.
Okrem toho sa tiež zdôrazňuje, že Libc ++ prišiel s podporou WASI (WebAssembly System Interface) a LLD zaviedli počiatočnú podporu pre dynamické viazanie WebAssembly. Pridaná implementácia špecifického výrazu GCC »asm goto», ktorý umožňuje prechod zo zostaveného vloženého bloku na značku v kóde C.
Táto vlastnosť je nevyhnutná na zostavenie jadra Linuxu v režime »CONFIG_JUMP_LABEL = y« pomocou Clang na systémoch x86_64. Ak vezmeme do úvahy zmeny pridané v predchádzajúcich verziách, jadro Linuxu je možné teraz vytvoriť v Clangu pre architektúru x86_64 (predtým bolo podporované iba pre architektúry arm, aarch64, ppc32, ppc64le a mips.
Bola pridaná podpora pre pokyny ZINZ (Branch Target Indicator) a PAC (Pointer Authentication Code) pre architektúru AArch64. Výrazne vylepšená podpora pre platformy MIPS, RISC-V a PowerPC.
Okrem toho, Projekty Android a ChromeOS už prešli na používanie Clangu na zostavenie jadra a Google testuje Clang ako primárne jadrá na zostavenie platformy pre svoje spustené systémy Linux.
V budúcnosti počas procesu kompilácie jadra bude možné použiť ďalšie komponenty LLVM vrátane LLD, llvm-objcopy, llvm-ar, llvm-nm a llvm-objdump.
Do linkera LLD bola pridaná experimentálna funkcia oddielu, ktorá umožňuje program rozdeliť na viac častí, z ktorých každá je umiestnená v samostatnom súbore ELF. Táto funkcia umožňuje spustiť hlavnú časť programu, ktorá podľa potreby načíta zostávajúce komponenty procesu (napríklad môžete zvoliť vstavaný prehliadač PDF ako samostatný súbor, ktorý sa stiahne iba v prípade, že používateľ otvorí súbor PDF).
Na druhej strane vynikajú aj početné vylepšenia v koncových zariadeniach. pre architektúry X86, AArch64, ARM, SystemZ, MIPS, AMDGPU a PowerPC.
Napríklad pre architektúru AArch2 bola pridaná podpora pokynov SVE64 a MTE (Memory Tagging Extensions), do back-endu ARM bola pridaná podpora pre architektúru Armv8.1-M a architektúru MVE.
V prípade AMDGPU bola pridaná podpora pre architektúru GFX10 (Navi), predvolene je povolené vyvolať funkciu a odovzdať aktivovaný kombinovaný DPP (Data Primitives-Parallel).
Ladiaci program LLDB zaviedol farebné zvýraznenie stôp dozadu; pridaná podpora pre DWARF4 debug_types a DWARF5 debug_info bloky;
Obslužné programy llvm-objcopy a llvm-strip pridali podporu pre spustiteľné súbory a objekty formátu COFF.
Backend pre architektúru RISC-V je stabilizovaný, ktorý už nie je umiestnený ako experimentálny a je zostavený predvolene. Plná podpora pre generovanie kódu pre varianty inštrukčnej sady RV32I a RV64I s rozšíreniami MAFDC.
Fuente: http://releases.llvm.org/