Сообщение 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 тулзе для генерации машинного кода.
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 тулзе для генерации машинного кода.
VVV>кстати довольно много приходится писать ...
Ну вручную заниматься распределением регистров довольно неблагодарное занятие. Как тут уже писалось, задача Register Allocation это NP-полная задача.
Есть два популярных алгоритма регалока: Linear Scan и Graph Coloring. Первый прост в реализации и быстрее в работе, но второй более эффективен.
Для копирования из памяти в память в любом случае нужен регистр. В твоем случае ты под это выделил отдельный scratch регистр,
но тогда он изымается из свободных регистров, соответственно давление на регистры увеличивается, становится больше спиллов(освобождение регистров через их сохранение в память).
Я бы посоветовал генерировать сначала LLVM IR файл и потом скармливать его LLVM llc тулзе для генерации машинного кода.