5

IR を含むLLVM モジュールから開始する*Mod: 特定のバックエンドを使用して、そこからターゲット固有のアセンブラーを生成するにはどうすればよいですか? 残念ながら、万華鏡のチュートリアルでは、これについて詳しく説明していません。実行エンジンを使用してプログラムを (ビルド、ターゲット アーキテクチャで) JIT コンパイルするだけで、実際には特定のバックエンドを選択してターゲット固有のアセンブラーを生成するわけではありません。静的コンパイラの構築について詳しく説明していないため、LLVMチュートリアルもありません。したがって、この質問は、この不足している情報を提供することができます。

llc静的コンパイラを構築したいので、ジョブを実行するために などのコマンド ライン ツールを使用したくありません。LLVM API を使用したいと考えています。

これをより具体的にするために、次のコードから始めましょう。

LLVMContext &Context = getGlobalContext();
SMDiagnostic Err;
Module *Mod = ParseIRFile(argv[1], Err, Context);

ファイル名 (第 1 引数で指定) は、IR に正常に解析されました。ここで、最適化パスをスキップして、PTX バックエンド (バージョン 3.2 以降で使用可能) など、特定のバックエンドを持つアセンブラーを作成しましょう。

4

1 に答える 1

8

のソースコードを見てくださいtools/llc/llc.cpp。それはすべてそれを行い、かなり短く、理解するのは難しくありません。わからないことについて具体的な質問がある場合は、遠慮なく質問してください。

于 2013-05-09T14:57:53.567 に答える