レジスタ割り当てを1392行から584行に削減、ratの新しいアロケータが生成するコードはむしろ良くなった

Rat's Register Allocator

コンパイラバックエンドratの作者が、長年使ってきた線形スキャン方式のレジスタアロケータ(1392行)を、優先度付きビンパッキング方式(584行)に書き換えた。ライブレンジを重要度順に処理し、空いているレジスタに割り当てる。LLVMのgreedyアロケータと同じ系統だが、難しい部分は省いた。その結果、コードサイズは半分以下になり、生成されるコードの品質も向上。呼び出しをまたぐ値が自動的にcallee-savedレジスタに割り当てられるなど、設計の妙が光る。

アロケータのコードには「呼び出しをまたぐ値はcallee-savedレジスタに置け」と書いてあるわけではない。それは設計から自然に導かれる。これが私のお気に入りの部分だ。

この日のほかの記事

2026-10-11