2013-05-09 16 views
5

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

スタティックコンパイラをビルドしたいので、llcなどのコマンドラインツールを使用してジョブを実行する必要はありません。 LLVM APIを使用したいと考えています。これは、より具体的にするために

は、のは、このコードから始めましょう:

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

(第一引数で与えられた)ファイル名が正常にIRに解析されました。次に、最適化パスをスキップし、特定のバックエンドを持つアセンブラを作成します。 PTXバックエンド(バージョン3.2から利用可能)

答えて

8

tools/llc/llc.cppのソースコードを見てください。それはすべてそれを行い、それはかなり短く、理解するのが難しくありません。あなたが理解できないことについていくつかの事柄について具体的な質問がある場合は、お気軽にお尋ねください。

+0

私はLLVMで始まったので、私は自分自身のことを考えましたが、戸惑うことはありません。しかし、あなたの答えは励みになります。 P.S.私は指示の人生が好きだった! – ritter

+0

ターゲットアーキテクチャ(つまりnvptx64)を知っていれば、ターゲットアーキテクチャを作成するためにトリプルクラスを使用する必要がありますか? – ritter

+1

@フランク:それは簡単な方法です。 llcはこれを 'compileModule'で行い、モジュール上で' setTargetTrople'を呼び出します –

関連する問題