LINUX.ORG.RU

История изменений

Исправление geekless, (текущая версия) :

ровно то самое, что записано в исходном синтаксисе for

В исходном синтаксисе for может быть записана любая херня. Вон в Сях туда вообще можно навешивать произвольные выражения. Чтобы из какого-нибудь частного случая for(int i = 0, j = k; i < n; i++, j--) {какая_то_херня(i, j);} вывести induction variable, нужен аппарат анализа, сам по себе аналогичный анализу CFG. Зачем ты этот анализ собрался делать на уровне анализа конструкций ЯП - да хер его знает.

Приводят в CFG, а потом обратно в структурное представление только для того, чтобы на уровне CFG проделать SSA-преобразование. А оно нужно для того, чтобы вычислить induction variable и инкремент, и сделать constant folding (который может привести к изменениям в понимании loop bounds). Только вот в чем прикол - SSA-преобразование можно делать и без CFG. И получается оно быстрее и дешевле, чем на dominator tree.

А потом перед твоим компилятором возникает задача прожевать что-то вроде семантики Сишечки, и всё, soosnuli. Оптимизации должны работать в общем виде, а не в сладких мечтах о правильных AST-ах с правильной семантикой, допускающей только правильные оптимизации.

Исходная версия geekless, :

ровно то самое, что записано в исходном синтаксисе for

В исходном синтаксисе for может быть записана любая херня. Вон в Сях туда вообще можно навешивать произвольные выражения. Чтобы из какого-нибудь частного случая for(int i = 0, j = k; i < n; i++, j--) {какая_то_херня(i, j);} вывести induction variable, нужен аппарат анализа, сам по себе аналогичный анализу CFG. Зачем ты этот анализ собрался делать делать на уровне анализа конструкция ЯП - да хер его знает.

Приводят в CFG, а потом обратно в структурное представление только для того, чтобы на уровне CFG проделать SSA-преобразование. А оно нужно для того, чтобы вычислить induction variable и инкремент, и сделать constant folding (который может привести к изменениям в понимании loop bounds). Только вот в чем прикол - SSA-преобразование можно делать и без CFG. И получается оно быстрее и дешевле, чем на dominator tree.

А потом перед твоим компилятором возникает задача прожевать что-то вроде семантики Сишечки, и всё, soosnuli. Оптимизации должны работать в общем виде, а не в сладких мечтах о правильных AST-ах с правильной семантикой, допускающей только правильные оптимизации.