開発日記

JITコンパイラの開発日記だった

JITコードの無効化

Ruby向けJITコンパイラ RuJIT Advent Calendar 8日目です.

RuJITに最近追加された最適化(?)の1つにJITコンパイルされた機械語(以下JITコード)中で毎回実行されるメソッド再定義チェックなど実行時検査コードの除去があります.
ただ,実行時検査コードはコンパイル時においた仮定が実行時にまだ有効化を確認するコードですので無条件に除去するわけにはいきません.

RuJITではある仮定が正しくなくなったら,同じ仮定をおいているすべてのJITコードを無効化する処理をRuJITランタイムに追加し除去を可能にしています.

現在,RuJITで除去している実行時検査は2つ用意しており,メソッド再定義とProcオブジェクトの検査が対象となっています.

とここまで書いて,FirefoxのJS処理系,IonMonkeyに導入されていることを知ったので,RuJITでの解説はやめてinvalidationの解説記事へのリンクを置いておく.


The Ins and Outs of Invalidation | JavaScript