Clause
← Toda a documentação

Traduzido do original em inglês · 06042fa · 2026-10-09 · Ler em inglês

Especialização de tipos

O modo de velocidade (-O2) pode clonar uma função em variantes de representação protegidas por verificações de etiqueta em tempo de execução. -O0 e --no-type-specialization produzem apenas código genérico.

Política

Rebaixamento (lowering)

A clonagem/simplificação do LLVM substitui as verificações provadas dentro do clone. Um despachante limitado testa cada etiqueta restringida e encaminha o contexto e os argumentos para uma variante ou para o corpo genérico; o símbolo público e a ABI não mudam. Não são introduzidos unboxing não verificado, pressupostos de specs nem flags de fast-math.

Efeito atual

O subconjunto atual do código-fonte não tem verificações de representação removíveis, pelo que o código-fonte Erlang real recebe zero variantes, mesmo em O2; especializar uma identidade apenas aumentaria o código. Fixtures LLVM dedicadas injetam verificações de etiqueta repetidas para exercitar acertos, recursos e a reversão de crescimento com execução nativa.

codegen_measurements escreve measurements/<config>/measurements.json no diretório de compilação dos testes de codegen (tempo de compilação, bytes de IR/objeto, variantes, tempo nativo). Os tempos são descritivos, nunca limiares. Amostra Windows x64 / LLVM 23.1.2 (2026-09-29): carga de trabalho de código-fonte com 232 876 bytes de IR / 40 498 bytes de objeto em O0 e 204 408 / 35 886 em ambas as políticas O2, zero variantes; a fixture sintética acrescentou 30 instruções a uma função de 55 instruções para uma variante aceite.