Clause
← Gesamte Dokumentation

Übersetzt aus dem englischen Original · 06042fa · 2026-10-09 · Auf Englisch lesen

Typspezialisierung

Der Geschwindigkeitsmodus (-O2) darf eine Funktion in Repräsentationsvarianten klonen, die durch Tag-Prüfungen zur Laufzeit geschützt sind. -O0 und --no-type-specialization erzeugen nur generischen Code.

Richtlinie

Lowering

Klonen/Vereinfachen durch LLVM ersetzt bewiesene Prüfungen innerhalb des Klons. Ein begrenzter Dispatcher testet jedes eingeschränkte Tag und leitet Kontext und Argumente an eine Variante oder den generischen Rumpf weiter; das öffentliche Symbol und das ABI ändern sich nicht. Es werden weder ungeprüftes Unboxing noch Annahmen aus Specs noch Fast-Math-Flags eingeführt.

Aktuelle Wirkung

Die derzeitige Quelltext-Teilmenge hat keine entfernbaren Repräsentationsprüfungen, daher erhält echter Erlang-Quelltext selbst bei O2 keine Varianten; eine Identität zu spezialisieren würde nur den Code vergrößern. Gezielte LLVM-Fixtures fügen wiederholte Tag-Prüfungen ein, um Treffer, Fallbacks und das Zurückrollen bei Wachstum mit nativer Ausführung zu erproben.

codegen_measurements schreibt measurements/<config>/measurements.json in das Build-Verzeichnis der Codegen-Tests (Kompilierzeit, IR-/Objektbytes, Varianten, native Laufzeit). Zeiten sind beschreibend, nie Schwellenwerte. Beispiel Windows x64 / LLVM 23.1.2 (2026-09-29): Quelltext-Arbeitslast 232.876 IR- / 40.498 Objektbytes bei O0 und 204.408 / 35.886 bei beiden O2-Richtlinien, keine Varianten; das synthetische Fixture fügte einer Funktion mit 55 Befehlen für eine akzeptierte Variante 30 Befehle hinzu.