Size: a a a

Compiler Development

2020 November 13

t

trsfrm2smgen in Compiler Development
Pavel Samolysov
IR selection DAG это Mir? Machine IR, на котором работают machine passes или вы что-то другое имеете ввиду?
IR коряво транслируется в MIR
источник

t

trsfrm2smgen in Compiler Development
trsfrm2smgen
IR коряво транслируется в MIR
Например когда используется векторизация
источник

t

trsfrm2smgen in Compiler Development
trsfrm2smgen
IR коряво транслируется в MIR
это отдельная веселая тема (:
источник

EZ

Eugene Zhulenev in Compiler Development
Есть ли какие либо статьи хорошие про automatic reference counting если есть SSA IR и надо добавить ref inc/dec в нужные места?
источник

MO

Mar Ort in Compiler Development
Eugene Zhulenev
Есть ли какие либо статьи хорошие про automatic reference counting если есть SSA IR и надо добавить ref inc/dec в нужные места?
мм, а как эти вещи связаны? Может быть я чего-то не знаю 🤔
источник

PS

Peter Sovietov in Compiler Development
Mar Ort
мм, а как эти вещи связаны? Может быть я чего-то не знаю 🤔
В случае простого SSA они не связаны, поскольку массивы и прочее — остается за рамками SSA-значений :)
источник

MO

Mar Ort in Compiler Development
Peter Sovietov
В случае простого SSA они не связаны, поскольку массивы и прочее — остается за рамками SSA-значений :)
вот я примерно об этом же, референс каунтинг всё-таки сильно более высокоуровневая абстракция, нежели ssa-форма
источник

PS

Peter Sovietov in Compiler Development
Mar Ort
вот я примерно об этом же, референс каунтинг всё-таки сильно более высокоуровневая абстракция, нежели ssa-форма
Но в SSA-форме легко проследить интервал жизни данных, от def до (last) use. И можно даже придумать радикальный вариант SSA: когда не только def единственное, но и use — тоже.
источник

MO

Mar Ort in Compiler Development
Peter Sovietov
Но в SSA-форме легко проследить интервал жизни данных, от def до (last) use. И можно даже придумать радикальный вариант SSA: когда не только def единственное, но и use — тоже.
да, я понимаю. Такой радикальный вариант кажется в дотнетовском джите как раз используется
источник

PS

Pavel Samolysov in Compiler Development
Peter Sovietov
Это графовый IR, который используется в генераторе кода самого LLVM. Он используется здесь:
https://llvm.org/docs/CodeGenerator.html
Разве после selection DAG не наступает время mir и всех этих machine pass, machine function и machine instruction? Или вы под графовым ir понимаете ту часть, что в selection DAG? Просто не встречал такого термина в доке llvm, графовый IR.
источник

t

trsfrm2smgen in Compiler Development
источник

t

trsfrm2smgen in Compiler Development
источник

t

trsfrm2smgen in Compiler Development
Это материал я откапал по DAG
источник

t

trsfrm2smgen in Compiler Development
И backend
источник

PS

Peter Sovietov in Compiler Development
Pavel Samolysov
Разве после selection DAG не наступает время mir и всех этих machine pass, machine function и machine instruction? Или вы под графовым ir понимаете ту часть, что в selection DAG? Просто не встречал такого термина в доке llvm, графовый IR.
Они обычно пишут просто DAG или, иногда, более конкретно — dependence graph. И довольно очевидно, что это один из видов графовых IR. Там по ссылке ведь есть детальное описание этого IR:
https://llvm.org/docs/CodeGenerator.html#selectiondag
источник

M

MaxGraey in Compiler Development
Peter Sovietov
Они обычно пишут просто DAG или, иногда, более конкретно — dependence graph. И довольно очевидно, что это один из видов графовых IR. Там по ссылке ведь есть детальное описание этого IR:
https://llvm.org/docs/CodeGenerator.html#selectiondag
DAG и dependence graph немного разные вещи, так как последний может иметь цикличности, а вот DAG - нет, это направленный ацикличный граф
источник

PS

Pavel Samolysov in Compiler Development
Peter Sovietov
Они обычно пишут просто DAG или, иногда, более конкретно — dependence graph. И довольно очевидно, что это один из видов графовых IR. Там по ссылке ведь есть детальное описание этого IR:
https://llvm.org/docs/CodeGenerator.html#selectiondag
Понятно, спасибо, наверное невнимательно читал. Помню про lowering на этом этапе, а что какие-то оптимизации делаются не помню.
источник

E

EgorBo in Compiler Development
SelectionDAG это то место где живут всякие оптимизации деления и cmove :)
источник

E

EgorBo in Compiler Development
это к вопросу о какие там пипхолы
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
DAG и dependence graph немного разные вещи, так как последний может иметь цикличности, а вот DAG - нет, это направленный ацикличный граф
В генераторе кода граф зависимостей это как раз DAG и есть. В таком виде он описан у Мучника с Купером и используется на этапах выбора и планирования команд. А какая может быть цикличность здесь и зачем — разве что свести с ума планировщик команд :)
источник