Login
Newsletter
Werbung

Do, 24. Mai 2012, 10:24

Software::Entwicklung

LLVM 3.1 freigegeben

Version 3.1 des Compiler-Frameworks LLVM bringt gut ein halbes Jahr nach Version 3.0 zahlreiche Änderungen, die unter anderem schnelleren Code generieren und die Unterstützung von C++11 verbessern sollen.

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 (Low Level Virtual Machine) 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.

In Version 3.1 wurden mehrere große Änderungen vorgenommen. Neu hinzu kamen AddressSanitizer, ein schnelles Werkzeug zum Finden von Speicherfehlern. MachineInstr Bundles gruppieren Maschinenbefehle, die auf dem Zielsystem immer gemeinsam (parallel oder nacheinander) ausgeführt werden müssen, zu einzelnen logischen Instruktionen. ARM-Maschinenbefehle können jetzt direkt assembliert werden. Blöcke von Code werden jetzt anhand ihrer Ausführungswahrscheinlichkeit angeordnet, mutmaßlich um die Zahl der ausgeführten Sprünge zu minimieren.

Ein neuer Datentyp für 16-Bit-Gleitkommazahlen und diverse andere Erweiterungen wurde hinzugefügt. Auch der Optimierer wurde weiter verbessert. Die größten Änderungen in diesem Bereich waren Verbesserungen beim Ausrollen von Schleifen, Automatische Vektorisierung von bestimmten Anweisungsblöcken, und bessere Heuristiken für die Kosten des Inlinens von Funktionen. Ein Teil der Funktionalität von LLVM wurde in das neue Maschinencode-Subsystem ausgelagert. Ferner wurde der Code-Generator in vielen Punkten verbessert.

Clang, der Compiler für C, C++ und Objective C, erhielt erweiterte Unterstützung für C++11, eine neue Tooling-Bibliothek und Literale in Objective C. DragonEgg, ein GCC-Plugin, das LLVM für die Code-Generierung verwendet, unterstützt neben GCC 4.5 und 4.6 teilweise Version 4.7, ARM-Instruktionen und bessere Optimierungen, davon einige speziell für Fortran. Ferner wurde eine neue Bibliothek compiler-rt geschaffen, die hoch optimierte primitive Funktionen enthält. Diese sollen teilweise deutlich schneller als die vergleichbare libgcc sein.

Auf x86-Prozessoren werden jetzt die AVX1- und AVX2-Instruktionen besser unterstützt. Unterstützung für den Hexagon-Prozessor wurde hinzugefügt. Auf der anderen Seite wurde die Unterstützung für Alpha, Blackfin und SystemZ mangels Interesse eingestellt. Neben diesen Änderungen gab es zahlreiche kleine Erweiterungen, Korrekturen und interne API-Änderungen. Weitere Informationen enthalten die Anmerkungen zur Veröffentlichung.

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