問題タブ [llvm-c++-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
419 参照

c++ - 汎用出力ストリームをパラメーターとして受け入れる API の設計

出力ストリームをコンストラクタ パラメータの 1 つとして受け入れる LLVM ライブラリを使用して API を設計しています。LLVM コーディング標準では、次のことが規定されています。

raw_ostream を使用する

LLVM には、軽量でシンプルかつ効率的なストリーム実装が llvm/Support/raw_ostream.h に含まれており、std::ostream のすべての共通機能を提供します。新しいコードはすべて、ostream の代わりに raw_ostream を使用する必要があります。

std::ostream とは異なり、raw_ostream はテンプレートではなく、raw_ostream クラスとして前方宣言できます。通常、パブリック ヘッダーには raw_ostream ヘッダーを含めるべきではありませんが、前方宣言と raw_ostream インスタンスへの定数参照を使用します。

LLVM コーディング標準に従う必要があるため、コンストラクターのパラメーターとして raw_ostream を受け入れようとしています。raw_ostream を参照およびポインターで渡そうとしましたが、コンパイル時に次のエラー メッセージが表示されます。

注: 候補コンストラクターは実行できません: 'llvm::raw_ostream &()' から 'llvm::raw_ostream &' への既知の変換はありません...

タイプ 'llvm::raw_ostream &()' のパラメーターを受け入れるには、私のコンストラクターはどのように見えるべきですか? クラス メンバーをこの出力ストリームに初期化したいと思います。

これが私の現在のコードです:

コンストラクタ

発信者

outsこのリンクの665行目から文書化されています

0 投票する
1 に答える
873 参照

llvm - LLVM IR getelementptr LLVM C API と同等

文字列内の文字数をカウントする LLVM アセンブリ コードを生成する LLVM C API コードを作成しようとしています。LLVM C API に相当する LLVM IR で getelementptr を記述する方法を知る必要があります。私はグーグル全体を見てきましたが、答えが見つからないようです。ヘルプやヒントをいただければ幸いです。前もって感謝します。

0 投票する
1 に答える
547 参照

llvm - LLVM でエッジを挿入/削除するにはどうすればよいですか?

宛先を変更して新しいエッジを挿入し、ソースと宛先で別のエッジを削除できますか? 言い換えれば、エッジの基本ブロック宛先を別のものに置き換えて、CFG を変更することはできますか?

getEdge()で関数を試しましProfileInfoたが、うまくいきませんでした:

0 投票する
1 に答える
3897 参照

llvm - 配列パラメーターを使用した LLVM IR 関数

以下のような 2 つの基本的な C++ 関数から LLVM IR コードを生成したいと考えています。

私の問題は、LLVM API を使用して配列パラメーターのインデックスを取得することです。何か案は ?どうもありがとう

編集済み

これは、API を使用した私のコードです。

そして、これは生成される LLVM IR です:

配列アクセスが原因で、newFun の本体に固執しています。

0 投票する
1 に答える
229 参照

llvm - llvm-clang を使用して完全な分析を作成する


研究アイデアの一環として、次のタスクを実行する必要があり
ます。 1. 手元にある C ファイルを解析して、llvm-IR を取得します。
2. IR の分析を行います。場合によっては、いくつかの命令または BB を追加および削除し
ます。 3. x86 実行可能ファイルまたは C のいずれかを発行します (後で決定する必要があります)。

これは、C で分析を作成する人にとって非常に一般的なタスクだと思います。これらのタスクはすべて C/C++ で実行したいと考えています (研究コードのほとんどは C/C++ で作成されているため)。タスク 2 と 3 では多くのドキュメントを利用できますが、タスク 1 で利用できるドキュメントはほとんどありません。

これらのタスクをパイプラインとしてフックしたいのですが、これに関する提案も大歓迎です。

-ありがとう

0 投票する
1 に答える
558 参照

llvm-c++-api - ExecutionEngine からマシン コードを取得する代わりに x86 アセンブリを出力する

Google の結果の周りでこれを行う方法についていくつかの矛盾する説明を見てきましたが、それらのいずれも機能させることができませんでした。

私の問題は基本的に次のとおりです。ExecutionEngine::getPointerToFunction (llvm::Function* を使用) を呼び出す場所で、代わりに、この関数用に生成されるきれいに印刷された x86 アセンブリを取得したいと思います。

誰か?

[ETA: LLVM 3.3 を使用しています。私が見つけた説明は、以前のバージョンの LLVM のもののようです。]