多くの最適化の頭字語を見てきました。
dce, inline, constmerge, constprop, dse, licm, gvn, instcombine, mem2reg, scalarrepl
それがデッド コードの除去であると推測できdceますが、他にも多くの問題があります。
説明付きのLLVM最適化のリストを含むWebページはありますか?それらのそれぞれは正確に何をしますか?
よろしく、ロイ
多くの最適化の頭字語を見てきました。
dce, inline, constmerge, constprop, dse, licm, gvn, instcombine, mem2reg, scalarrepl
それがデッド コードの除去であると推測できdceますが、他にも多くの問題があります。
説明付きのLLVM最適化のリストを含むWebページはありますか?それらのそれぞれは正確に何をしますか?
よろしく、ロイ
LLVM のドキュメントには、分析パスと変換パスのリストが含まれています。リストしたものはすべて変換パスに該当します。時には簡潔なドキュメントについて詳しく説明するには:
inlineインライン関数 (duh!)。constmerge同一の定数の重複を排除します。constprop単純な定数の折り畳みを行います (定数引数を持つ命令のみ)dse明らかに無意味なメモリ書き込みを排除します ( a = 1; a = 2;->と同等a = 2;)。licm、ループ不変コードモーションは、すべての反復で同じである計算をループから移動して、一度だけ実行されるようにします。instcombine複数の命令を 1 つの同等の命令 (たとえば、a + 1 + 1->と同等a + 2) に置き換えます。mem2regスタック割り当てを SSA レジスタに変換します。フロントエンドは、ローカルにスペースを割り当ててallocaそれらをポインターとして使用するだけで、はるかに簡単になりますが、最適化パスは SSA で機能するため、このパスはallocaできるだけ多くの を SSA に変換します。scalarrepl集約型を個々のメンバーに置き換えます (たとえば、構造体オブジェクトを 2 つの i32 メンバーでジャグリングする代わりに、2 つの i32 レジスタを使用します)。