LLVM 16.0 und es wurde veröffentlicht und das sind seine Neuigkeiten

LLVM-Logo

LLVM ist ein Framework für die Entwicklung von Compilern sowie für die Erstellung neuer Programmiersprachen und die Verbesserung bestehender Sprachen.

Nach etwas mehr als sechs Monaten Entwicklungszeit der Start von die neue Version des Projekts LLVM 16.0, Version, in der eine Vielzahl von Änderungen und Verbesserungen implementiert sind.

Für diejenigen, die mit LLVM nicht vertraut sind, sollten Sie dies wissen ist ein GCC-kompatibler Compiler (Compiler, Optimierer und Codegeneratoren), die Programme in einen RISC-ähnlichen Zwischenbitcode für virtuelle Anweisungen kompilieren (eine virtuelle Maschine auf niedriger Ebene mit einem mehrstufigen Optimierungssystem).

Der generierte Pseudocode kann vom JIT-Compiler direkt während der Programmausführung in Maschinenanweisungen umgewandelt werden.

Wichtige neue Funktionen von LLVM 16.0

In dieser neuen Version, die vorgestellt wird, können wir einige wichtige Verbesserungen finden im Klang 16.0, von denen der standardmäßige C++/ObjC++-Standard hervorsticht, which ist auf gnu++17 eingestellt (früher gnu++14), die impliziert standardmäßige Unterstützung für C++17-Features mit GNU-Erweiterungen. Die Verwendung von im C++17-Standard definierten Elementen ist im LLVM-Code erlaubt.

Eine weitere auffällige Änderung ist, dass sie hinzugefügt wurde Unterstützung für Cortex-A715-, Cortex-X3- und Neoverse-CPUs V2, Armv8.3-Erweiterungen und Multiversionsfunktionen für das AArch64-Backend.
La Plattformkompatibilität Armv2, Armv2A, Armv3 und Armv3M wurden eingestellt im Backend der ARM-Architektur, für die eine korrekte Codegenerierung nicht garantiert wurde. Möglichkeit zum Generieren von Code für Anweisungen zum Arbeiten mit komplexen Zahlen hinzugefügt und hinzugefügt Unterstützung für Architekturen von Befehlssätzen (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT zum X86-Backend.

Außerdem, die Anforderungen für den Aufbau von LLVM wurden erhöht, Auch soll der Build nun kompatibel zum C++17-Standard sein, d.h. der Build benötigt mindestens GCC 7.1, Clang 5.0, Apple Clang 10.0 oder Visual Studio 2019 16.7.

Auf der anderen Seite setzt es auch Akzente verbesserte Backends für MIPS-, PowerPC- und RISC-V-Architekturen, sowie Unterstützung für das Debuggen von ausführbaren 64-Bit-Dateien für die LoongArch-Architektur für den LLDB-Debugger und verbesserte Handhabung von COFF-Debugging-Symbolen.

Von den anderen Änderungen das fällt auf:

  • In der Libc++-Bibliothek konzentrierte sich die Hauptarbeit auf die Implementierung der Unterstützung für neue Funktionen der Standards C++20 und C++23.
  • Die Verbindungszeit wurde im LDD-Linker durch Parallelisierung der Adressenverlagerungsabtastung und der Abschnittsinitialisierungsoperationen erheblich reduziert. Unterstützung für Abschnittskomprimierung mit dem ZSTD-Algorithmus hinzugefügt.
  • Die mit dem C++20-Standard implementierten erweiterten Funktionen werden ebenfalls hervorgehoben.
  • Erfassen Sie strukturierte Links in Lambda-Funktionen.
  • Der Gleichheitsoperator innerhalb von Ausdrücken.
  • Möglichkeit, das Schlüsselwort typename in einigen Kontexten nicht anzugeben,
  • In Klammern hinzugefügte Zulässigkeit der Initialisierung ("Aggr(val1, val2)").
  • Implementierte Funktionen, die im zukünftigen C++2b-Standard definiert sind.
  • Unterstützung mit Typ char8_t,
  • Erweiterter Zeichenbereich für die Verwendung in „\N{…}“,
  • Möglichkeit hinzugefügt, Variablen, die als "statisches constexpr" deklariert sind, in als constexpr deklarierten Funktionen zu verwenden.
  • Implementierte Funktionen, die im zukünftigen C2x C-Standard definiert sind:
  • Unterstützung für das Laden mehrerer Konfigurationsdateien hinzugefügt (Standard-Konfigurationsdateien werden zuerst geladen, dann die über das Flag „–config=“, das jetzt mehrfach angegeben werden kann).
  • Geänderte Ladereihenfolge der Standard-Konfigurationsdateien: Clang versucht, die Datei zuerst zu laden - .cfg und wenn es sie nicht finden kann, versucht es, zwei Dateien zu laden .cfg und .cfg.
  • Ein neues Build-Flag "-fcoro-aligned-allocation" für routinemäßige Frame-ausgerichtete Verteilung hinzugefügt.
  • Das Flag „-fmodule-output“ wurde hinzugefügt, um das einphasige Build-Modell von Standard-C++-Modulen zu aktivieren.
  • Modus „-Rpass-analysis=stack-frame-layout“ hinzugefügt, um Probleme mit dem Stack-Frame-Layout zu diagnostizieren.
  • Ein neues __attribute__((target_version("cpu_features")))-Attribut hinzugefügt und die Funktionalität des __attribute__((target_clones("cpu_features1″,"cpu_features2",…)))-Attributs erweitert, um bestimmte Versionen von Funktionen auszuwählen, die von der CPU AArch64 bereitgestellt werden .
  • Verbesserte Diagnosewerkzeuge:
  • Warnung „-Wsingle-bit-bitfield-constant-conversion“ hinzugefügt, um eine implizite Kürzung abzufangen, wenn eins einem vorzeichenbehafteten Ein-Bit-Bitfeld zugewiesen wird.
  • Erweiterte Diagnose für nicht initialisierte constexpr-Variablen.
  • „-Wcast-function-type-strict“- und „-Wincompatible-function-pointer-types-strict“-Warnungen hinzugefügt, um potenzielle Probleme beim Casting von Funktionstypen zu erkennen.

Schließlich Wenn Sie mehr darüber erfahren möchten, Sie können die Details in der überprüfen folgenden Link


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: AB Internet Networks 2008 SL
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.