Size: a a a

Compiler Development

2020 May 25

M

MaxGraey in Compiler Development
Это сильно зависит от формы IR я так полагаю, для SSA это можно проделывать в пределах базового блока
источник

M

MaxGraey in Compiler Development
Ну вот простой пример замена библиотечных вызовов sinf(angle) и cosf(angle) в один sincosf(angle) можно ли считать peephole на уровне HIR/MIR?
источник

PS

Peter Sovietov in Compiler Development
В учебнике Torczon&Cooper авторы придерживаются классического "оконного" понимания peephole-оптимизации. Сегодня же для многих даже алгебраические упрощения на дереве — тоже peephole-оптимизации. И с этим сложно что-то поделать, потому что авторы выступают на конференциях и пишут в блогах :)
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
Ну вот простой пример замена библиотечных вызовов sinf(angle) и cosf(angle) в один sincosf(angle) можно ли считать peephole на уровне HIR/MIR?
Классический peephole-оптимизатор находится внутри генератора кода и оперирует он машинными _последовательностями_ команд. Если эти sinf/cosf в такой форме представлены — это оно самое и есть.
источник

M

MaxGraey in Compiler Development
Peter Sovietov
Классический peephole-оптимизатор находится внутри генератора кода и оперирует он машинными _последовательностями_ команд. Если эти sinf/cosf в такой форме представлены — это оно самое и есть.
В том то и дело, что сейчас это не представлено уже в виде FPU инструкций а используется библиотечные вызовы, FPU используется разве что только для 32-bit x86 сейчас а для всех остальных SSE / Neon и т д где этих инструкций уже нету
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
В том то и дело, что сейчас это не представлено уже в виде FPU инструкций а используется библиотечные вызовы, FPU используется разве что только для 32-bit x86 сейчас а для всех остальных SSE / Neon и т д где этих инструкций уже нету
А какая разница? Оптимизатор имеет правило [call f, call g] -> [call h]. Это все, что требуется.
источник

M

MaxGraey in Compiler Development
Peter Sovietov
А какая разница? Оптимизатор имеет правило [call f, call g] -> [call h]. Это все, что требуется.
Не получиться. А если они заинлайнились? А если там было два аргумента и один пропал в следствии DAE прохода. Эту оптимизацию нужно делать на более раннем этапе. Кроме того это еще и ускорит кодогенерацию
источник

M

MaxGraey in Compiler Development
Ну и вообще как бы семантически определи что f и g это sin и cos? То есть нужно пробразысать еще какую то метаинформацию
источник

МБ

Михаил Бахтерев... in Compiler Development
А какой смысл собирать sin и cos в sincos до DAE?
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
Не получиться. А если они заинлайнились? А если там было два аргумента и один пропал в следствии DAE прохода. Эту оптимизацию нужно делать на более раннем этапе. Кроме того это еще и ускорит кодогенерацию
Разве речь о том, чтобы какие-то оптимизации не делать? Я просто указываю, что есть нюанс в терминологии.
В самом peephole-оптимизаторе же все просто устроено. Даже обсуждать, в принципе, нечего. Если Вы можете представить свою программу в линейном ассемблерном формате, то можете и описывать на этом уровне peephole-преобразования. А sin/cos это уже детали, Вам виднее, что на что поменять :)
источник

M

MaxGraey in Compiler Development
Ну вот в том же LLVM замена sin/cos -> sincos происходит в специальном проходе (не в InstCombiner), в Go - тоже.
Я лишь хочу сказать, что возможно peephole термин не был размыт, а скорее расширен и обобщен вместе и с расширением и самой архитектуры современного компилятора только и всего
источник

PS

Peter Sovietov in Compiler Development
Ну вот Torczon&Cooper относят это к локальной оптимизации.
источник

PS

Peter Sovietov in Compiler Development
У нас на вики достаточно солидное обновление.

- добавлены все видеолекции курса @Sergey_Sverdlov
- я, наконец, создал заглавную страницу для удобства навигации,
- появилось описание еще одного учебника, за что большое спасибо @alexanius
источник

AT

Alexander Tchitchigi... in Compiler Development
Peter Sovietov
У нас на вики достаточно солидное обновление.

- добавлены все видеолекции курса @Sergey_Sverdlov
- я, наконец, создал заглавную страницу для удобства навигации,
- появилось описание еще одного учебника, за что большое спасибо @alexanius
источник

AZ

Alexander Zaitsev in Compiler Development
Peter Sovietov
У нас на вики достаточно солидное обновление.

- добавлены все видеолекции курса @Sergey_Sverdlov
- я, наконец, создал заглавную страницу для удобства навигации,
- появилось описание еще одного учебника, за что большое спасибо @alexanius
предлагаю также ссылку на репозиторий в закрепленной сообщение поместить. Вместе с обьявлением о наличии Language чата
источник

IK

Ivan Kush in Compiler Development
Alexander Zaitsev
предлагаю также ссылку на репозиторий в закрепленной сообщение поместить. Вместе с обьявлением о наличии Language чата
+1, про Вики пишут, а где она - неизвестно
источник
2020 May 26

PS

Peter Sovietov in Compiler Development
https://www.type-driven.org.uk/edwinb/why-is-idris-2-so-much-faster-than-idris-1.html

Такое ощущение, что Chez становится чем-то в духе LLVM для реализаций функциональных языков.
И вот это любопытно:
One performance problem in Idris 1 was due to space leaks in the Haskell caused by using lazy data structures where they weren't needed. Despite our best efforts, we were never able to resolve these fully.
источник

AG

Alex Gryzlov in Compiler Development
ну вообще схема заявлялась как временный вариант
источник

AG

Alex Gryzlov in Compiler Development
в перспективе он говорил что хочет https://github.com/stedolan/malfunction
источник

AG

Alex Gryzlov in Compiler Development
еще есть вот такие ребята https://github.com/grin-compiler/idris-grin
источник