HeadlinesBriefing HeadlinesBriefing.com

Nuevo asignador de registers de rat reduce líneas y genera mejor código

Hacker News •
×

7 de octubre de 2026 — rat, un pequeño backend de compilador con un frontend C99 semifuncional, utiliza un generador de código x86-64 que mapea registers virtuales (vregs) a registers físicos o slots de pila. El antiguo asignador de escaneo lineal creció hasta 1392 líneas, lo que motivó una reescritura del asignador de empaquetamiento con prioridad en solo 584 líneas. Este nuevo asignador recorre los rangos vivos por importancia y coloca cada uno en el primer register adecuado, similar al asignador greedy de LLVM pero más simple.

Un valor es vivo desde su escritura hasta su última lectura; dos valores comparten un register solo cuando nunca están vivos simultáneamente. Cuando hay demasiados valores vivos, algunos se derraman a la memoria. La convención de llamadas requiere preservar registers callee-saved (rbx rbp r12-r15) mientras que los registers caller-saved pueden ser clobbered.

Como se muestra, la función mantiene y vivo a través de una llamada sin lógica explícita del asignador para la colocación de registers callee-saved. El asignador ejecuta cinco pasos: rangos vivos, registers fijos, coalescing, selección de registers y derramamiento. Cada bundle mantiene su register o slot de pila por toda su vida, nunca expulsando o dividiendo rangos.

Fuente: Hacker News · Resumido por HeadlinesBriefing