Clause
← Toda la documentación

Traducido del original en inglés · 06042fa · 2026-10-09 · Leer en inglés

Especialización por tipos

El modo de velocidad (-O2) puede clonar una función en variantes de representación protegidas por comprobaciones de etiqueta en tiempo de ejecución. -O0 y --no-type-specialization producen solo código genérico.

Política

Lowering

La clonación/simplificación de LLVM sustituye las comprobaciones demostradas dentro del clon. Un despachador acotado prueba cada etiqueta restringida y reenvía el contexto y los argumentos a una variante o al cuerpo genérico; el símbolo público y la ABI no cambian. No se introducen desempaquetados sin comprobación, suposiciones basadas en specs ni flags de fast-math.

Efecto actual

El subconjunto de código fuente actual no tiene comprobaciones de representación eliminables, por lo que el código fuente Erlang real recibe cero variantes incluso en O2; especializar una identidad solo haría crecer el código. Fixtures específicos de LLVM inyectan comprobaciones de etiqueta repetidas para ejercitar aciertos, respaldos y la reversión por crecimiento con ejecución nativa.

codegen_measurements escribe measurements/<config>/measurements.json en el directorio de compilación de las pruebas de codegen (tiempo de compilación, bytes de IR/objeto, variantes, tiempo nativo). Los tiempos son descriptivos, nunca umbrales. Muestra de Windows x64 / LLVM 23.1.2 (2026-09-29): la carga de trabajo de código fuente produce 232,876 bytes de IR / 40,498 bytes de objeto en O0 y 204,408 / 35,886 con ambas políticas de O2, cero variantes; el fixture sintético añadió 30 instrucciones a una función de 55 instrucciones para una variante aceptada.