Veröffentlichung des LLVM 13.0-Compiler-Sets

Nach sechs Monaten Entwicklungszeit wurde die Veröffentlichung des LLVM 13.0-Projekts vorgestellt – ein GCC-kompatibles Toolkit (Compiler, Optimierer und Codegeneratoren), das Programme in Zwischenbitcode von RISC-Ă€hnlichen virtuellen Anweisungen kompiliert (eine virtuelle Maschine auf niedriger Ebene mit a mehrstufiges Optimierungssystem). Der generierte Pseudocode kann direkt zum Zeitpunkt der ProgrammausfĂŒhrung mit einem JIT-Compiler in Maschinenanweisungen umgewandelt werden.

Verbesserungen in Clang 13.0:

  • UnterstĂŒtzung fĂŒr garantierte Tail-Aufrufe implementiert (Aufruf einer Subroutine ganz am Ende einer Funktion, Bildung einer Tail-Rekursion, wenn sich die Subroutine selbst aufruft). UnterstĂŒtzung fĂŒr garantierte Tail-Aufrufe wird durch das Attribut „[[clang::musttail]]“ in C++ und „__attribute__((musttail))“ in C bereitgestellt, das in einer „return“-Anweisung verwendet wird. Mit dieser Funktion können Sie Optimierungen implementieren, indem Sie Code in einer flachen Iteration bereitstellen, um den Stapelverbrauch zu senken.
  • „using“-Deklarationen und Clang-Erweiterungen bieten UnterstĂŒtzung fĂŒr die Definition von Attributen im C++11-Stil unter Verwendung des „[[]]“-Formats.
  • Das Flag „-Wreserved-identifier“ wurde hinzugefĂŒgt, um eine Warnung anzuzeigen, wenn Sie reservierte Bezeichner im Benutzercode angeben.
  • Die Flags „-Wunused-but-set-parameter“ und „-Wunused-but-set-variable“ wurden hinzugefĂŒgt, um eine Warnung anzuzeigen, wenn ein Parameter oder eine Variable gesetzt, aber nicht verwendet wird.
  • Flag „-Wnull-pointer-subtraction“ hinzugefĂŒgt, um eine Warnung auszugeben, wenn der Code aufgrund der Verwendung eines Nullzeigers in Subtraktionsoperationen zu undefiniertem Verhalten fĂŒhren könnte.
  • Das Flag „-fstack-usage“ wurde hinzugefĂŒgt, um fĂŒr jede Codedatei eine zusĂ€tzliche „.su“-Datei zu generieren, die Informationen ĂŒber die GrĂ¶ĂŸe der Stapelrahmen fĂŒr jede in der verarbeiteten Datei definierte Funktion enthĂ€lt.
  • Dem statischen Analysator wurde ein neuer Ausgabetyp hinzugefĂŒgt – „sarif-html“, der zur gleichzeitigen Generierung von Berichten im HTML- und Sarif-Format fĂŒhrt. Neue allocClassWithName-PrĂŒfung hinzugefĂŒgt. Bei Angabe der Option „-analyzer-display-progress“ wird die Analysezeit jeder Funktion angezeigt. Der Smart-Pointer-Analysator (alpha.cplusplus.SmartPtr) ist fast fertig.
  • Die mit der OpenCL-UnterstĂŒtzung verbundenen Funktionen wurden erweitert. UnterstĂŒtzung fĂŒr neue Erweiterungen cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields und __cl_clang_non_portable_kernel_param_types hinzugefĂŒgt. Die Implementierung der OpenCL 3.0-Spezifikation wurde fortgesetzt. FĂŒr C wird standardmĂ€ĂŸig die OpenCL 1.2-Spezifikation verwendet, sofern nicht explizit eine andere Version ausgewĂ€hlt wird. FĂŒr C++ wurde UnterstĂŒtzung fĂŒr Dateien mit der Erweiterung „.clcpp“ hinzugefĂŒgt.
  • UnterstĂŒtzung fĂŒr Schleifentransformationsanweisungen („#pragma omp unrol“ und „#pragma omp Tile“), die in der OpenMP 5.1-Spezifikation definiert sind, wurde implementiert.
  • Dem Clang-Format-Dienstprogramm wurden Optionen hinzugefĂŒgt: SpacesInLineCommentPrefix zum Definieren der Anzahl der Leerzeichen vor Kommentaren, IndentAccessModifiers, LambdaBodyIndentation und PPIndentWidth zum Steuern der Ausrichtung von EintrĂ€gen, Lambda-AusdrĂŒcken und PrĂ€prozessoranweisungen. Die Möglichkeiten zur Sortierung der AufzĂ€hlung von Header-Dateien (SortIncludes) wurden erweitert. UnterstĂŒtzung fĂŒr die Formatierung von JSON-Dateien hinzugefĂŒgt.
  • Eine große Anzahl neuer Schecks wurde zu Linter Clang-Tidy hinzugefĂŒgt.

Wichtige Neuerungen in LLVM 13.0:

  • Die Option "-ehcontguard" wurde hinzugefĂŒgt, um die CET-Technologie zu nutzen (Windows Control-flow Enforcement Technology) zum Schutz bei der Ausnahmebehandlung vor der AusfĂŒhrung von Exploits, die mithilfe von Return-Oriented Programming (ROP)-Techniken erstellt wurden.
  • Das Projekt „debuginfo-test“ wurde in „cross-project-tests“ umbenannt und dient zum Testen von Komponenten aus verschiedenen Projekten und ist nicht auf Debugging-Informationen beschrĂ€nkt.
  • Das Assemblersystem bietet UnterstĂŒtzung fĂŒr die Erstellung mehrerer Distributionen, beispielsweise eine mit Dienstprogrammen und die andere mit Bibliotheken fĂŒr Entwickler.
  • Im Backend fĂŒr die AArch64-Architektur ist im Assembler die UnterstĂŒtzung der Armv9-A-Erweiterungen RME (Realm Management Extension) und SME (Scalable Matrix Extension) implementiert.
  • Dem Backend fĂŒr die Hexagon-Architektur wurde UnterstĂŒtzung fĂŒr ISA V68/HVX hinzugefĂŒgt.
  • Das x86-Backend bietet eine verbesserte UnterstĂŒtzung fĂŒr AMD Zen 3-Prozessoren.
  • UnterstĂŒtzung fĂŒr GFX1013 RDNA2 APU zum AMDGPU-Backend hinzugefĂŒgt.
  • Libc++ implementiert weiterhin neue Funktionen der C++20- und C++2b-Standards, einschließlich der Fertigstellung der „concepts“-Bibliothek. FĂŒr die Plattform Windows UnterstĂŒtzung fĂŒr std::filesystem basierend auf MinGW hinzugefĂŒgt. Header-Dateien wurden getrennt. , Und Die Build-Option LIBCXX_ENABLE_INCOMPLETE_FEATURES wurde hinzugefĂŒgt, um Header-Dateien mit unvollstĂ€ndiger FunktionalitĂ€t zu deaktivieren.
  • Die FĂ€higkeiten des LLD-Linkers wurden erweitert, indem die UnterstĂŒtzung fĂŒr Big-Endian-Aarch64-Prozessoren implementiert wurde und das Mach-O-Backend in einen Zustand gebracht wurde, der die VerknĂŒpfung regulĂ€rer Programme ermöglicht. Enthaltene Verbesserungen, die zum VerknĂŒpfen von Glibc mithilfe von LLD erforderlich sind.
  • Das Dienstprogramm llvm-mca (Machine Code Analyzer) hat UnterstĂŒtzung fĂŒr Prozessoren hinzugefĂŒgt, die Anweisungen der Reihe nach ausfĂŒhren (superskalare Pipeline in der richtigen Reihenfolge), wie z. B. den ARM Cortex-A55.
  • Der LLDB-Debugger fĂŒr die AArch64-Plattform bietet vollstĂ€ndige UnterstĂŒtzung fĂŒr Zeigerauthentifizierung, MTE (MemTag, Memory Tagging Extension) und SVE-Register. Es wurden Befehle hinzugefĂŒgt, mit denen Sie Tags an jede Speicherzuweisungsoperation binden und beim Zugriff auf den Speicher eine ÜberprĂŒfung des Zeigers organisieren können, der dem richtigen Tag zugeordnet sein muss.
  • Der LLDB-Debugger und das Frontend fĂŒr die Fortran-Sprache – Flang – wurden zu den vom Projekt generierten BinĂ€rassemblys hinzugefĂŒgt.

Source: opennet.ru

Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz und VPS-VDS-Servern đŸ”„ Kaufen Sie zuverlĂ€ssiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server | ProHoster