rat: распределитель регистров на 584 строки, который обходит LLVM по качеству кода

Rat's Register Allocator

Автор компиляторного бэкенда rat заменил линейный сканер (1392 строки) на распределитель регистров методом приоритетной упаковки в 584 строки. Он обходит живые диапазоны по важности и кладёт каждый в первый подходящий регистр. Это родственник жадного распределителя LLVM, но без большинства сложных частей. Результат — лучший код: пять из шести копий исчезают, а значения, живущие через вызов, автоматически попадают в callee-saved регистры, хотя в коде распределителя об этом не сказано.

Ни одна строка в распределителе не говорит «кладите значения, пересекающие вызов, в callee-saved регистры». Это следует из дизайна, и это моя любимая часть.

Ещё за этот день

2026-10-11