問題タブ [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.
llvm - LLVM-IR から llvm c++ API コードを自動生成できますか?
clang 3.0 オンライン デモ ページhttp://llvm.org/demo/index.cgiは、入力プログラムの LLVM-IR を表す LLVM C++ API コードを出力するオプションを提供します。
「LLVM C++ APIコードを生成する」出力はclangオプションですか(もしそうなら、それは何ですか)?
それともllvmツールオプションですか(どちらですか)?
同じことをLLVM-IR入力から行うことは可能ですか? 基本的に、特定の llvm-ir シーケンスを生成するために必要な適切な llvm c++ api 呼び出しを確認したいと思います。ドキュメントから順方向に学習するのではなく、例から逆方向に学習したいと思います。
マニュアルページと、clang、llvm-as、および llvm-dis の --help と --help-hidden には、明白な情報は何も表示されません。
編集:OK今、そのWebページの出力に「llvm2cppによって生成された」と表示されます。しかし、最近のllvmリリースではそのツールを見つけることができません。古いリリースのみで、2.9と3.0の新しいツールがllvm2cppに引き継がれていますか?
llvm - LLVM C++APIとは正確には何ですか
LLVM C++APIを理解するのは難しいと思いました。
LLVM C ++APIとLLVMIRの間に関係はありますか?また、LLVM C ++ APIをどのように使用できますか?
f# - F# からこのネイティブ関数を呼び出すにはどうすればよいですか? (LLVMCreateJITCompilerForModule)
私はllvm-fsバインディングを使用しており、呼び出したいメソッドの 1 つは、LLVM C APIcreateJITCompilerForModule
のネイティブ メソッドの externです。LLVMCreateJITCompilerForModule
llvm-fs の作成者は、F# でこの関数呼び出しの「適切な」バージョンを作成できないと述べています。
createJITCompilerForModule in llvm-fs:Generated.fs
:
F# からこの関数を呼び出す方法、またはネイティブ関数が何をするか知っていますか? OutJIT
(ネイティブコードがvoid*
指すものを再割り当てするため)の「出力パラメーター」があるようです。ネイティブ関数は次のとおりです。
LLVMCreateJITCompilerForModule in llvm-c:ExecutionEngineBindings.cpp
:
llvm - ロード用の関数パラメータレジスタへのアクセス
関数は次のように作成されます。
次に、ブロックに命令を追加することにより、関数の本体が作成されます。
十分なコンテキスト、ここで問題に:関数の引数値のロード命令を追加したいのですが、次のようになります。
address
関数パラメーターの変数を取得する方法/場所がわかりません。
llvm - これ以上 ConstantArray::get(Context&, char*&, bool) はありませんか?
LLVM Demo を見てください。定数文字列を作成する公式の方法は次のとおりです。
Constant* consStr = ConstantArray::get(mod->getContext(), "hello", true);
しかし、うまくいきません!私は離れてコンパイルエラーを取得します:
llvm ソース コードを見てください。サポートするメンバー関数はありません。
私はllvm3.1を使用しています。
私のコードに何か問題がありますか、それともこのコンストラクターは新しいソースで削除されていますか?
これがLLVMソースコードの違いです。
LLVM2.8
LLVM3.1
}
どうやら、2.8 には 3 つのコンストラクターがありますが、3.1 には ConstantArray のコンストラクターが 1 つしかありません。今、定数文字列を作成する方法がわかりません... :(
どんな助けでも大歓迎です!
ありがとう!
llvm - 型の変更方法: 定義前のグローバル変数の使用
私の場合、モジュール内のグローバル変数への参照を作成し、参照の後にグローバル変数を定義する必要があります。
グローバル変数を使用する命令を作成するとき、変数の型がわかりません。実際にはシンボルのアドレスだけが必要な場合でも、タイプを指定して llvm::GlobalVariable オブジェクトを作成する必要があります。
これにより、後でグローバル変数を定義するときに問題が発生しました。タイプはわかっていますが、残念ながら、以前に作成した GlobalVariable オブジェクトを置き換えることができません。
擬似コードは次のとおりです。
明らかに、同じ名前で別の変数を作成することはできません。しかし、最初の GlobalVariable オブジェクトを実際の型に変換し、初期化子を与えるにはどうすればよいでしょうか?
GlobalVariable オブジェクトを作成せずにシンボル アドレスを取得する他の方法はありますか?
llvm - シンボルから定数を作成し、それを配列初期化子として使用できますか?
基本的に、次のCコードのデータIRを作成します。
そこで、のllvm::GlobalVariable
オブジェクトを作成しましたmyarr1
。しかし、llvm
主張し、初期化子として使用することはできないと述べました。
配列要素初期化子のタイプが間違っています
これを行うことは可能ですか?
llvm - StructType を構築するために自分でパディングを計算する必要がありますか?
LLVM IR を使用して構造データを生成しています。
例えば:
ドキュメントを読んでデモを試してみましたが、API ではユーザーがパディングと値の組み合わせを自分で処理する必要があるようです。
次のように構造体をもっと簡単に作成する方法はありますか:
レイアウト作業は本当に大変で、バグが発生する可能性が非常に高いです。初期化子の値を組み合わせるのも大変です。
私の理解では、構造体がパックされていないことをllvm APIに伝えると、自動的にパディングを処理するはずですよね?
コメントはありますか?
llvm - LLVM IR の命令にメタデータを追加する
まず、私は LLVM パスの初心者です。
変換パス (C++ API を使用) の後、LLVM の命令にメタデータを追加しようとしています。ツール チェーン内の別のツールで使用するために、この情報を保存するつもりです。これに関して2つの質問があります。
メタデータとして保存した情報が、LLVM IR で動作する別のツールにフィードされることを期待しています。では、メタデータは良い考えですか? 文字列をいくつかの指示とともにメタデータとして保存するつもりです。
ここでメタデータが正しい方法である場合は、メタデータ ノードを作成するための助けが必要です。setMedata() 関数を使用して命令にアタッチする予定です。setMetadata() のどのバリアントを使用するのが適切か。私のデータがどの MDKind であるべきかわかりません。MDString を作成し、それを MDNode にアタッチしてから、命令で setMetadata() を呼び出します。関数内の命令にメタデータを添付する場合、setMedata() でどのコンテキストを使用する必要がありますか。コンテキストとメタデータとの関連性は?
フォーラムや llvm doxygen のドキュメントで多くの議論を読み上げようとしましたが、すべての質問に対する明確で完全な回答が得られませんでした。私はこれを理解するのに役立つあなたの助け、またはいくつかの資料に感謝します.