CPSとSSA

http://citeseer.ist.psu.edu/kelsey95correspondence.html
を眺めた。CPSはいいもので、80年代の関数型言語コンパイラの中間表現としてよく使われたらしい。特に、継続も扱えるあたりがいい。一方のSSA(Static Single Assignment)というのは、変数への値の束縛を一度しか許さないというもので、主に手続き型言語の最適化のための表現形式(らしい)。この一見無関係なCPSSSAとの変換を与えるという論文。

call/ccなどが出現するプログラムをCPSに変換すると、CPS->SSAが適用できないことがあると書いてあるのだけど、いまいちイメージがわかない。一回自分で書いてみないとダメだなー。頭悪すぎだ

SSAは、GCCでも使われている(4.0以降?)。流れとしては、

色んな言語のソースプログラム→GENERIC→GIMPLE→SSA→RTL→アセンブラ

みたいな感じ?SSAとRTLのそれぞれのフェーズで最適化を行うっぽいね。GIMPLEというのは、多分GNU SIMPLEの略かな。あと、図5のGIMPLE ProgramとSSA formが対応してない気が