Size: a a a

Compiler Development

2020 February 27

BD

Berkus Decker in Compiler Development
например для saturated arithmetic
источник

E

EgorBo in Compiler Development
мы просто недавно баг в ллвм нашли с и65 под какой-то армовый таргет :)
источник

BD

Berkus Decker in Compiler Development
прикольно, а в чем баг?
источник

E

EgorBo in Compiler Development
пытаюсь найти, он там какую-то недопустимую инструкцию заэмител
источник

BD

Berkus Decker in Compiler Development
ну все эти i65 по идее должны заловериться до фазы кодогенерации во что-то представимое (machine native)
источник

BD

Berkus Decker in Compiler Development
кто там спрашивал про ELF format, вот тут неплохо объяснено https://fasterthanli.me/blog/2020/whats-in-a-linux-executable/

кто-то интересовался вроде бы тут
источник

BD

Berkus Decker in Compiler Development
Vasiliy Tereshkov
Коллеги, а ELF проще или сложнее PE? В моём компиляторе пока только генерация PE. Формировать файл не слишком большое удовольствие, но и не адски трудная задача.
^^
источник

VT

Vasiliy Tereshkov in Compiler Development
Спасибо! Надеюсь, Rust там не очень страшный.
источник

PS

Peter Sovietov in Compiler Development
Помните вчерашнее обсуждение переписывания термов? Думаете, это скучно и неинтересно? И к компиляторам не относится? Напрасно!

Занимался я своими делами компиляторными сегодня и пришлось снова поиграть с тестовым набором правил алгебраических упрощений после серьезных переделок в моем raddsl.
А набор этот я вытянул из SSA-модуля компилятора Go. И каково же было мое удивление, когда набор этот не справился с совершенно безобидным выражением!
Я проверил результат на настоящем компиляторе Go — ну точно, проблема существует! Пришлось самому доработать правила.

Написал вот сейчас им issue c предложениями правок, хотя вообще Go не пользовался :)
источник

M

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

E

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

E

EgorBo in Compiler Development
самые популярные три это

x+c1==c2 to x==c2-c1
((x+c1)+(y+c2)) to ((x+y)+(c1+c2))
((x+c1)+c2) to (x+(c1+c2))
источник

E

EgorBo in Compiler Development
в го же кстати вроде тоже правила аналогично гцц описаны в DSL
источник

M

MaxGraey in Compiler Development
EgorBo
самые популярные три это

x+c1==c2 to x==c2-c1
((x+c1)+(y+c2)) to ((x+y)+(c1+c2))
((x+c1)+c2) to (x+(c1+c2))
Самое главное - это придумать нормализированную форму для всех выражений и прежде всего делать пред-нормализацию, а уже потом переводить в SSA (или не переводить) и применять правила
источник

E

EgorBo in Compiler Development
ну да, например выносить константы в правый оператор всегда :)
источник

E

EgorBo in Compiler Development
(если это не флоты)
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
Самое главное - это придумать нормализированную форму для всех выражений и прежде всего делать пред-нормализацию, а уже потом переводить в SSA (или не переводить) и применять правила
Да, это важное замечание. В хорошем компиляторе алгебраические упрощения работают на более высоком уровне, нежели 'шапкозакидательские' peepholes :)
источник

M

MaxGraey in Compiler Development
для флоатов там отдельно все
источник

E

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

E

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