Llvm 查找元数据节点的所有用途

Llvm 查找元数据节点的所有用途,llvm,Llvm,我有一个MDNode*(使用DebugInfoFinder找到)。我想找出模块中使用它的所有其他MDNodes,但它的使用列表似乎为空。我怎么找到它 例如,我有一些类似于: ... !5 = metadata !{i32 100} ... !8 = metadata !{i32 101, metadata !5} ... 如果我有元数据!{i32 100},如何获取对元数据的引用!{i32 101,metadata!5}?自的“使用”以来!5是!8,另一个MDNode,这是故意的 MDNode

我有一个
MDNode*
(使用
DebugInfoFinder
找到)。我想找出模块中使用它的所有其他
MDNode
s,但它的使用列表似乎为空。我怎么找到它

例如,我有一些类似于:

...
!5 = metadata !{i32 100}
...
!8 = metadata !{i32 101, metadata !5}
...
如果我有
元数据!{i32 100}
,如何获取对
元数据的引用!{i32 101,metadata!5}

的“使用”以来!5
!8
,另一个
MDNode
,这是故意的

MDNode
不被视为“用户”;请注意,
指令
是一个
用户
MDNode
不是。根据设计,元数据不会影响代码生成。如果
MDNode
是值的“用户”,则无法删除仅用于元数据的死值,这与设计背道而驰

实际上,这意味着要对元数据执行有趣的分析,您需要从模块中自行构建这个使用情况图。如果这听起来很昂贵,请不要担心,因为
DebugInfoFinder
已经在这样做了。因此,您可以用自己的分析(相同的成本)来代替它,以收集更多有用的信息