Clause
← Уся документація

Перекладено з англійського оригіналу · 06042fa · 2026-10-09 · Читати англійською

Спеціалізація типів

Режим швидкості (-O2) може клонувати функцію у варіанти за представленням, захищені перевірками тегів під час виконання. -O0 і --no-type-specialization створюють лише узагальнений код.

Політика

Пониження

Клонування/спрощення LLVM замінює доведені перевірки всередині клону. Обмежений диспетчер перевіряє кожен обмежений тег і передає контекст та аргументи варіанту або узагальненому тілу; публічний символ і ABI не змінюються. Жодного неперевіреного розпакування, припущень зі специфікацій чи прапорців fast-math не вводиться.

Поточний ефект

Поточна підмножина вихідного коду не має перевірок представлення, які можна усунути, тож реальний вихідний код Erlang отримує нуль варіантів навіть на O2; спеціалізація тотожної функції лише збільшила б код. Цільові фікстури LLVM вставляють повторювані перевірки тегів, щоб перевірити влучання, запасні шляхи та відкат зростання з нативним виконанням.

codegen_measurements записує measurements/<config>/measurements.json у каталог збірки тестів codegen (час компіляції, байти IR/об'єктного коду, варіанти, нативний час). Часи є описовими, ніколи не пороговими значеннями. Зразок для Windows x64 / LLVM 23.1.2 (2026-09-29): вихідне навантаження 232,876 байтів IR / 40,498 байтів об'єктного коду на O0 і 204,408 / 35,886 за обох політик O2, нуль варіантів; синтетична фікстура додала 30 інструкцій до функції з 55 інструкцій для одного прийнятого варіанту.