2017-03-03 85 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()。

相关问题