Open Source im professionellen Einsatz

Mit LLVM 5.0.0 beherrscht Clang C++17

08.09.2017

Das Compiler-Infrastruktur-Projekt LLVM hat die Version 5.0.0 erreicht. Während Clang nun C++17 und die Coroutines TS vollständig unterstützt, bringt LLVM Verbesserungen für die verschiedenen Targets und neue Tools sowie Bibliotheken.

590

Eine der neuen Bibliotheken heißt Binary-Format. Es handelt sich laut Ankündigung um eine Codesammlung die zuvor in Support steckte und die neben der "file_magic"-Structure und "identify_magic"-Funktionen, Struktur- und Typdefinitionen für die Formate Dwarf, Elf, Coff, Wasm und Macho mitbringt. Ebenfalls neu ist "llvm-dlltool", das aus GNU Style Definition Files kurze Import-Bibliotheken erzeugt. Ein weiteres Tool heißt "opt-viewer.py" und soll die Yaml-generierten Optimierungsanmerkungen in HTML hervorheben.

"WeakVH" wurde in "WeakTrackingVH" umbenannt und ein neues "WeakVH" eingeführt. Dabei handelt es sich um ein Value Handle, das sich selbst auf Null setzt, sobald der Wert gelöscht wird, auf den es verweist. Auch umbenannt wurde "llvm-pdbdump". Das heißt jetzt "llvm-pdbutil" und dient zum Untersuchen und Ändern von Program Database (PDB), einem Format von Microsoft.

Targets aktualisiert

Für das AArch64-Target unterstützt LLVM nun ARMv8.1-, -8.2- und -8.3-Instruktionen. Es gibt neue Scheduler-Informationen für ThunderX2, den 64-Bit-ARMv8-Prozessor von Cavium. Stark verbessert wurde der Umgang mit Global Instruction Selection für nicht-optimierte Builds. Letztere spielen auch beim ARM-Target eine Rolle. Hier sind sie immer noch kaputt, wurden aber im Entwicklungszyklus ein wenig besser gemacht. Es gibt Updates für die Scheduling-Modelle, was einen neuen Schedule für Cortex-A57 einschließt. Der Debugger LLDB bringt Hardware-Breakpoint-Support mit. Zudem haben die Entwickler den Umgang mit Assembler-Fehlermeldungen verbessert: Es gibt jetzt Fehlerkorrekturen und Vorschläge, um Probleme zu beheben.

Für x86-Targets bringt LLVM ersten Support für AMD Ryzen Scheduler mit sowie Instruktionen für AMD Lightweight Profiling. LLVM 5.0.0 unterstützt Intel Goldmont CPUs und verbessert die Scheduler für Silvermont, Sandybridge und Jaguar.

Am Ende erwähnt die Ankündigung noch externe Open-Source-Projekte, die LLVM nutzen. Dazu gehört die noch junge Programmiersprache Zig, die sich eng an C orientiert, das sie gern ablösen würde. Eine Beta der Sprache soll noch im September erscheinen. Auch LDC, der LLVM-basierte D-Compiler verwendet den Referenz-Compiler als Frontend und kombiniert ihm mit LLVM als Backened, um "effizienten, nativen Code zu erzeugen".

Clang kann C++17

Auch in Sachen Clang, dem Compiler-Frontend für (Objective) C und C++, gibt es Bewegung. Der unterstützt nun C++17 komplett (über "-std=c++17") und kennt nun die Coroutinen TS. Die Entwickler haben daneben die Diagnosemöglichkeiten ausgebaut, Clang mit "--autocomplete" eine neue Compilerflag zur Shell Autocompletion beschert und doe Flags "-fslp-vectorize-aggressive" und "fno-slp-vectorize-aggressive" entfernt.

Für C liefert Clang nun Support dafür, einen Skalar- implizit in einen Vektorwert zu konvertieren. Der GCC-kompatible "clang++" wird wohl zum letzten Mal per Default "-std=gnu++98" verwenden. Zudem finden sich nun eine ganze Reihe weiterer C++-Konstrukte und -Keywords in der Codevervollständigung. Für Open CL gibt es neue Funktionen, zugleich haben die Entwickler die Open-CL-Dokumentation im Clang-Benutzerhandbuch ergänzt.

Lld und Polly

Bleiben noch der flotte Linker Lld und Polly, die Infrastruktur zur Optimierung von Speicherzugriffen der Anwendungen. Während Lld zahlreiche ELF-Verbesserungen in Sachen Kompatibilität mitbringt, Bugs behebt und neue Optionen einführt, kann Polly nun das komplette Android kompilieren, beziehungsweise vor allem die damit einhergehenden Robustheits-Tests verwenden. Zudem kompiliert Polly 5.0 Ffmpeg, kann Julia-Workloads an die GPU schicken und LLVMs Optimization-Diagnostic-Info-API verwenden, um diagnostische Anmerkungen zu erzeugen.

Wer LLVM aus den Quellen kompilieren möchte, wird im Subversion-Repository des Projekts fündig. Auf der Download-Seite warten aber auch vorkompilierte Binaries und Dokumentation.

Ähnliche Artikel

  • LLVM 3.8 rangiert viele Funktionen aus

    Die LLVM Compiler Infrastructure ist in Version 3.8 erschienen. Sie verabschiedet sich von alten Windows-Versionen, tauscht Autoconf gegen Cmake ein und rangiert verschiedene C-API-Funktionen aus. Für die Plattformen gibt es ebenfalls zahlreiche Änderungen.

  • LLVM erreicht Version 3.4

    Ein größerer Release von LLVM ist erschienen. Version 3.4 bringt eine einige neue Features mit, kündigt Chris Lattner auf der Announce-Mailingliste an.

  • LLVM 3.9 bringt Optimierungen

    Die Entwickler der LLVM-Compiler-Infrastruktur (Low Level Virtual Machine) haben mit der nun veröffentlichten Version 3.9 unter anderem an der Zusammenarbeit des Frameworks mit GCC und OpenCL gearbeitet.

  • LLVM-Compiler 2.8 mit ISO-Standards

    In Version 2.8 implementiert das LLVM-Compiler-Framework die ISO-1998- und -2003-Standards für C++.

  • LLVM 3.5 ist verfügbar

    Die Entwickler der LLVM-Compiler-Infrastruktur (Low Level Virtual Machine) haben Version 3.5 in die freie Wildbahn entlassen, die Änderungen für verschiedene Plattformen an Bord hat, darunter ARM und MIPS.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.