問題タブ [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 に答える
628 参照

c++ - 適切な PHI ノードを llvm-ir に追加する

次のシナリオがあります。

A,B,C,D,E,Fすべての基本ブロックがある場所|は、下向きの矢印です。

さて、B私はいくつかの def を持っているでしょう、例えば%mul = ...、それは後で対応する左側のブロックで使用されEます... = %mul ...。適切な制御フローが挿入されています。左のブランチのみが取得されるか、右のブランチのみが取得されます。問題はInstruction does not dominate all uses、検証パスでエラーが発生することです。

PHINode以下のように指示を追加して、これを修正しようとしました。

省略記号は、無関係な詳細を隠すためにあります。また、ブロックの名前を変更しましたが、コア ロジックはそこにあるはずです。ご覧のとおり、 の使用を適切な呼び出しに置き換え%shlましPHINodereplaceAllUsesWith()

ただし、次の新しいエラーが表示されるようになりました。

どうすればこれを修正できますか?

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

llvm - LLVM ビルダー フレームワークでこのシーケンスを作成するにはどうすればよいですか?

私はLLVMの基礎を学んでいます。私はビルダーフレームワークに入ろうとしており、モジュール、関数ヘッダーなどをセットアップしましたが、ビルダーで次のような単純なシーケンスを作成する方法をまだ見つけられていません:

ビルダーフレームワークを介して疑似レジスタ表記を使用するにはどうすればよいですか?

2 つの定数に基づいて plus 命令を作成しようとしました。(整数)加算を生成するために使用しているコアラインは次のとおりです。

これには私自身の機能がたくさん含まれていますが、基本は明らかだと思います。どちらも定数である左オペランドと右オペランドの値ポインターを取得し、ビルダー フレームワークで加算操作を作成します。ここでも、モジュールとビルダーは正しくセットアップされています。dump() を呼び出すと、他のすべての処理が表示されますが、上記の行では IR コードが作成されません。

私はそれが次のようなものを共同で作成することを期待しています

または似たようなもの。ビルダーを使用して操作を構築する方法について、何か基本的なことを誤解していますか?それとも、細部の小さな見落としですか?

ありがとう

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

llvm - 分析パスでメタデータを LLVM 基本ブロックに関連付ける

カスタム LLVM 解析パスで生成された基本ブロックごとの情報を保存して、将来の最適化パスで利用できるようにするにはどうすればよいですか?

たとえば、FunctionPass活性分析を実装するクラスを派生させているとします。このパスは、関数内の基本ブロックごとにセットを生成LiveInします。LiveOut他の LLVM パスで将来使用するために、これらのセットをどこで宣言する必要がありますか? 関連する llvm::BasicBlock データ構造から直接アクセスできるようにするにはどうすればよいですか?

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

llvm - AU.addRequired でのクラッシュ(); LLVMパスで

単純な関数パスがあり、コードでループ情報を取得しようとしています。しかし、getAnalysisUsage() に AU.addRequired() を追加しようとすると、モジュールがクラッシュします。これは、getAnalysis() が呼び出される前でも発生します。これは、動的にロードされるパス (.so) です。

これがスタックトレースです。

何か不足していますか?どんな助けでも大歓迎です。