HeadlinesBriefing HeadlinesBriefing.com

L'alisateur d'enregistrements amélioré de Rat réduit les lignes et produit un meilleur code

Hacker News •
×

7 octobre 2026 — rat est un backend de compilateur petit avec un frontend C99 semi-fonctionnel, utilise un générateur de code x86-64 qui mappe les registres virtuels (vregs) vers des registres physiques ou des slots de pile. L'ancien alisateur de scan linéaire a grandi à 1392 lignes, ce qui a motivé une réécriture de l'alisateur de bin packing par priorité en seulement 584 lignes. Cet alisateur parcourt les plages de vie par importance et place chacun dans le premier registre approprié, similaire à l'alisateur greedy de LLVM mais plus simple.

Une valeur est vivante de son écriture à sa dernière lecture ; deux valeurs partagent un registre seulement lorsqu'elles ne sont jamais vivantes simultanément. Lorsque trop de valeurs sont vivantes, certaines sont spillées vers la mémoire. La convention d'appel exige de préserver les registres callee-saved (rbx rbp r12-r15) tandis que les registres caller-saved peuvent être clobbered.

Comme montré, la fonction h garde y vivant à travers un appel sans logique explicite d'alisateur pour le placement callee-saved. L'alisateur exécute cinq étapes : plages de vie, registres fixes, coalescing, choix de registres, et spill. Chaque bundle garde son registre ou slot de pile pour toute sa durée de vie, jamais d'éviction ou de division de plages.

Source: Hacker News · Résumé par HeadlinesBriefing