4

コマンドを使用するclang -emit-llvm -S test.c -o test.llと、IR ファイルに「phi」命令がありません。どうすれば入手できますか?

パス「-mem2reg」または「-gvn」を使用して「phi」命令を取得できることを知っています。しかし、彼らはいくつかの最適化を行います。最適化せずに「ファイ」を取得したいだけです。

4

1 に答える 1

11

「最適化を行う」とはどういう意味かわかりませんが、mem2regまさにそれが必要なようです。ドキュメントでの説明は次のとおりです。

このファイルは、メモリ参照をレジスタ参照にプロモートします。ロードとストアのみを使用する alloca 命令を促進します。alloca は、ドミネーター フロンティアを使用して phi ノードを配置し、関数を深さ優先順にトラバースして、必要に応じてロードとストアを書き換えることによって変換されます。これは、「枝刈りされた」SSA フォームを構築するための標準的な SSA 構築アルゴリズムです。

Clang 自体は、最適化された LLVM IR を生成しません。これは、(s を使用して) ローカルがメモリに保持される、かなり単純な IR を生成しますalloca。最適化はoptLLVM IR レベルで行われます。最も重要な最適化の 1 つは、mem2regローカルがメモリではなく LLVM の SSA 値で表現されるようにすることです。

于 2013-12-03T05:33:33.453 に答える