4

多くの最適化の頭字語を見てきました。

dce, inline, constmerge, constprop, dse, licm, gvn, instcombine, mem2reg, scalarrepl

それがデッド コードの除去であると推測できdceますが、他にも多くの問題があります。

説明付きのLLVM最適化のリストを含むWebページはありますか?それらのそれぞれは正確に何をしますか?

よろしく、ロイ

4

1 に答える 1

5

LLVM のドキュメントには、分析パスと変換パスのリストが含まれています。リストしたものはすべて変換パスに該当します。時には簡潔なドキュメントについて詳しく説明するには:

  • inlineインライン関数 (duh!)。
  • constmerge同一の定数の重複を排除します。
  • constprop単純な定数の折り畳みを行います (定数引数を持つ命令のみ)
  • dse明らかに無意味なメモリ書き込みを排除します ( a = 1; a = 2;->と同等a = 2;)。
  • licm、ループ不変コードモーションは、すべての反復で同じである計算をループから移動して、一度だけ実行されるようにします。
  • GVN は、グローバル バリュー ナンバリングの一般的な頭字語です。
  • instcombine複数の命令を 1 つの同等の命令 (たとえば、a + 1 + 1->と同等a + 2) に置き換えます。
  • mem2regスタック割り当てを SSA レジスタに変換します。フロントエンドは、ローカルにスペースを割り当ててallocaそれらをポインターとして使用するだけで、はるかに簡単になりますが、最適化パスは SSA で機能するため、このパスはallocaできるだけ多くの を SSA に変換します。
  • scalarrepl集約型を個々のメンバーに置き換えます (たとえば、構造体オブジェクトを 2 つの i32 メンバーでジャグリングする代わりに、2 つの i32 レジスタを使用します)。
于 2013-05-08T12:37:02.550 に答える