Clause
← All dokumentation

Översatt från det engelska originalet · 06042fa · 2026-10-09 · Läs på engelska

Typspecialisering

Hastighetsläget (-O2) kan klona en funktion till representationsvarianter som skyddas av taggkontroller vid körning. -O0 och --no-type-specialization producerar endast generisk kod.

Policy

Sänkning

LLVM:s kloning/förenkling ersätter bevisade kontroller inuti klonen. En begränsad dispatcher testar varje begränsad tagg och vidarebefordrar kontext och argument till en variant eller den generiska kroppen; den publika symbolen och ABI:t ändras inte. Ingen okontrollerad uppackning (unboxing), inga spec-antaganden och inga fast-math-flaggor införs.

Nuvarande effekt

Den nuvarande källdelmängden har inga borttagbara representationskontroller, så verklig Erlang-källkod får noll varianter även vid O2; att specialisera en identitet skulle bara öka koden. Fokuserade LLVM-fixturer injicerar upprepade taggkontroller för att testa träffar, fallbacks och återställning vid tillväxt med native-exekvering.

codegen_measurements skriver measurements/<config>/measurements.json i byggkatalogen för codegen-testerna (kompileringstid, IR-/objektbytes, varianter, native-tid). Tider är beskrivande, aldrig tröskelvärden. Exempel från Windows x64 / LLVM 23.1.2 (2026-09-29): källarbetslast 232 876 IR- / 40 498 objektbytes vid O0 och 204 408 / 35 886 vid båda O2-policyerna, noll varianter; den syntetiska fixturen lade till 30 instruktioner till en funktion med 55 instruktioner för en accepterad variant.