Может и имеет, но вся магия, имхо, должна быть наверху
Тут идея в том, что вверху у тебя оптимизации, которые не требуют знания целевой архитектуры, а вот на уровне llvm и т.п. сидят как раз требующие этого знания оптимизации
ну т.е. само собой, что есть оптимизации, где тебе важно высокоуровневое понимание. они делаются в начале конвейера. но есть куча оптимизаций, где тебе наоборот важны детали конкретной реализации - они располагаются в проходах ближе к конце конвейера, когда код уже полупереваренный в не похожую на изначальный язык кашу
Тут идея в том, что вверху у тебя оптимизации, которые не требуют знания целевой архитектуры, а вот на уровне llvm и т.п. сидят как раз требующие этого знания оптимизации
Таким образом самые сложная часть написания компилятора - его бэкенд, можно переиспользовать между разными языками
Тут идея в том, что вверху у тебя оптимизации, которые не требуют знания целевой архитектуры, а вот на уровне llvm и т.п. сидят как раз требующие этого знания оптимизации
Llvm il платформазависимый, поэтому всё равно требует знаний. Это ж не Си(--)
Ну это выравнвание. Накидывает 8 байт, чтобы выровнять под 16. В плюсах оно вроде перед вызовом делается. sub esp 8 call f add esp 8. В gcc по крайней мере.
Ну это выравнвание. Накидывает 8 байт, чтобы выровнять под 16. В плюсах оно вроде перед вызовом делается. sub esp 8 call f add esp 8. В gcc по крайней мере.
Ну я вчера нарыл, что rsp должен быть выровнен по 16