Login
Newsletter
Werbung

Do, 20. September 2018, 12:19

Software::Entwicklung

LLVM 7.0 freigegeben

Version 7.0 des Compiler-Frameworks LLVM, das unter anderem den C/C++-Compiler Clang enthält, bringt viele Verbesserungen, unter anderem bei der Code-Generierung und Optimierung.

llvm.org

Das LLVM-Team an der University of Illinois in Urbana-Champaign bezeichnet LLVM als eine Compilier-Strategie für effektive Optimierung, einen virtuellen Befehlssatz und eine Compiler-Infrastruktur, die auch für Forschungen im Bereich von Compilern, Architekturen, Sicherheit und Betriebssystemen verwendet wird.

LLVM definiert einen virtuellen Befehlssatz, der an RISC-Maschinen angelehnt ist, aber reichhaltige Typinformation und Datenfluss-Information zur Verfügung stellt. Dies ermöglicht zum einen ausgefeilte Transformationen des Objektcodes, andererseits kann die Information an das ausführbare Programm angehängt werden. Dies erlaubt weitere Transformationen während des Linkens, zur Laufzeit und an der ausführbaren Datei selbst, während das Programm nicht läuft.

LLVM 7.0 erscheint sechs Monate nach LLVM 6.0 mit vielen neuen Funktionen und Verbesserungen. Eine Änderung, die Einfluss auf diverse externe Bibliotheken hat, ist die Änderung der Versionsnummern der Bibliotheken auf 7 statt 7.0. Das Programm llvm-exegesis kam hinzu, das die Eigenschaften des Instruktions-Scheduling misst, insbesondere Latenzen und Anzahl der Mikrooperationen, und es ermöglicht, die Scheduling-Modelle zu ändern. Neu ist auch ein weiteres Werkzeug llvm-mca, das die Geschwindigkeit des generierten Codes für eine spezifische CPU voraussagen soll.

Infolge einer verbesserten Optimierung von Gleitkomma-Typumwandlungen kann es für Anwendungen, die Konstrukte nutzen, deren genaues Verhalten im C-Standard undefiniert ist, zu Überraschungen kommen. Problematisch sollen dabei nur Typumwandlungen sein, die zu einem Überlauf führen.

Das Makro DEBUG wurde durch LLVM_DEBUG ersetzt. Dies macht eine Änderung in allen Programmen nötig, die es verwenden. Es wird empfohlen, nicht DEBUG erneut zu definieren, sondern alle Codestellen in den Programmen zu ändern.

UBsan, X-Ray-Instrumentation und libFuzzer (x86 und x86_64) werden jetzt rudimentär auch unter OpenBSD unterstützt. MSan (x86_64), X-Ray und libFuzzer (x86 und x86_64) wurden nun auch für FreeBSD implementiert. Der Speicherbedarf der Klasse SmallVector wurde verringert, wer noch weniger Speicher opfern will, kann TinyPtrVector verwenden, was aber nicht immer möglich ist. Das Format DWARF v5 für Debugging-Information wird jetzt teilweise unterstützt. Just-in-Time-compilierter Code kann nun auch mit perf analysiert werden.

Bei der MIPS-Architektur werden jetzt auch die Virtualisierungsinstruktionen, der microMIPSR6-Befehlssatz und viele weitere Instruktionen unterstützt. Die Instruktions-Scheduler wurden erweitert. Zusätzlich wurden zahlreiche weitere Verbesserungen vorgenommen. Auch bei PowerPC gab es viele Verbesserungen an den Instruktions-Schedulern. Ähnlich war es auch bei SystemZ, das zusätzlich Unterstützung für Vektor-Register in Inline-Assembler und neue Aufrufkonventionen erhielt.

Der Download von LLVM 7.0.0 mit allen zugehörigen Werkzeugen ist von der Projektseite möglich. Es werden Quellcode-Pakete, Binärpakete und umfassende Dokumentation bereitgestellt.

Werbung
Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung