Type-based alias analysis in the Toy Optimizer - Toy Optimizerにおける型ベースのエイリアス解析

型情報で「同じフィールドへの書き換え」が本当に干渉するかを見分け、コンパイル時のロード/ストア最適化を強化する

要約

型階層をレンジ(前順/後順番号)で表現し、レンジの重なりでエイリアス判定することで、オフセットだけで判定していた負荷/損失をより精密に扱えるようにする手法の紹介。

この記事を読むべき理由

JITや最適化コンパイラで「同じオフセットへの書き込み=全破棄」をやると最適化機会を失う。型情報や割当サイト情報を簡易に取り込むだけで、実用的かつ低コストに最適化精度が上がる点は、ブラウザエンジンやモバイルランタイム(例:ART)、サーバーサイドのVMを扱う日本の開発者にも有益です。

詳細解説

簡潔な例(キーロジック):

# Python
def may_alias(left: Value, right: Value) -> bool:
    return (left.info or Any).range.overlaps((right.info or Any).range)

# store 時の compile_time_heap のフィルタ(要点のみ)
compile_time_heap = {
    load_info: value
    for load_info, value in compile_time_heap.items()
    if load_info[1] != offset or not may_alias(load_info[0], obj)
}

実践ポイント

以上。興味があれば、実際のヒエラルキー生成やエフェクト注釈の実装例を出します。