私のおもちゃコンパイラ用のIR(赤外線IRなど)を設計したいと思いますが、 命令の今後の分析目的は何か分かりません。どの最適化情報でalloca
の情報が使用されていますか?LLVM IR alloca命令
3
A
答えて
3
「のalloca」命令は、この 関数が呼び出し元に戻るときに自動的に解放されるように、 現在実行中の関数のスタックフレームにメモリを割り当てます。オブジェクトは常に、データレイアウトに指定されたアロケータのアドレス空間の に割り当てられます。
'alloca'命令は、アドレスが利用可能でなければならない自動 変数を表すためによく使用されます。
LLVMのIR帳からいくつかの注意:
全体LLVMファイルの内容を、アセンブリまたはビットコードのいずれかが、LLVMモジュールを定義すると言われています。モジュールは、LLVM IRのトップレベルのデータ構造です。各モジュールには一連の関数が含まれています。一連の関数には一連の命令を含む一連の基本ブロックが含まれています。 モジュールには、グローバル変数、ターゲットデータレイアウト、外部関数プロトタイプ、データ構造宣言など、このモデルをサポートする周辺エンティティも含まれています。
alloca命令は、IRをサポートするためのものです。
たとえば以下のコード:IRの意志で
int sum(int a, int b) {
return a+b;
}
がどのように見える:
; Function Attrs: noinline nounwind uwtable
define i32 @sum(int, int)(i32, i32) #0 !dbg !6 {
%3 = alloca i32, align 4
%4 = alloca i32, align 4
store i32 %0, i32* %3, align 4
call void @llvm.dbg.declare(metadata i32* %3, metadata !10, metadata !11), !dbg !12
store i32 %1, i32* %4, align 4
call void @llvm.dbg.declare(metadata i32* %4, metadata !13, metadata !11), !dbg !14
%5 = load i32, i32* %3, align 4, !dbg !15
%6 = load i32, i32* %4, align 4, !dbg !16
%7 = add nsw i32 %5, %6, !dbg !17
ret i32 %7, !dbg !18
}
現在の関数のスタックフレーム上のalloca命令準備空間。スペースの量は、要素タイプ のサイズによって決定され、指定された配置を尊重します。最初の命令は、 %a.addr = alloca i32、4を揃えて、4バイトのスタック要素を割り当てます。 は、4バイトの境界線を考慮しています。スタック要素へのポインタはローカル識別子%a.addrに と格納されています。 alloca命令は、通常ローカル(自動)変数を表すために使用される です。
関連する問題
- 1. X86 'cmpps'命令とLLVM IR 'fcmp'命令は入れ替え可能ですか?
- 2. LLVM IR命令のテキスト表現を取得する方法は?
- 3. 使い方* LLVM ::命令:: user_back()
- 4. LLVM命令のオペランドの取得
- 5. 理解LLVM-IR
- 6. llvm命令の行番号
- 7. LLVM IRからの基本ブロックの最初の命令の消去?
- 8. LLVMによるオーバーフローのチェック方法IR
- 9. IR LLVMフォームアセンブリ対
- 10. llvm - br命令のラベルを取得
- 11. LLVM命令の変数名とパラメータ
- 12. LLVMでの命令の置き換え
- 13. LLVM命令を挿入するには?
- 14. llvmの命令の範囲を削除する
- 15. LLVM分岐命令:if文またはループ内のif?
- 16. GCC IRをLLVMに変換するIR
- 17. LLVM-IRにおける配列の最初の要素
- 18. CPUレジスタを含む命令をメモリ命令に変換する
- 19. llvmのラベルの表現IRコード
- 20. LLVM IRでは、一連の命令をコピーし、それらの命令をLLVMパス経由でIR内の別の場所に貼り付けるとします。これを行う方法?
- 21. LLVMのboolのデータ型IR
- 22. LLVMフレームワーク:IRファイル、リンクライブラリをロード
- 23. LLVM:関数内の命令または基本ブロックを変更する
- 24. LLVMでnuwとnswを検出するIR
- 25. LLVM IRにローカルの名前付きレジスタのコードを生成する方法は?
- 26. RDTSCPと命令命令
- 27. が、私はこのようになりますIR持つLLVM
- 28. LLVMのIRコードで呼び出すと呼びます
- 29. 命令コード
- 30. LLVM:命令クラスまたは値クラスの "uses"と "user"の違い
ありがとう、私はそれを見ましたが、その指示がIRに明示的に存在しなければならない理由はわかりません。 – temp01m7
私はあなたに 'LLVM中間表現の紹介'をお勧めします、私は答えを更新しました – Arseniy