Login
Newsletter
Werbung

Di, 14. März 2017, 09:12

Software::Entwicklung

LLVM 4.0 freigegeben

Version 4.0 des Compiler-Frameworks LLVM bringt viele Verbesserungen, unter anderem bei der Code-Optimierung während des Linkens, der Code-Generierung, den Fehlermeldungen, der Kompatibilität mit GCC und bei OpenCL.

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. Es wird zur Zeit für Forschungen im Bereich von Compilern, Architekturen, Sicherheit und Betriebssysteme verwendet.

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 4.0 erscheint sechs Monate nach LLVM 3.9 mit vielen neuen Funktionen und Verbesserungen. Ab dieser Version wird LLVM ein neues Versionsnummernschema nutzen und die Unterversionsnummer immer bei 0 belassen. In sechs Monaten wird somit LLVM 5.0.0 erscheinen. Versionen mit Fehlerkorrekturen erscheinen nach Bedarf mit den Nummern 4.0.x.

In LLVM 4.0.0 selbst wurden einige veraltete Funktionen entfernt. Virtuelle (indirekte) Funktionsaufrufe werden nun innerhalb von Schleifen durch direkte ersetzt, wenn möglich, was eine Möglichkeit für effizienteren Code eröffnet. Die Erkennung und Entfernung von ungenutztem Code wurde erweitert. Das Programm llvm-cov kann neben HTML jetzt auch JSON ausgeben. ThinLTO, ein globaler Optimierungsschritt während des Linkens, der weniger Speicher benötigt als herkömmliches LTO, kann nun Daten von Profiler-Läufen zur Steuerung der Optimierung verwenden. ThinLTO mit eingeschalteter Debug-Info wurde stark beschleunigt. Auch die Code-Generierung für verschiedene Prozessorfamilien wurde erweitert und verbessert. So wird bereits die neue AMD-Generation Ryzen unterstützt.

In experimenteller Form kam eine Implementation von Coroutinen hinzu. Neu hinzu kam auch die Unterstützung für die Aufrufkonvention _regcall. Diese Konvention wurde von Intel eingeführt, um möglichst viele Funktionsargumente in Registern zu übergeben. Eine weitgehende Neuimplementation erfuhr die Infrastruktur für »Intrusive Listen«.

Der C/C++-Compiler Clang kennt nun das Attribut diagnose_if, um eine Warnung oder einen Fehler auszugeben, wenn ein Funktionsaufruf bestimmte Bedingungen erfüllt. Die neue Option -Og dient dazu, trotz Erzeugung von Debug-Informationen zu optimieren, und entspricht momentan genau -g -O1. Die Option -MJ gibt Informationen über die Compilierung als JSON aus.

Bei OpenCL gab es neben Korrekturen kleine Änderungen in einigen Erweiterungen. Die statische Code-Analyse wurde um mehrere neue Tests erweitert und unterstützt Code, der gtest nutzt, besser. Zahlreiche Verbesserungen gab es auch im Extraprogramm clang-tidy. Der Linker LLD wurde stärker mit dem GNU-Linker kompatibel gemacht. So ist er jetzt in der Lage, für das gesamte FreeBSD-System und den Kernel das Linken zu übernehmen. Außerdem wurde LLD beschleunigt, wenn es mehrere Threads nutzen kann, und soll dabei bis zu 50 Prozent schneller sein als LLD 3.9.

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

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung