Да, вы правы, пожалуй я смешал unreachable code elimination и dead code elimination
Устранение общих подвыражений уменьшает количество вычислений, но увеличивает количество живых переменных и тем самым давление на регистры. Поэтому если регистров мало, а выражние простое (стоит меньше чем скажем чтение из памяти), то получается CSE может легко повредить и может надо наоборот делать rematerialization в местах использования.
разве? это для простоты в коде представлено так, как у меня, но на деле, во внутреннем представлении (например, SSA) CSE значительно уменьшит использование регистров, а не увеличит
Cпасибо, статья великолепная. Я сам преподаю в университете (аспирант), и меня также смущает использование тех самых «синтетических» примеров, но по другому часто не получается по ряду причин:
1) самая главная — если давать примеры из реальной жизни, просто не хватит времени уместить всё, что требуется, и всё, что хотелось бы.
2) зачастую, приходится преподавать исключительно по рабочим программам, шаг влево, шаг вправо — расстрел.
3) уровень студентов и их нежелание дополнительной самостоятельной подготовки.
В рамках именно этого учебника — не будет, но статьиоб этоместь, и если надо, их переводом тоже займусь. На крайний случай можно обойтись без создания поддержки дополнительной архитектуры в LLVM, а использовать LLVMCBackend.
А какая конкретно архитектура вас интересует?
Продолжение следует…
Ещё 5 частей этого учебника + отдельная статья по оптимизации
затем планирую написать статью по парсингу и кодогенерации LLVM на Python.
Так что устраивайтесь поудобнее ))
Автор прекрасно знает и слышал о yacc/lex/bison и т.п. И никаких таких ограничений в LLVM нет, с LLVM это вобще пока никак не связано… И автор, на секундочку, один из основных разработчиков LLVM.
Дело не в незнании или ограничениях.
Во-первых — это прекрасные уроки, объясняющие как на самом деле работает лексический и синтаксический анализ и что находится внутри тех самых yacc/lex.
Во-вторых, автор хотел полностью сосредоточиться не на сторонних инструментах, а полностью контролировать код, а не заставлять читателя изучать ещё один лишний инструмент вроде antlr, bison, etc.
В-третьих, во введении автор говорит, что учебник построен так, что неинтересные и ненужные вам главы легко можно пропустить, ничего при этот не потеряв.
В-четвёртых, этот код очень даже легко читается.
Зато это красиво )
разве? это для простоты в коде представлено так, как у меня, но на деле, во внутреннем представлении (например, SSA) CSE значительно уменьшит использование регистров, а не увеличит
1) самая главная — если давать примеры из реальной жизни, просто не хватит времени уместить всё, что требуется, и всё, что хотелось бы.
2) зачастую, приходится преподавать исключительно по рабочим программам, шаг влево, шаг вправо — расстрел.
3) уровень студентов и их нежелание дополнительной самостоятельной подготовки.
А какая конкретно архитектура вас интересует?
Ещё 5 частей этого учебника + отдельная статья по оптимизации
затем планирую написать статью по парсингу и кодогенерации LLVM на Python.
Так что устраивайтесь поудобнее ))
Дело не в незнании или ограничениях.
Во-первых — это прекрасные уроки, объясняющие как на самом деле работает лексический и синтаксический анализ и что находится внутри тех самых yacc/lex.
Во-вторых, автор хотел полностью сосредоточиться не на сторонних инструментах, а полностью контролировать код, а не заставлять читателя изучать ещё один лишний инструмент вроде antlr, bison, etc.
В-третьих, во введении автор говорит, что учебник построен так, что неинтересные и ненужные вам главы легко можно пропустить, ничего при этот не потеряв.
В-четвёртых, этот код очень даже легко читается.