2017-03-03 119 views
1

我正在玩LLVM C-API,我不知何故被LLVMBuildIndirectBr()困住,或者更確切地說與LLVMBlockAddress(),因爲我不知道它的第一個參數是什麼,更重要的是我該如何創建它。這是一個LLVMValueRef,它應該代表'函數',但我發現的文檔沒有提供更多信息。什麼是LLVMBlockAddress()第一個參數?

回答

1

根據its code,這個函數只是一個用於BlockAddress::get()的C包裝。所以,第一個參數是包含BB的Function,我假設。

沒有爲BlockAddress::get()過載只服用BB參數沒有C API,所以必須調用LLVMGetBasicBlockParent()對BB第一以獲得它屬於Function基準,然後把它作爲第一個參數LLVMBlockAddress()。作爲在這種情況下的一個經驗法則,試着弄清楚你使用的「本地」C++方法,然後查找它的文檔。

+0

當然,但問題是關於從這個函數創建一個LLVMValueRef,看着C++ API對此沒有幫助。 – lucvoo

+1

@lucvoo好吧,'BlockAddress :: get()'有一個只有BB的重載,並用'bb-> GetParent()'發現它所屬的'Function'。所以,我想你可以使用[LLVMGetBasicBlockParent()](http://llvm.org/docs/doxygen/html/group__LLVMCCoreValueBasicBlock.html#ga94bcbe957389c2c2219d6a02e72691ef)。 – arrowd

+0

太棒了,這正是我在尋找的!你可以編輯你的答案或爲這個LLVMGetBasicBlockParent()創建另一個? – lucvoo

0

顯然它是通過LLVMFunctionType()和LLVMAddFunction()。

相關問題