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
