/Compilerinfrastruktur: LLVM 5.0 stellt neue Werkzeuge bereit

Compilerinfrastruktur: LLVM 5.0 stellt neue Werkzeuge bereit


Eine Reihe neuer Tools, einige strukturelle Umschichtungen und Aktualisierungen in den Targets machen die fünfte Hauptversion der Compiler-Unterbau-Architektur aus. Außerdem haben die Entwickler ein wenig aufgeräumt.

Mit ein wenig Verspätung steht nun die fünfte Hauptversion des Compilerinfrastrukturprojekts LLVM mit einer Reihe neuer Tools zum Download bereit. Darunter fallen unter anderem llvm-dlltool, mit dem sich Short Import Libraries im Stil der GNU-Definitionsdateien erstellen lassen und opt-viewer.py, das die von Clang erstellten YAML-Dateien bearbeitet und Optimierungsbemerkungen visualisiert. Einige der zuvor in Support untergebrachten Codeanteile sind nach dem Update in der BinaryFormat-Bibliothek untergekommen, darunter beispielsweise die file_magic-Struktur, die identify_magic-Funktionen und einige Struktur- und Typdefinitionen.

Um besser erkennen zu können, das der Zweck von llvm-pdbdump über das Abladen von Inhalten hinausgeht, haben die Entwickler das Tool in llvm-pdbutil umbenannt. Einen neuen Namen hat auch WeakVH bekommen: es ist nun als WeakTrackingVH zu finden. Allerdings steht ein neues WeakVH zur Verfügung, dass sich beim Löschen selbst auf Null setzt und keine Werte beim Einsatz von RAUW (Replaye all uses with) nachverfolgt. Bestimmte Arten des Nichtdeterminismus in ungeordneten Containern soll das neue CMake-Makro LLVM_REVERSE_ITERATION aufdecken.

In der Immediate Representation kann der Datalayout-String jetzt einen Adressraum für den Zeigertyp von alloca angeben, statt des Standardwerts 0. Und das speculatable-Attribut zeichnet Funktionen aus, die keine Seiteneffekte haben, die Call Hoists verhindern. Außerdem haben die Entwickler die LLVMAddBBVectorizePass-Schnittstelle als veraltet (deprecated) gekennzeichnet, da BBVectorize entfernt wurde und LLVMAddSLPVectorizePass als SLP Vectorizer zur Verfügung steht.

Darüber hinaus gab es auch bei den meisten Targets einige Neuerungen, die in den Release Notes nachzulesen sind. So wurde das ARM-Target etwa mit einer neuen Assemblerfehlerbehandlung ausgestattet, die Rechtschreibkorrekturen und Vorschläge zum Beheben von Fehlern umfasst. Das MIPS-Target kann direkt mit Vektortypen für Argumente und Rückgabewerte umgehen. Es wurde außerdem mit grundlegendem Support für das Generieren von microMIPS-Code über Funktionsattribute und Maßnahmen zur Codeumfangsreduktion für microMIPS ausgestattet. Das PowerPC-Target ist neben einigen Verbesserungen beim Umgang mit bestimmten Elementen mit einer Implementierung optimaler Codesequenzen versehen, während das X86-Target nun unter anderem den AMD-Ryzen-Scheduler und AMD Lightweight Profiling Instructions kennt und in der Lage ist, CMOV (Conditional Move) in Branches umzuwandeln, sollte es sich anbieten.


(jul)