1

別のIRをllvmIRに変換する作業をしています。

私のIRは次のようなものです。

a = 1;
b = a;
a = a + 1;

今のところ、私はallocaを使用してIRに変数を作成しています(ここでは「a」と「b」)。

ただし、allocaはおそらく重すぎるため、多くのロードストア命令が導入されます。関数が巨大な場合、これは問題になります。実際、私の場合、ほとんどの変数はレジスタ幅です。だから私はそれらを名前の付いた仮想レジスタにしたいだけです。

メモリ変数の代わりに仮想レジスタ(変数)を作成する方法を知っている人はいますか?

「alloca」の使用を避ける方法を意味しますか?

4

1 に答える 1

4

あなたはそうするべきではありません。SSAコードの生成は非常に難しい問題であるため、LLVMパスのすべてのフロントエンドで一度解決されます。使用してロード/保存してから、パスを実行してそれらをSSA変数に変換することになっていますClangもこれを行います(サンプルコードをC関数に貼り付け、最適化せずにコンパイルします)。allocamem2reg

于 2012-10-23T17:15:29.983 に答える