Size: a a a

Compiler Development

2021 June 24

AT

Alexander Tchitchigi... in Compiler Development
Я вот в этом не уверен...
источник

K

Kir in Compiler Development
Ну, мне так кажется
источник

AT

Alexander Tchitchigi... in Compiler Development
Для чисто стековой машины без прямого доступа к ячейкам приходится делать много shuffling туда-обратно. Даже если положить в регистры — будет много бессмысленного xchg между решистрами.
источник

К

Константин in Compiler Development
Ну ок, не регистры, а локальные на стеке.
Как тогда kill вообще возможен и смысл какой в нем
источник

МБ

Михаил Бахтерев... in Compiler Development
Говорим оптимизатору, что значение больше не нужно. Снижает время работы алгоритмов оптимизации
источник

К

Константин in Compiler Development
все равно он тут же в него засаживает.
Причем далеко не всегда есть килы, в основном они не генерятся.
И так 20 раз
источник

МБ

Михаил Бахтерев... in Compiler Development
Ну. Понял, что не нужен и засадил. Нормальная логика. Надо смотреть на код, который генерирует это всё.

Генераторы и оптимизаторы редко могут сформировать идеальный код. Анализ обычно приближённый.
источник

МБ

Михаил Бахтерев... in Compiler Development
Или, может, кусок логики не дописан
источник

к

кана in Compiler Development
в beam есть опкод, который ощищает N верхних позиций в стеке (верхних в смысле ниже головы стека, если стек растет условно вниз). Я так понимаю сделано это для того, чтобы не хранить указатель на фрейм, то есть скомпилированный код, который саллцировал Н локальных переменных, должен при выходе их обратно деаллоцировать вручную
источник

К

Константин in Compiler Development
формально, я вижу избыточную  инструкцию и в так кривом байткоде (as3 компилятор вообще не оптимизирующий), причем kill имеет размер ~2 байта, (инструкция 32 бита  + индекс, который 30 битов)

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

К

Константин in Compiler Development
Кстати.
@GabrielFallen
Это как вообще.
источник

К

Константин in Compiler Development
Он типа не смог столько локальных сделать?
источник

AT

Alexander Tchitchigi... in Compiler Development
Мне-то почём знать — я во флеше не разбираюсь.
источник

К

Константин in Compiler Development
Ну кароче вывод - флеш машина как была УГ, так и есть.
Нечего там удивляться.
Она валится на стековерфлоу при 5 локальных переменных которые не используются.
Смотрите что он сгенерил и даже оптимизатор это не проверил:
источник

К

Константин in Compiler Development
источник

K

Kir in Compiler Development
Можно делать push/pop в режиме логического переименования, например
источник

AT

Alexander Tchitchigi... in Compiler Development
Слишком много bookkeeping получится — оверхед съест все преимущества от того чтобы держать стек в регистрах.
источник

IJ

Igor 🐱 Jirkov in Compiler Development
Да, нл на уровне компилятора, кажется, можно просто ввести виртуальные регистры и произвольно менять их отображение на стек. Тогда многие операции по смыслу связанные с тасованием данных будут в рантайме бесплатными
источник

AT

Alexander Tchitchigi... in Compiler Development
Но зачем делать решистровую машину внутри компилятора, если можно просто сделать регистровую машину? Тем более, если уж всё равно делать компилятор с распределением регистров?
источник

МБ

Михаил Бахтерев... in Compiler Development
Чтобы была простая референсная petite-реализация интерпретатора.
источник