在LLVM C Api中,指令由LLVMValueRef傳遞。如何確定LLVMValueRef的指令類型(添加,存儲,籬笆,什麼),如果它是一個指令呢?在LLVM C API中獲取指令類型
0
A
回答
0
它看起來像LLVMTypeOf,然後LLVMTypeKind函數從值中獲取類型枚舉。
0
每個值子類都有LLVMIsA*
函數。它們可能有點難以找到,因爲它們是由宏生成的。 The declarations, in Core.h
, look like this:
#define LLVM_DECLARE_VALUE_CAST(name) \
LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
而且the definitions, in Core.cpp
, look like this:
#define LLVM_DEFINE_VALUE_CAST(name) \
LLVMValueRef LLVMIsA##name(LLVMValueRef Val) { \
return wrap(static_cast<Value*>(dyn_cast_or_null<name>(unwrap(Val)))); \
}
LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DEFINE_VALUE_CAST)
所以對於一個LLVMValueRef V
應該能夠編寫例如LLVMIsAStoreInst(V)
,它將返回相同的值或空值。中間子類也可以工作,例如, LLVMIsAInstruction(V)
,LLVMIsAConstant(V)
等
或者,對於特別說明,您可以使用LLVMGetInstructionOpcode
,並將enum與the LLVMOpcode
values進行比較。如果參數不是指令,它也會方便地返回0
。
順便說一句(作爲對您評論的迴應),我認爲頭文件通常是查找LLVM文檔的最佳位置,因爲doxygen文檔有時會令人困惑。例如,Core.h
非常簡單易讀,this comment可以解答您的問題。
相關問題
- 1. llvm - 獲取br指令的標籤
- 2. Angular 2在指令類中獲取相同類型的所有指令
- 3. 從類型庫獲取importlib指令
- 4. 如何從Clang獲取LLVM類型?
- 5. 替換LLVM中的指令
- 6. LLVM-C類型等於
- 7. 複製llvm指令
- 8. LLVM IR alloca指令
- 9. LLVM指令調度
- 10. 檢查指針指向LLVM中的指針類型
- 11. 如何在LLVM中打印出指令?
- 12. invoke指令在LLVM中如何工作?
- 13. 如何在llvm中打印指令
- 14. LLVM傳遞向量計數向量類型指令
- 15. LLVM C API。如何確定LLVMValueRef是整數還是指針類型?
- 16. 如何從LLVM指令獲取文件名和目錄?
- 17. 如何從LLVM指令獲取變量的名稱
- 18. 獲取C/C++指令的地址
- 19. LLVM IR指令插入
- 20. LLVM無操作指令?
- 21. LLVM ICmpInst指令鑄造
- 22. 刪除一堆llvm指令
- 23. 如何插入LLVM指令?
- 24. LLVM擦除指令IR
- 25. LLVM找不到getelementptr指令
- 26. 在C中獲取var類型值#
- 27. 在C#中獲取對象的類型
- 28. 刪除llvm中的一系列指令
- 29. LLVM IR getelementptr LLVM C API等效
- 30. LLVM中的類型大小
我發現很難搜索LLVM C文檔。你有鏈接嗎? – Brent
這給出了值的類型(例如i8,i32 *等),而不是指令的類型(例如加載,存儲等) –