Информация об изменениях

Сообщение Re: Генерация машинного кода в компиляторах от 17.05.2023 10:57

Изменено 17.05.2023 12:24 koenjihyakkei

Re: Генерация машинного кода в компиляторах
Здравствуйте, VVVa, Вы писали:

VVV>кстати довольно много приходится писать ...


Ну вручную заниматься распределением регистров довольно неблагодарное занятие. Как тут уже писалось, задача Register Allocation это NP-полная задача.

Есть два популярных алгоритма регалока: Linear Scan и Graph Coloring. Первый очень прост в реализации, но второй более эффективен.

Для копирования из памяти в память в любом случае нужен регистр. В твоем случае ты под это выделил отдельный scratch регистр,
но тогда он изымается из свободных регистров, соответственно давление на регистры увеличивается, становится больше спиллов(освобождение регистров через их сохранение в память).

Я бы посоветовал генерировать сначала LLVM IR и потом скормить его LLVM llc тулзе для генерации машинного кода.
Re: Генерация машинного кода в компиляторах
Здравствуйте, VVVa, Вы писали:

VVV>кстати довольно много приходится писать ...


Ну вручную заниматься распределением регистров довольно неблагодарное занятие. Как тут уже писалось, задача Register Allocation это NP-полная задача.

Есть два популярных алгоритма регалока: Linear Scan и Graph Coloring. Первый прост в реализации и быстрее в работе, но второй более эффективен.

Для копирования из памяти в память в любом случае нужен регистр. В твоем случае ты под это выделил отдельный scratch регистр,
но тогда он изымается из свободных регистров, соответственно давление на регистры увеличивается, становится больше спиллов(освобождение регистров через их сохранение в память).

Я бы посоветовал генерировать сначала LLVM IR файл и потом скармливать его LLVM llc тулзе для генерации машинного кода.