Das Seminar behandelt die technische Struktur eines LLVM-Backends von der Target-Registrierung bis zur Ausgabe von Maschinencode oder Assembler. Die Themen werden an einem didaktischen Zielsystem erklärt, damit Registermodell, Instruktionsbeschreibung und Codegen-Pipeline transparent nachvollzogen werden können.
Die Dauer von fünf Tagen ist erforderlich, weil Backend-Entwicklung mehrere gekoppelte Teilsysteme umfasst: TargetMachine, TableGen, SelectionDAG oder GlobalISel, Machine IR, Register Allocation, Scheduling, MC-Schicht und Tests. Die Übungen bauen deshalb in kleinen Schritten ein konsistentes Backend-Verständnis auf.
Kapitel 1: Target-Struktur und TableGen-Grundlagen
Inhaltsverzeichnis
- TargetMachine und Subtarget-Modell
- Registerklassen und Instruktionsformate
- TableGen-Dateien strukturieren
Schritt 1: Target registrieren
Die grundlegenden Target-Komponenten werden eingeordnet: TargetInfo, TargetMachine, Subtarget, InstrInfo, RegisterInfo und FrameLowering. Zuständigkeiten und Initialisierungsreihenfolge werden getrennt betrachtet.
Schritt 2: Registermodell beschreiben
Register, Registerklassen, Aliase und Reservierungen werden modelliert. Dabei werden spätere Auswirkungen auf Register Allocation und Calling Convention berücksichtigt.
Schritt 3: Instruktionen formulieren
Instruktionsformate und einzelne Instruktionen werden in TableGen beschrieben. Operanden, Constraints, Assembler-Strings und Pattern werden schrittweise ergänzt.
Kapitel 2: Instruction Selection und Machine IR
Inhaltsverzeichnis
- IR bis Machine IR nachvollziehen
- SelectionDAG und GlobalISel einordnen
- Legalisierung und Pattern Matching
Schritt 1: Codegen-Pipeline verfolgen
Ein kleines LLVM-IR-Beispiel wird durch die Codegen-Pipeline geführt. Die Zwischenstände werden gelesen und die Rolle von Legalization, Combining und Selection wird getrennt betrachtet.
Schritt 2: Selektionsmuster ergänzen
Einfache arithmetische und Speicheroperationen werden auf Zielinstruktionen abgebildet. Nicht unterstützte Operationen werden durch Expansion oder Custom Lowering behandelt.
Schritt 3: Machine IR prüfen
Ausgewählte Machine-Instruktionen werden inspiziert. Def-Use-Beziehungen, virtuelle Register, Basic Blocks und frühe Optimierungen werden analysiert.
Kapitel 3: Register, Stack und Calling Convention
Inhaltsverzeichnis
- Register Allocation vorbereiten
- Frame Lowering und Stack Layout
- Funktionsaufrufe und ABI-Regeln
Schritt 1: Registerdruck analysieren
Virtuelle Register werden bis zur Allokation verfolgt. Spill-Situationen, Kopierinstruktionen und Registerklassen-Konflikte werden anhand kleiner Beispiele ausgewertet.
Schritt 2: Stack-Frame aufbauen
Prolog, Epilog, Stack-Objekte und Frame-Indizes werden betrachtet. Die Implementierung wird mit einfachen Funktionen, lokalen Variablen und Call-Szenarien geprüft.
Schritt 3: Aufrufkonvention definieren
Argumente, Rückgabewerte und Call-Clobbered-Register werden beschrieben. Danach wird überprüft, ob erzeugter Code konsistent mit den ABI-Annahmen bleibt.
Kapitel 4: Assembler, MC-Schicht und Tests
Inhaltsverzeichnis
- Assembler-Ausgabe und Disassembler-Grundlagen
- MCInstrInfo und Kodierung
- lit-Tests und FileCheck-Strategien
Schritt 1: Assembler-Ausgabe erzeugen
Instruktionen werden in lesbare Assemblerform gebracht. Formatierungsregeln, Operandenreihenfolge und symbolische Referenzen werden abgestimmt.
Schritt 2: Kodierung nachvollziehen
Die MC-Schicht wird als Brücke zwischen Instruktionsmodell und Objektcode eingeordnet. Kodierungsfelder werden geprüft und mit erwarteten Bytefolgen verglichen.
Schritt 3: Regressionstests aufbauen
Tests werden für IR-zu-Assembler, Machine IR und negative Fälle strukturiert. FileCheck-Muster werden so geschrieben, dass sie robust gegen irrelevante Änderungen bleiben.
Fachbereichsleitung / Trainerleitung / Ansprechpartner
-

Lucas Beich
Telefon: + 49 (221) 74740055
E-Mail: lucas.beich@seminar-experts.de -

Paul Goldschmidt
Telefon: + 49 (221) 74740055
E-Mail: paul.goldschmidt@seminar-experts.de
Seminardetails
| Dauer: | 5 Tage ca. 6 h/Tag, Beginn 1. Tag: 10:00 Uhr, weitere Tage 09:00 Uhr |
| Preis: |
Öffentlich oder Live Stream: € 2.995 zzgl. MwSt. Inhaus: € 8.500 zzgl. MwSt. |
| Teilnehmeranzahl: | min. 2 - max. 8 |
| Teilnehmerkreis: | Compiler-Entwicklung, Embedded-Teams, Prozessor- und Plattformentwicklung, Toolchain-Verantwortliche |
| Voraussetzungen: | Gute C++-Kenntnisse, Verständnis von Assembler, ABI-Grundlagen und Compiler-Zwischendarstellungen |
| Standorte: | Live-Online, Firmenstandort, Schulungszentrum |
| Unterlagen: | Seminarunterlagen, Übungen, Beispielprojekte |
Seminartermine
Die Ergebnissliste kann durch Anklicken der Überschrift neu sortiert werden.
