LLVM 11.0 arriveert met update naar Python 3, verbeteringen voor RISC-V en meer

LLVM

Na zes maanden ontwikkeling de lancering van de nieuwe editie van het LLVM 11.0-project is gepresenteerd waarin verschillende verbeteringen worden gepresenteerd, zoals de update naar Python 3, patches ter ondersteuning van experimentele instructies in RISC-V en vele andere wijzigingen.

Degenen die niet bekend zijn met LLVM, moeten weten wat het is een GCC-compatibele toolkit (compilers, optimizers en codegeneratoren) die programma's compileert in RISC-achtige bit-code tussenliggende virtuele instructies (low-level virtuele machine met een multi-level optimalisatiesysteem).

Het is ontworpen om de compilatietijd te optimaliseren, de bindingstijd, de uitvoeringstijd in elke programmeertaal die de gebruiker wil definiëren​ Oorspronkelijk geïmplementeerd om C en C ++ te compileren, Het taalonafhankelijke ontwerp van LLVM en het projectsucces ze hebben een grote verscheidenheid aan talen voortgebracht.

De gegenereerde pseudocode kan met behulp van de JIT-compiler direct tijdens de programma-uitvoering in machine-instructies worden omgezet.

Belangrijke nieuwe kenmerken van LLVM 11.0

In deze nieuwe versie van LLVM 11.0 het build-systeem is verplaatst om Python 3 te gebruikenAls zodanig wordt het gebruik van Python 3 niet geforceerd, want in het geval dat het niet beschikbaar is, wordt de rollback-optie geïmplementeerd om Python 2 te gebruiken.

Attribuut vector-functie-abi-variant is toegevoegd naar tussenvertegenwoordiging (IR) om de mapping tussen scalaire en vectorfuncties te beschrijven voor vectorisatieoproepen. Twee afzonderlijke vectortypes, llvm :: FixedVectorType en llvm :: ScalableVectorType, worden geëxtraheerd uit llvm :: VectorType.

Ongedefinieerd gedrag is op ondef gebaseerde vertakking en het doorgeven van ongedefinieerde waarden naar standaard bibliotheekfuncties.

In memset / memcpy / memmove is het toegestaan ​​om ongedefinieerde pointers door te geven, maar als de parameter met de grootte gelijk is aan nul.

LLJIT voegt ondersteuning toe voor statische initialisaties via de methoden LLJIT :: initialize en LLJIT :: deinitialize.

Toegevoegd het mogelijkheid om statische bibliotheken toe te voegen aan JITDylib met behulp van de klasse StaticLibraryDefinitionGenerator. C API toegevoegd voor ORCv2 (API voor het maken van JIT-compilers).

Wat betreft het verbeteren van de ondersteuning voor de verschillende processorarchitecturen:

  • Toegevoegd ondersteuning voor Cortex-A34, Cortex-A77, Cortex-A78 en Cortex-X1 processors aan de achterkant van de AArch64-architectuur. De uitbreidingen ARMv8.2-BF16 (BFloat16) en ARMv8.6-A zijn geïmplementeerd, waaronder RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Bewaakt virtualisatie) en ARMv8.0-DGH (hint voor gegevensverzameling).
  • Ondersteuning toegevoegd voor Cortex-M55-, Cortex-A77-, Cortex-A78- en Cortex-X1-processors op de ARM-backend. Implementeerde de Armv8.6-A Matrix Multiply en RMv8.2-AA32BF16 BFloat16 extensies.
  • Ondersteuning toegevoegd voor het genereren van code voor POWER10-processors in de PowerPC-backend. Verbeterde lusoptimalisaties en verbeterde ondersteuning voor drijvende-kommabewerkingen.
  • De architectuur-backend RISC-V kan patches met ondersteuning ontvangen voor experimentele uitgebreide instructiesets die nog niet officieel zijn goedgekeurd.

Daarnaast de mogelijkheid om code voor bindende functies te genereren wordt geboden geïntegreerd in vector SVE-instructies.

De backend voor de AVR-architectuur is verplaatst van de experimentele categorie naar de stabiele die in de basisdistributie zijn opgenomen.

De x86-backend ondersteunt Intel AMX- en TSXLDTRK-instructies. Extra bescherming tegen LVI-aanvallen (Load Value Injection) en het algemene Speculative Execution Side Effects Suppression-mechanisme werd ook geïmplementeerd om aanvallen te blokkeren die worden veroorzaakt door speculatieve uitvoering van bewerkingen op de CPU.

Van de andere veranderingen die opvallen:

  • De backend voor de SystemZ-architectuur voegt ondersteuning toe voor MemorySanitizer en LeakSanitizer.
  • Libc ++ voegt ondersteuning toe voor het header-bestand met wiskundige constante ​
  • Uitgebreide mogelijkheden van de LLD-linker.
  • Verbeterde ELF-ondersteuning, inclusief toegevoegde opties "–lto-emit-asm", "–lto-whole-program-visible", "–print-archive-stats", "–shuffle-section", "–thinlto-single -module "," –Uniek "," –rosegment "," –threads = N ".
  • "–Time-trace" -optie toegevoegd om trace in bestand op te slaan, dat vervolgens kan worden geparseerd via de chrome: // trace-interface in Chrome.
  • Een interface met een Go (llgo) -compiler is verwijderd uit de release en kan in de toekomst opnieuw worden gestructureerd.

Eindelijk als je er meer over wilt weten over deze nieuwe versie kunt u kijken de details in de volgende link.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: AB Internet Networks 2008 SL
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.