Size: a a a

Compiler Development

2020 November 10

PS

Pavel Samolysov in Compiler Development
Кстати, в llvm цикл надо по-прежнему ротейтить, чтобы loopvectorizer начал работать?
источник

E

EgorBo in Compiler Development
Pavel Samolysov
Кстати, в llvm цикл надо по-прежнему ротейтить, чтобы loopvectorizer начал работать?
канонизировать* :)
источник

E

EgorBo in Compiler Development
ротейт это вроде "а давайте перевернем и посмотрим че будет"
источник

PS

Pavel Samolysov in Compiler Development
Пасс называется loop-rotate вроде
источник

E

EgorBo in Compiler Development
не уверен что оно, это вроде просто фор -> do-while насколько я понимаю.
а канонизация - это loop-simlify и -lcssa
источник

E

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

E

EgorBo in Compiler Development
в моем toy-джите вот такой порядок проходов: `loop-simplify -loop-rotate -licm -simplifycfg -lcssa -loop-idiom -indvars
источник

PS

Pavel Samolysov in Compiler Development
Когда я последний раз экспериментировал loop-simplify и lccsa были не нужны, а без loop-rotate for i = 0; i < 16; i++ не векторизовалось.
источник

PS

Pavel Samolysov in Compiler Development
там даже где-то коммент есть в LoopVectorizer мол не можем вычислить сколько останется в скалярной форме. Но диагностика какая-то невнятная.
источник

E

EgorBo in Compiler Development
clang даже без оптимизаций уже эмитит довольно каноничный вид
источник

PS

Pavel Samolysov in Compiler Development
А с какими оптимизациями? С -02?
источник

E

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

E

EgorBo in Compiler Development
у пассов обычно зависимости, так что они за собой все равно симплифай и лцсса везут :)
источник

PS

Pavel Samolysov in Compiler Development
Понятно, спасибо. Но конкретно в этом примере, если добавить -simplifycfg то немного упрощаются переходы.
источник

PS

Pavel Samolysov in Compiler Development
Вот этот BB4.BB1_crit_edge:  ожидаемо убирается.
источник

E

EgorBo in Compiler Development
ну simplifycfg в принципе самый популярный пасс, он для одной ф-ции в С++ном опте может раз 15 вызваться :D
источник

dt

d t in Compiler Development
K R
ПГО - это, кстати, всего лишь одна траектория исполнения программы? Или там можно нормальное такое Монте-Карло сделать с миллионом треков?
А в чем прикол? Нам ведь нужен "рабочий" профиль, а с Монте-Карло мы получим не пойми что. Например такое PGO считай наугад будет ветки Likely\Unlikely делать.
источник

KR

K R in Compiler Development
d t
А в чем прикол? Нам ведь нужен "рабочий" профиль, а с Монте-Карло мы получим не пойми что. Например такое PGO считай наугад будет ветки Likely\Unlikely делать.
Нет одного рабочего профиля. Это всегда спектр. Иначе клиенту можно просто отдать этот один результат, а программу стереть.

Собственно так с числом Пи в стандартных библиотеках поступают.
источник

dt

d t in Compiler Development
А какой раунд МК ты отдашь клиенту?
источник

KR

K R in Compiler Development
d t
А какой раунд МК ты отдашь клиенту?
Никакой. По разным прогонам нужно считать, какие участки холодные, а какие горячие.
источник