rat kompiliert C99 mit einem 584-Zeilen-Register-Allocator effizienter als mit 1392 Zeilen
Rat's Register Allocator
rat, ein kleiner Compiler-Backend mit halb funktionierendem C99-Frontend, hat seinen linear-scan-Register-Allocator durch einen Priority-Bin-Packing-Allocator ersetzt. Der neue Allocator ist mit 584 Zeilen deutlich kürzer als der alte mit 1392 Zeilen und erzeugt besseren Code. Er teilt Live-Ranges in Segmente auf, führt Coalescing durch und weist Register nach Priorität zu – ohne Eviction, Splitting oder wiederholte Durchläufe.
Kein Code im Allocator sagt: »Lege Werte, die einen Call überleben, in callee-saved Register.« Das ergibt sich aus dem Design, und das ist mein Lieblingsteil.