
LLVM
LLVM ist eine Sammlung von Bausteinen, mit denen man Übersetzungsprogramme für Programmiersprachen baut. Der Kern ist eine Zwischensprache, die zwischen dem geschriebenen Code und dem fertigen Maschinenbefehl steht.
Programme werden von Menschen in Sprachen wie C++, Rust oder Swift geschrieben. Ein Prozessor versteht davon nichts, er kennt nur seine eigenen Maschinenbefehle. Dazwischen steht ein Übersetzungsprogramm, ein sogenannter Compiler. LLVM ist ein Baukasten, aus dem Entwickler solche Übersetzungsprogramme zusammensetzen. Der Name war ursprünglich eine Abkürzung, gilt heute aber einfach als Eigenname des Projekts. LLVM ist quelloffen, das heißt, jeder darf den Programmcode lesen, benutzen und verändern.
Warum fast jede Sprache heute darauf aufsetzt
Früher musste jede Programmiersprache ihre eigene Übersetzung für jede Prozessorart mitbringen. Bei fünf Sprachen und fünf Prozessorarten sind das fünfundzwanzig einzelne Übersetzungswege. Jeder davon muss gepflegt und optimiert werden. Das ist ein enormer Aufwand für kleine Sprachprojekte.
LLVM zerlegt das Problem in zwei Hälften. Die Sprache muss nur noch in die LLVM-Zwischensprache übersetzt werden. Alles danach übernimmt LLVM. Aus fünfundzwanzig Wegen werden so fünf plus fünf, also zehn. Genau deshalb konnten neuere Sprachen wie Rust und Swift so schnell auf vielen Geräten laufen.
Ein zweiter Grund ist die Qualität der Optimierung. LLVM enthält hunderte Verfahren, die Code schneller oder kleiner machen. Diese Arbeit steckt in Jahrzehnten Entwicklung von Apple, Google, Nvidia und vielen anderen. Eine einzelne Sprachgemeinschaft könnte das kaum nachbauen.
Die Zwischensprache als gemeinsame Mitte
Das Herzstück von LLVM ist die Intermediate Representation, kurz IR. Das ist eine künstliche Sprache, die keinem echten Prozessor gehört. Sie sieht aus wie sehr einfacher Maschinencode, ist aber lesbar und überall gleich. Man kann sie sich als Esperanto der Compiler vorstellen: eine neutrale Zwischensprache, in die alle übersetzen und aus der alle weiterübersetzen.
Der Ablauf hat drei Stufen. Vorne steht das Frontend, es liest den Quelltext einer bestimmten Sprache und erzeugt daraus IR. In der Mitte laufen die Optimierungsdurchläufe, sogenannte Passes. Jeder Pass nimmt IR entgegen und gibt verbesserte IR zurück, etwa indem er überflüssige Rechnungen entfernt. Hinten steht das Backend, das aus der IR echte Befehle für einen konkreten Chip erzeugt.
Ein häufiger Irrtum: LLVM ist kein Compiler, sondern das Material dafür. Der bekannteste damit gebaute Compiler heißt Clang und übersetzt C und C++. Wer LLVM sagt, meint oft eigentlich Clang. Ebenfalls verbreitet ist die Verwechslung mit einer virtuellen Maschine, wie sie Java benutzt. LLVM führt Programme aber normalerweise nicht selbst aus, es erzeugt sie nur.
LLVM in Apple-Geräten, Grafikkarten und KI-Frameworks
Jede App auf einem iPhone wurde mit einem Compiler aus dem LLVM-Baukasten gebaut. Apple bezahlt das Projekt seit den frühen 2000er Jahren maßgeblich mit. Auch Android nutzt LLVM-Technik für seine Systemteile. Selbst wer nie programmiert, benutzt täglich Software, die diesen Weg genommen hat.
In der KI-Welt taucht LLVM an einer besonderen Stelle auf. Modelle rechnen auf Grafikkarten, und deren Rechenkerne brauchen ebenfalls Maschinenbefehle. Werkzeuge wie Triton oder Teile von PyTorch erzeugen diesen Code zur Laufzeit und geben ihn an LLVM weiter. Auch MLIR, ein neueres Projekt aus derselben Familie, wird für KI-Chips entwickelt.
In Nachrichten begegnet der Begriff meist indirekt. Wenn eine Firma einen eigenen KI-Chip vorstellt, ist eine der ersten Fragen, ob es dafür ein LLVM-Backend gibt. Ohne das läuft kaum vorhandene Software auf der neuen Hardware. Compiler-Unterstützung entscheidet damit mit darüber, ob ein Chip am Markt eine Chance hat.