在分析过程中将元数据关联到 LLVM 基本块

Associate metadata to LLVM basic blocks in an analysis pass

如何存储在自定义 LLVM 分析过程中生成的每个基本块信息,以使其在未来的优化过程中可用?

例如,假设我正在推导 class FunctionPass 以实施活性分析。此遍将为函数中的每个基本块生成集合 LiveInLiveOut。我应该在哪里声明这些集合以供其他 LLVM pass 将来使用?我怎样才能让它们可以直接从它们关联的 llvm::BasicBlock 数据结构访问?

目前没有任何直接方法可以将元数据附加到 BasicBlocks,因为 BasicBlock class 没有元数据作为数据成员。您可以将 BasicBlock class 作为一个选项进行扩展,另一种常见的选项是将 BasicBlock 相关元数据附加到其 Terminator 指令,但每次合并或拆分 BasicBloks 或修改 CFG 的过程都可能会使您的信息无效。