Efter seks måneders udvikling lanceringen af den nye version af LLVM 9.0-projektet blev præsenteret, som er et GCC-kompatibelt værktøjssæt (kompilatorer, optimeringsprogrammer og kodegeneratorer), som kompilerer programmer til en RISC-lignende virtuel instruktionsmellembitkode (en virtuel maskine på lavt niveau med et optimeringssystem på flere niveauer).
Det er designet til at optimere kompileringstiden., linktiden, udførelsestiden i et hvilket som helst programmeringssprog, som brugeren ønsker at definere. Oprindeligt implementeret til at kompilere C og C++, det sprogagnostiske design af LLVM og projektets succes har affødt en bred vifte af sprog, herunder Objective-C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL, Clang, Rust, Gambas og andre.
Den genererede pseudokode kan konverteres ved hjælp af JIT-kompileren til maskininstruktioner direkte på programudførelsestidspunktet.
Vigtigste nye funktioner i LLVM 9.0
Blandt de nye funktioner i LLVM 9.0 understøttelse af fjernelse af det eksperimentelle udviklingsmærke fra RISC-V-platformen er fundet, C++ understøttelse af OpenCL.
Endnu en nyhed skiller sig ud er evnen til at opdele programmet i dynamisk indlæste dele i LLD og implementeringen af "asm goto"-konstruktionen brugt i Linux-kernekoden.
Derudover bemærkes det også, at Libc++ kom med understøttelse af WASI (WebAssembly System Interface), og LLD introducerede indledende understøttelse af WebAssembly dynamisk binding. Tilføjet implementering af det GCC-specifikke udtryk "asm goto", som giver dig mulighed for at skifte fra en samlet inline-blok til en etiket i C-kode.
Denne funktion er påkrævet for at bygge Linux-kernen i "CONFIG_JUMP_LABEL="-tilstand og bruge Clang på x86_64-systemer. I betragtning af de ændringer, der er tilføjet i tidligere udgivelser, kan Linux-kernen nu bygges i Clang til x86_64-arkitektur (tidligere kun understøttet for arm, aarch64, ppc32, ppc64le og mips-arkitekturer.
Tilføjet understøttelse af BTI-instruktioner (Branch Target Indicator) og PAC (Pointer Authentication Code) for AArch64-arkitekturen. Markant forbedret understøttelse af MIPS, RISC-V og PowerPC platforme.
Derudover Android- og ChromeOS-projekter er allerede skiftet til at bruge Clang til at bygge kernen og Google tester Clang som en primær kernebyggeplatform til sine kørende Linux-systemer.
I fremtiden under kernekompileringsprocessen vil det være muligt at bruge andre komponenter LLVM, herunder LLD, llvm-objcopy, llvm-ar, llvm-nm og llvm-objdump.
En eksperimentel partitioneringsfunktion er blevet tilføjet til LLD-linkeren, som gør det muligt at opdele et program i flere dele, som hver er placeret i en separat ELF-fil. Denne funktion giver dig mulighed for at køre hoveddelen af programmet, som efter behov indlæser de resterende komponenter i processen (du kan f.eks. vælge den indbyggede PDF-fremviser som en separat fil, som kun downloades, når brugeren åbner filen PDF).
På den anden side skiller de talrige forbedringer i backends sig også ud. til X86, AArch64, ARM, SystemZ, MIPS, AMDGPU og PowerPC arkitekturer.
For eksempel er understøttelse af SVE2-instruktioner og MTE (Memory Tagging Extensions) blevet tilføjet til AArch64-arkitekturen, understøttelse af Armv8.1-M-arkitekturen, og MVE-arkitekturen er blevet tilføjet til ARM-backend.
I tilfælde af AMDGPU blev understøttelse af GFX10-arkitekturen tilføjet (Navi), standarden er aktiveret til at kalde en funktion og videregive den kombinerede DPP (Data Primitives-Parallel) aktiveret.
LLDB-debuggeren introducerede farvefremhævning af baglæns spor; tilføjet understøttelse af DWARF4 debug_types og DWARF5 debug_info blokke;
Hjælpeprogrammerne llvm-objcopy og llvm-strip har tilføjet understøttelse af objekter og eksekverbare filer i COFF-format.
Backend for RISC-V-arkitekturens arkitektur er stabiliseret, som ikke længere er placeret som eksperimentel og er bygget som standard. Fuld understøttelse af kodegenerering til RV32I og RV64I instruktionssætvarianter med MAFDC-udvidelser.
kilde: http://releases.llvm.org/