Алгоритм Чейтина для распределения регистров: сколько цветов используется с регистрами R?

В моей лекции о распределении регистров / алгоритме Чейтина кажется, что мы строим граф интерференции, а затем пытаемся найти k-раскраску этого графа, где k = R, если мы можем использовать регистры R в целевой архитектуре. Однако, если мы передаем значение, не будет ли это означать, что нам нужен дополнительный регистр для загрузки значений из памяти перед их использованием в инструкциях и, следовательно, мы можем использовать только значения k = R-1 для алгоритма Чейтина?


person TuBerlinStudent    schedule 16.02.2020    source источник
comment
Что ты пробовал? Не могли бы вы добавить код?   -  person MaartenDev    schedule 16.02.2020
comment
Речь идет о понимании алгоритма в целом, не связанного с каким-либо конкретным кодом. Я не хочу реализовывать алгоритм, а понимаю, как он используется в компиляторах.   -  person TuBerlinStudent    schedule 16.02.2020


Ответы (1)


Вы все еще можете использовать k = R. Когда вы передаете значение, вы добавляете код разлива, который сохраняет и извлекает значение (обычно в стеке, но существуют и другие альтернативы). Это заменит исходный виртуальный регистр с высокой степенью помех с рядом новых виртуальных регистров, которые существуют только в течение короткого времени и (надеюсь) имеют более низкую степень. Теперь вы можете сделать еще одну попытку окраски, и если она все еще не удалась, вы повторяете процесс разлива, пока не добьетесь успеха.

person Johan    schedule 18.02.2020