1. ホーム
  2. c

[解決済み] clangをllvmのIRにコンパイルさせる方法

2022-04-23 10:37:33

質問

clangに私のC/C++コードをバイナリ実行ファイルではなく、LLVMビットコードにコンパイルして欲しいのです。どうしたらそれを実現できますか?

また、LLVMのビットコードがあったとして、それをさらにバイナリ実行ファイルにコンパイルするにはどうしたらいいですか?

LLVMのビットコードに独自のコードを追加して、バイナリ実行ファイルにコンパイルしたいのですが。

どのように解決するのですか?

あるC/C++ファイルがある場合 foo.c :

> clang -S -emit-llvm foo.c

生成する foo.ll LLVMのIRファイルです。

-emit-llvm オプションは、ドライバではなく直接コンパイラフロントエンドに渡すこともできます。 -cc1 :

> clang -cc1 foo.c -emit-llvm

生成する foo.ll をIRで表示します。 -cc1 のようなクールなオプションが追加されます。 -ast-print . チェックアウト -cc1 --help をご覧ください。


LLVM IRをさらにアセンブリにコンパイルするには llc ツールを使用します。

> llc foo.ll

生成する foo.s をアセンブリで作成します (デフォルトは実行したマシンのアーキテクチャ)。 llc はLLVMツールの1つである 以下はそのドキュメントです。 .