11. Генерация кода
Байт код
Простой набор инструкций
Может интерпретироваться напрямую
Бит код
Бинарноепредставлениеграфавыполнения
Не предназначен для интерпретации
15. Генерация кода
LLVM IR
Блок – набор инструкций без переходов
SSA – single statement assignment
Базовый набор инструкций
“интринсики” для дополнительных
инструкций
Аннотация кода мета данными
16. Проблема регистров
Ограниченное число
Неравноценность
регистров
Ограничение
конвенции вызовов
Дорогое сохранение /
восстановление регистров
20. Генерация кода
LLVM IR – общий язык
для алгоритмов оптимизации
loop unrolling
autovectorization
global variable numbering
constant folding
…
22. Экосистема LLVM
Лицензия в стиле BSD
CLang – C/C++ компилятор
LLVM JIT
IR интерпретатор / Интеграция с окружением (переменные и п.р.)
VMKit
Различныекоммерческиепроекты
XCode / MacOS OpenGL / Компиляторы Intel
23. LLVM не …
LLVM не реализует
Управление памятью / сборку мусора
“Динамическую” оптимизацию кода
но LLVM поддерживает
Работу с картами стека (stack maps)
Маркировку GC корней
Вставку GC барьеров в IR
24. LLVM и JIT
Интерпретатор IR
Линковка JIT кода с родительским
процессом
Качественная статическая оптимизация
Для трассирующих компиляторов
Трассы можно записывать в IR
25. LLVM
Compile once, generate code anywhere
Компилятор производит IR на выходе
Код распространяется в виде IR
Генерация машинного кода в процессе
инсталляции / загрузки
Apple XCode, NativeCL, Android ART