Size: a a a

Compiler Development

2020 February 27

E

EgorBo in Compiler Development
IR дерево 😊
источник

E

EgorBo in Compiler Development
$103 — это SSA Value Numbering
источник

PK

Peter K in Compiler Development
Ребят, извините за оффтоп. Читаю вас так как начал пытаться погружаться в тему.

Вопрос давно мучает и я его все-там задам -- где вы все работаете? :) Что за наукоёмкие сферы деятельности, где ваши глубокие знания востребованы?
источник

M

MaxGraey in Compiler Development
MaxGraey
Самое главное - это придумать нормализированную форму для всех выражений и прежде всего делать пред-нормализацию, а уже потом переводить в SSA (или не переводить) и применять правила
типичный пример:
имеется a_i32 > 6 && a_i32 <= 10
псводим все к каноническому виду:
a_i32 > 6 && a_i32 < 11
дальше:
> (a_i32 > 6) & (a_i32 < 11)
> unsigned(a_i32 - 6) < unsigned(11 - 6)

unsigned(a_i32 - 6) < 5
источник

E

EgorBo in Compiler Development
MaxGraey
типичный пример:
имеется a_i32 > 6 && a_i32 <= 10
псводим все к каноническому виду:
a_i32 > 6 && a_i32 < 11
дальше:
> (a_i32 > 6) & (a_i32 < 11)
> unsigned(a_i32 - 6) < unsigned(11 - 6)

unsigned(a_i32 - 6) < 5
о я это совсем недавно делал в джите нашем.
но выражения в которых затронуты логические операторы слишком сложны, я бы не стал их называть пипхолами, т.к. это уже не в пределах одного бейсик-блока
источник

M

MaxGraey in Compiler Development
ну да это уже не совсем пипхол
источник

PS

Peter Sovietov in Compiler Development
То есть тоже не посчиталось, как и в Go. Что за беда-то какая! Или друг у друга все одни и те же правила берут? :) Радует, что хоть gcc/clang прилично себя ведут!
источник

M

MaxGraey in Compiler Development
В AS

export function foo(x: i32, y: i32, z: i32, abc: i32): i32 {
 return (((((1000 - x) + y) - z) - 10) + abc) - 42;
}
источник

E

EgorBo in Compiler Development
Peter Sovietov
То есть тоже не посчиталось, как и в Go. Что за беда-то какая! Или друг у друга все одни и те же правила берут? :) Радует, что хоть gcc/clang прилично себя ведут!
я могу это правило добавить в течении 10 минут, вопрос нужно ли.

Го хвалят за скорость компиляции, можэет быть потому что там нет всего этого? :)
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
В AS

export function foo(x: i32, y: i32, z: i32, abc: i32): i32 {
 return (((((1000 - x) + y) - z) - 10) + abc) - 42;
}
Молодцы :)
источник

PS

Peter Sovietov in Compiler Development
EgorBo
я могу это правило добавить в течении 10 минут, вопрос нужно ли.

Го хвалят за скорость компиляции, можэет быть потому что там нет всего этого? :)
Это ведь просто приведение "подобных" констант — чтобы их эффективно свернуть. Тут легко найти полный набор правил — нам нужно просто поднимать константы ближе к корню дерева выражения.
источник

PS

Peter Sovietov in Compiler Development
Для Go там добавится всего 2-3 правила :)
источник

E

EgorBo in Compiler Development
я понимаю, у нас собсно и есть некоторые набор правил, по которым константы двигаются ближе к друг другу и другими правилами фолдятся
источник

E

EgorBo in Compiler Development
просто на это выражение нету :)
источник

M

MaxGraey in Compiler Development
Все это заняло 6 мс. Если -O1 конечно поставить.
и 16 ms если с "-O3"
источник

E

EgorBo in Compiler Development
если я добавлю это правило, запущу так называемый "Jit-diff" который пройдет по стандартному набору библиотек и не найдет ни одного паттерна — мой пр отправят в отстойник
источник

M

MaxGraey in Compiler Development
У нас обчно парсинг занимает дольше чем оптимизация)
источник

AZ

Alexander Zaitsev in Compiler Development
EgorBo
если я добавлю это правило, запущу так называемый "Jit-diff" который пройдет по стандартному набору библиотек и не найдет ни одного паттерна — мой пр отправят в отстойник
Такая себе логика, если честно
источник

M

MaxGraey in Compiler Development
EgorBo
если я добавлю это правило, запущу так называемый "Jit-diff" который пройдет по стандартному набору библиотек и не найдет ни одного паттерна — мой пр отправят в отстойник
Жесть. А ты добавляй вместе с PR сразу и боевой пример
источник

AZ

Alexander Zaitsev in Compiler Development
MaxGraey
Жесть. А ты добавляй вместе с PR сразу и боевой пример
Сначала в либу коммитишь, а потом в jit
источник