Clause
← Toute la documentation

Traduit de l'original anglais · 06042fa · 2026-10-09 · Lire en anglais

Spécialisation par type

Le mode vitesse (-O2) peut cloner une fonction en variantes de représentation protégées par des vérifications d'étiquette (tag) au runtime. -O0 et --no-type-specialization ne produisent que du code générique.

Politique

Abaissement

Le clonage et la simplification LLVM remplacent les vérifications prouvées à l'intérieur du clone. Un aiguilleur borné teste chaque étiquette contrainte et transmet le contexte et les arguments à une variante ou au corps générique ; le symbole public et l'ABI ne changent pas. Aucun déballage non vérifié, aucune hypothèse tirée des specs ni aucun drapeau fast-math n'est introduit.

Effet actuel

Le sous-ensemble de source actuel ne contient aucune vérification de représentation supprimable, si bien que le vrai code source Erlang ne reçoit aucune variante, même en O2 ; spécialiser une identité ne ferait que grossir le code. Des fixtures LLVM ciblées injectent des vérifications d'étiquette répétées pour exercer les réussites, les replis et l'annulation en cas de croissance avec une exécution native.

codegen_measurements écrit measurements/<config>/measurements.json dans le répertoire de build des tests de codegen (temps de compilation, octets d'IR et d'objet, variantes, temps natif). Les temps sont descriptifs, jamais des seuils. Échantillon Windows x64 / LLVM 23.1.2 (2026-09-29) : charge de travail source de 232 876 octets d'IR / 40 498 octets d'objet en O0 et 204 408 / 35 886 avec les deux politiques O2, aucune variante ; la fixture synthétique a ajouté 30 instructions à une fonction de 55 instructions pour une variante acceptée.