私のコンパイラ コースでは、MIPS アーキテクチャのグラフ カラーリングに基づくレジスタ アロケータを構築しています。私は私の実装のために同じことについてMuchnickの扱いに従っています。
Muchnick は、これらのアロケータで関数の引数をどのように扱うかについて、少しあいまいでした。
私はいくつかの仮定を立て、同じことを明確にしたいと考えました。
- 中間レベルの IR から低レベルの IR に変換するこのステップがあります。ネストされた関数呼び出しは処理されていません。私の考えは、関数呼び出しを右から左にスキャンし、最も内側の呼び出しの IR を外側に配置することです。このようにして、最初のいくつかの引数を引数レジスタに割り当て、残りを最小量のスピル (ちょうど 1) でスタックするという MIPS 呼び出し規則を使用できます。
- 本書のレジスタ合体処理は、関数の引数を固定引数レジスタに移動する LIR コードがどのように処理されるかを扱っていないため、私には直感的ではありません。多くの審議の後、私は、引数の受け渡しの動きに対してレジスタ合体を行うべきではないという結論に達しました。
これらの仮定に関するフィードバック/考えは非常に高く評価されています。