我想爲我的玩具編譯器設計一個IR(如LLVM IR),我不知道 alloca
指令在進一步分析中的用途是什麼。在哪些優化alloca
信息被使用?LLVM IR alloca指令
3
A
回答
3
在「ALLOCA」指令分配 當前正在執行的函數的堆棧幀存儲器,當該 函數返回到其調用者被自動釋放。該對象始終在數據佈局中指示的地址空間中分配用於分配的 地址空間。
'alloca'指令通常用於表示必須具有可用地址的自動變量 。
一些從LLVM IR書說明:
整個LLVM文件的內容,用匯編語言或位碼,被說成限定LLVM模塊。該模塊是LLVM IR頂級數據結構。每個模塊都包含一系列函數,其中包含一系列包含一系列指令的基本塊。 該模塊還包含支持此模型的外圍實體,如全局變量,目標數據佈局,外部函數原型以及數據結構聲明。
所以alloca指令(在我的說明中)只是爲了支持IR。
例如以下代碼:
int sum(int a, int b) {
return a+b;
}
在IR意願看起來像:
; 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,align 4,分配一個4字節的堆棧元素,其中 代表一個4字節的對齊方式。指向堆棧元素的指針在本地標識符%a.addr中存儲爲 。 alloca指令通常是用來表示本地(自動)變量的 。
相關問題
- 1. LLVM IR指令插入
- 2. LLVM擦除指令IR
- 3. 如何llvm紅外訂單alloca指令
- 4. 插入GetElementpointer指令在LLVM IR
- 5. 替換LLVM IR中的指令
- 6. LLVM IR插入
- 7. LLVM IR浮點數鑄造
- 8. 調試LLVM IR
- 9. 單聲道LLVM和LLVM-IR
- 10. 複製llvm指令
- 11. 錯誤而在LLVM IR
- 12. LLVM-IR數組指針賦值
- 13. 如何比較LLVM-IR中的指針?
- 14. llvm alloca依賴關係
- 15. LLVM IR指令和源代碼行之間的映射關係
- 16. 從LLVM IR中清除基本塊中的第一條指令?
- 17. 如何獲得LLVM IR指令的文本表示?
- 18. 的指令集的下一個節點在LLVM IR
- 19. LLVM IR:帶有變量BasicBlock目標的分支指令?
- 20. LLVM IR Lambda函數
- 21. 預評估LLVM IR
- 22. LLVM不能從IR
- 23. GCC IR與LLVM IR有何不同?
- 24. 將GCC IR轉換爲LLVM IR
- 25. llvm ir沒有按預期運行
- 26. 如何解析LLVM IR
- 27. LLVM IR getelementptr LLVM C API等效
- 28. 在LLVM IR中,我想複製一組指令,並通過LLVM傳遞將這些指令粘貼到IR中的另一個位置。這個怎麼做?
- 29. 如何使用call和alloca指令定位llvm字節碼中的類名?
- 30. 在LLVM IR中遞增變量
謝謝你,我看到了,但我不清楚爲什麼該指令必須在IR中明確存在。 – temp01m7
我會推薦你一本書'介紹LLVM中間代表',我已經更新了我的答案 – Arseniy