問題タブ [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.
c++ - 適切な PHI ノードを llvm-ir に追加する
次のシナリオがあります。
A,B,C,D,E,F
すべての基本ブロックがある場所|
は、下向きの矢印です。
さて、B
私はいくつかの def を持っているでしょう、例えば%mul = ...
、それは後で対応する左側のブロックで使用されE
ます... = %mul ...
。適切な制御フローが挿入されています。左のブランチのみが取得されるか、右のブランチのみが取得されます。問題はInstruction does not dominate all uses
、検証パスでエラーが発生することです。
PHINode
以下のように指示を追加して、これを修正しようとしました。
省略記号は、無関係な詳細を隠すためにあります。また、ブロックの名前を変更しましたが、コア ロジックはそこにあるはずです。ご覧のとおり、 の使用を適切な呼び出しに置き換え%shl
ましPHINode
たreplaceAllUsesWith()
。
ただし、次の新しいエラーが表示されるようになりました。
どうすればこれを修正できますか?
llvm - LLVM ビルダー フレームワークでこのシーケンスを作成するにはどうすればよいですか?
私はLLVMの基礎を学んでいます。私はビルダーフレームワークに入ろうとしており、モジュール、関数ヘッダーなどをセットアップしましたが、ビルダーで次のような単純なシーケンスを作成する方法をまだ見つけられていません:
ビルダーフレームワークを介して疑似レジスタ表記を使用するにはどうすればよいですか?
2 つの定数に基づいて plus 命令を作成しようとしました。(整数)加算を生成するために使用しているコアラインは次のとおりです。
これには私自身の機能がたくさん含まれていますが、基本は明らかだと思います。どちらも定数である左オペランドと右オペランドの値ポインターを取得し、ビルダー フレームワークで加算操作を作成します。ここでも、モジュールとビルダーは正しくセットアップされています。dump() を呼び出すと、他のすべての処理が表示されますが、上記の行では IR コードが作成されません。
私はそれが次のようなものを共同で作成することを期待しています
または似たようなもの。ビルダーを使用して操作を構築する方法について、何か基本的なことを誤解していますか?それとも、細部の小さな見落としですか?
ありがとう
llvm - 分析パスでメタデータを LLVM 基本ブロックに関連付ける
カスタム LLVM 解析パスで生成された基本ブロックごとの情報を保存して、将来の最適化パスで利用できるようにするにはどうすればよいですか?
たとえば、FunctionPass
活性分析を実装するクラスを派生させているとします。このパスは、関数内の基本ブロックごとにセットを生成LiveIn
します。LiveOut
他の LLVM パスで将来使用するために、これらのセットをどこで宣言する必要がありますか? 関連する llvm::BasicBlock データ構造から直接アクセスできるようにするにはどうすればよいですか?
llvm - AU.addRequired でのクラッシュ(); LLVMパスで
単純な関数パスがあり、コードでループ情報を取得しようとしています。しかし、getAnalysisUsage() に AU.addRequired() を追加しようとすると、モジュールがクラッシュします。これは、getAnalysis() が呼び出される前でも発生します。これは、動的にロードされるパス (.so) です。
これがスタックトレースです。
何か不足していますか?どんな助けでも大歓迎です。