Size: a a a

Compiler Development

2021 January 04

IP

Iaroslav Postovalov in Compiler Development
Антон ⚙️
Так, так, а почему в Julia зря затащили LLVM?
минуту запускается
источник

BD

Berkus Decker in Compiler Development
Arelav
А так можно?
вполне
источник

DP

Defragmented Panda in Compiler Development
Berkus Decker
указатель на стек меняют ровно 4 операции - push, pop, call и ret
я имею ввиду более высокоуровневые операции, не опкоды.

та же математика типа 3+3*6... использует push/pop
источник

BD

Berkus Decker in Compiler Development
Defragmented Panda
я имею ввиду более высокоуровневые операции, не опкоды.

та же математика типа 3+3*6... использует push/pop
что то в школе мне не предлагали решать этот пример с помощью push/pop
источник

DP

Defragmented Panda in Compiler Development
Berkus Decker
что то в школе мне не предлагали решать этот пример с помощью push/pop
как тебе предлагали решать ситуации где регистров не хватает на хранение промежуточных результатов вычисления?
источник

BD

Berkus Decker in Compiler Development
Defragmented Panda
как тебе предлагали решать ситуации где регистров не хватает на хранение промежуточных результатов вычисления?
через register spilling
источник

BD

Berkus Decker in Compiler Development
ты знаешь что регистры можно сохранять в память и оттуда загружать обратно?
источник

DP

Defragmented Panda in Compiler Development
знаю. но описать это в виде алгоритма это уже сложнее )
источник

BD

Berkus Decker in Compiler Development
Defragmented Panda
знаю. но описать это в виде алгоритма это уже сложнее )
для этого есть уже готовые алгоритмы, вы зря игнорируете предложение @GabrielFallen про них почитать
источник

DP

Defragmented Panda in Compiler Development
Berkus Decker
для этого есть уже готовые алгоритмы, вы зря игнорируете предложение @GabrielFallen про них почитать
я не против почитать. если есть более точное указание чем просто "книга Х" или вообще "книги" )
источник

AT

Alexander Tchitchigi... in Compiler Development
Defragmented Panda
я не против почитать. если есть более точное указание чем просто "книга Х" или вообще "книги" )
https://t.me/CompilerDev/75351 Висит в закрепе чата.
Telegram
PLComp in Compiler Development
Популярный алгоритм распределения регистров линейным сканированием (Linear Scan Register Allocation, 1999) определен на живых интервалах (live intervals) и линейном списке инструкций. Построение и хранение списка интервалов в виде пар индексов инструкций занимает время и память, поэтому исследователи продолжали искать возможность не строить явно список интервалов.

Авторы Efficient Global Register Allocation (2020) предложили алгоритм из того же семейства, но определенный на графе потока исполнения (control flow graph). Ключевые идеи здесь две:

1. Список живых интервалов здесь отслеживаются неявно, на каждом из базовых блоков и инструкций внутри блоков.

2. Проход по отдельным инструкциям позволяет не только не строить в явном виде интервалы, но и высвобождать временно регистры внутри блоков, что решает проблему "пустот в живости" (liveness holes).

Алгоритм сравним по производительности порожденного кода с актуальными реализациями линейного сканирования, немного выигрывая в ресурсах на этапе компиляции. Из…
источник

PS

Peter Sovietov in Compiler Development
Напомню, что существуют еще и memory-машины. Характерный пример — Inferno Dis.
источник

BD

Berkus Decker in Compiler Development
Defragmented Panda
я не против почитать. если есть более точное указание чем просто "книга Х" или вообще "книги" )
Стандартный мой ответ - учиться гуглить. Это умеение пригодится и в других случаях. Термины для поиска мы выдали уже несколько раз.
источник

PS

Peter Sovietov in Compiler Development
К слову сказать, для существующих регистровых VM тоже spilling используется далеко не всегда. В частности, в случае Lua VM в процессе трансляции просто проверяется, не превысило ли число слотов стека (виртуальных регистров) максимального значения, равного 255. Вместо тяжеловесной процедуры выгрузки регистров в память выдается соответствующее сообщение об ошибке пользователю.
"256 регистров хватит всем!" :)
источник

PS

Peter Sovietov in Compiler Development
Кстати, вопрос для начинающих компиляторщиков на понимание.

Вот выдержки из кода проекта интерпретатора Lua.

/* maximum number of local variables per function (must be smaller
  than 250, due to the bytecode format) */
#define MAXVARS     200

/* Maximum number of registers in a Lua function (must fit in 8 bits) */
#define MAXREGS     255

Как бы вы объяснили тот факт, что MAXVARS и MAXREGS не равны друг другу?
источник

AS

Aleksey Shipilev in Compiler Development
Не все типы аргументов влазят в один регистр?
источник

PS

Peter Sovietov in Compiler Development
Aleksey Shipilev
Не все типы аргументов влазят в один регистр?
Нет, у них там очень "широкие" регистры — определены через union :)
источник

AT

Alexander Tchitchigi... in Compiler Development
Peter Sovietov
Кстати, вопрос для начинающих компиляторщиков на понимание.

Вот выдержки из кода проекта интерпретатора Lua.

/* maximum number of local variables per function (must be smaller
  than 250, due to the bytecode format) */
#define MAXVARS     200

/* Maximum number of registers in a Lua function (must fit in 8 bits) */
#define MAXREGS     255

Как бы вы объяснили тот факт, что MAXVARS и MAXREGS не равны друг другу?
Остальные зарезервированы под аргументы функции?
источник

PS

Pavel Samolysov in Compiler Development
Какие-то регистры зарезервированы? Типа ах под возвращаемое значение
источник

PS

Pavel Samolysov in Compiler Development
Опередили...
источник