Etter seks måneders utvikling lanseringen av den nye versjonen av LLVM 9.0-prosjektet ble presentert, som er en GCC-kompatibel verktøysett (kompilatorer, optimaliserere og kodegeneratorer), som kompilerer programmer til en mellomliggende bitkode av RISC-lignende virtuelle instruksjoner (en virtuell maskin på lavt nivå med et optimaliseringssystem på flere nivåer).
Den er designet for å optimalisere kompileringstid, bindingstiden, utførelsestiden i ethvert programmeringsspråk som brukeren vil definere. Opprinnelig implementert for å kompilere C og C ++, LLVMs språkagnostiske design og prosjektsuksess har skapt et bredt utvalg av språk, inkludert Objective-C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL, Clang, Rust, Gambas og andre.
Den genererte pseudokoden kan konverteres ved hjelp av JIT-kompilatoren til maskininstruksjoner direkte på tidspunktet for programutførelsen.
Viktigste nye funksjoner i LLVM 9.0
Blant de nye funksjonene i LLVM 9.0 finn støtte for å fjerne eksperimentell utviklingsbrikke fra RISC-V-plattformen, C ++ støtte for OpenCL.
Nok en nyhet det skiller seg ut er muligheten til å dele programmet inn i dynamisk lastede deler i LLD og implementeringen av »asm goto» -konstruksjonen som brukes i Linux-kjernekoden.
I tillegg er det også fremhevet at Libc ++ kom med støtte for WASI (WebAssembly System Interface), og LLD introduserte innledende støtte for WebAssembly dynamisk binding. Lagt til implementeringen av det GCC-spesifikke uttrykket »asm goto», som lar deg bytte fra en samlet innebygd blokk til en tag i C-kode.
Denne funksjonen er nødvendig for å bygge Linux-kjernen i »CONFIG_JUMP_LABEL = y« -modus ved bruk av Clang på x86_64-systemer. Med tanke på endringene som er lagt til i tidligere versjoner, kan Linux-kjernen nå bygges i Clang for x86_64-arkitekturen (tidligere ble den bare støttet for arm-, aarch64-, ppc32-, ppc64le- og mips-arkitekturer.
Støtte for BTI-instruksjoner er lagt til (Branch Target Indicator) og PAC (Pointer Authentication Code) for AArch64-arkitektur. Betydelig forbedret støtte for MIPS-, RISC-V- og PowerPC-plattformer.
Videre Android- og ChromeOS-prosjekter har allerede byttet til å bruke Clang til å bygge kjernen og Google tester Clang som de viktigste byggeplattformkjernene for sine kjørende Linux-systemer.
I fremtiden, under kjernesammensetningsprosessen vil det være mulig å bruke andre komponenter LLVM, inkludert LLD, llvm-objcopy, llvm-ar, llvm-nm og llvm-objdump.
En eksperimentell partisjonsfunksjon er lagt til LLD-linkeren, som gjør det mulig å dele et program i flere deler, som hver er plassert i en egen ELF-fil. Denne funksjonen lar deg kjøre hoveddelen av programmet, som etter behov vil laste de resterende komponentene i prosessen (for eksempel kan du velge den innebygde PDF-visningen som en egen fil, som bare lastes ned når brukeren åpner filen PDF).
På den annen side skiller de mange forbedringene i backendene seg også ut for X86-, AArch64-, ARM-, SystemZ-, MIPS-, AMDGPU- og PowerPC-arkitekturer.
For eksempel er støtte for SVE2 og MTE (Memory Tagging Extensions) -instruksjonene lagt til for AArch64-arkitekturen, støtte for Armv8.1-M-arkitekturen og MVE-arkitekturen er lagt til ARM-backend.
I tilfelle AMDGPU ble støtte for GFX10-arkitekturen lagt til (Navi), er standard aktivert for å påkalle en funksjon og passere den aktiverte kombinerte DPP (Data Primitives-Parallel).
LLDB-feilsøkingsprogrammet introduserte fargevalg av spor bakover; lagt til støtte for DWARF4 debug_types og DWARF5 debug_info blokker;
Verktøyene llvm-objcopy og llvm-strip har lagt til støtte for kjørbare filer og objekter i COFF-format.
Bakenden for RISC-V-arkitekturen er stabilisert, som ikke lenger er posisjonert som eksperimentell og er bygget som standard. Full støtte for kodegenerering for RV32I og RV64I instruksjonsvarianter med MAFDC-utvidelser.
Fuente: http://releases.llvm.org/