我有MDNode*
(使用DebugInfoFinder
找到)。我想找出使用它的模块中的所有其他MDNode
,但它的使用列表似乎是空的。我怎么找到它?
例如,我有类似的东西:
...
!5 = metadata !{i32 100}
...
!8 = metadata !{i32 101, metadata !5}
...
如果我有metadata !{i32 100}
,我该如何获得对metadata !{i32 101, metadata !5}
的引用?
答案 0 :(得分:1)
由于!5
的“使用”是!8
,另一个MDNode
,这是故意的。
MDNode
不被视为“用户”;请注意,虽然Instruction
是User
,但MDNode
却不是。元数据不能通过设计影响代码生成。如果MDNode
是值的“用户”,那么唯一用于元数据的死值就无法被杀死,这违背了设计。
实际上,这意味着要对元数据执行有趣的分析,您需要自己从模块构建此用法图。如果这听起来很昂贵,请不要担心,因为DebugInfoFinder
已经很好了。因此,您可以使用自己的分析(相同的成本)替换它,以收集更多有用的信息。