あなたがスーパー命令(superinstructions)を使用する場合にのみ、 のぞき穴最適化(peephole optimization)が必要です。 ただし、 スーパー命令を使用しない場合に、 のぞき穴最適化のコードを持っていても、 それほど差し障りはありません。
スーパー命令(superinstruction)の選択には、 単純な貪欲な覗き穴最適化(simple greedy peephole
optimization)アルゴリズムが使用されます: gen_inst
が VM 命令をコンパイルするたびに、 それを直前の VM
命令と結合(combine)できるかどうかがチェックされます(これは、以前ののぞき穴最適化から生じたスーパー命令である可能性もあります)。
結合できる場合、 現在の ‘*ctp’ に i
を配置する代わりに、 最後の命令を結合された命令に変更します。
のぞき穴最適化のコードは vmgen-ex/peephole.c にあります。 このファイルはほぼそのまま使用できます。 Vmgen は、 除き穴最適化のデータを含む file-peephole.i を生成します。
あなたは、 ‘vm_prim’ を初期化した後、 VM コードをコンパイルして覗き穴最適化のためのデータ構造を初期化する前に、
‘init_peeptable()’ を呼び出す必要があります。 その後、 VM コード生成関数を使用してコンパイルすると、 VM
命令がスーパー命令(superinstructions)に自動的に結合されます。 あなたが VM
分岐ターゲット間で命令を結合したくない時(そうしないと、 分岐先の適切な VM 命令が存在しなくなります)、 分岐ターゲットで
BB_BOUNDARY
(see VM code generation) を呼び出す必要があります。