私はスタック マシン (具体的にはCIL ) のコンパイラに取り組んでおり、コードを基本ブロックのグラフに解析しました。ここからメソッドにSSAを適用しようとしていますが、なかなかうまくいきません。私の最初の試み (グラフではなくフラットなリストで作業している間) は、コードを反復処理し、SSA ID のスタック (つまり、割り当てターゲット用) を保持し、割り当てを生成するときにそれらをプッシュし、割り当て時にそれらをポップすることでした。それらは使用されています。これは、単一の基本ブロックに対しては問題なく機能しますが、Φ 関数の生成を処理する方法がわかりません。
私が思いついたアイデアは、SSA ID にスタック位置をアタッチし、コード パスが収束したときにまだスタック上にあるものを調べることですが、これは物事を行う正しい方法 (TM) とは思えません。
複数のコード パスにわたるスタック操作を追跡し、それらが収束したときに衝突を判断するための単純なアルゴリズムはありますか?