【发布时间】:2012-10-13 15:06:36
【问题描述】:
我正在尝试将元数据节点添加到程序中,无论是添加到指令中还是作为全局元数据。如何使用 LLVM C API 做到这一点?它现在提供了一个函数LLVMAddNamedMetadataOperand(从this question 中找到),但我似乎看不到如何使用它。这在llvm-fs 绑定中绑定到addNamedMetadataOperand。我试过这个:
addNamedMetadataOperand myModule "foobar" (mDString "cat" 3u)
期望它生成一些名为 foobar 的元数据节点,但它不起作用 - 抱怨转换错误。我想也许你应该在指令上使用addNamedMetadataOperand,所以我尝试了:
let ret = buildRet bldr (constInt i32 0UL)
addNamedMetadataOperand myModule "foobar" ret
但它也不喜欢这样。
【问题讨论】:
-
嘿 callum,如果您向 llvm-fs(或通过电子邮件发送给 google 组)添加完整代码的错误报告,我会尝试找出问题所在。
-
嘿 Keith,我什至不知道这是否是正确的方法,或者如何使用 C API/fs-bindings 添加任何类型的元数据。如果这是制作一些元数据的正确方法,那么它就是一个错误,我将提供一个关于 GH 的最小示例。
-
老实说我也不知道。它还不是我研究过的 API 的一部分,但完整的源代码是我开始研究它的最简单方法,即使结果“不是错误”
-
我在 C 源代码和文档中浏览了一段时间,并没有发现您正在做的事情有任何问题(我尝试使用 getFirstInstruction 以防万一这是必要的,并且结果相同)。我可能不得不从工作 C++ 代码向后工作,以查看发生了什么,因此可能需要一段时间才能达到这一点。
标签: compiler-construction f# code-generation llvm llvm-fs