φ-function の逆

SSA変換するとbasic blockの合流点でφ-func入れることがあるけど、basic blockの分岐点でφ-funcの逆みたいなものを導入したらどうかな

Hoge h = ...;
/* φ(h.0:HogeExt, h.1:Hoge) <- h */
if (h instanceof HogeExt) {
  /* h.0 <- (HogeExt) h; */
  ...
}
/* h.1 = h; */
...

エスケープ解析と共通部分式除去を組み合わせて、似たような逆φで作られる変数は再利用する方向で。

んー、ますますリアルタイム解析できる計算量じゃなくなってきた気がする。