LLVM中的实时值

| 假设我在CFG中(除其他外)有两个基本块A和B,其边缘从A到B。我需要执行以下操作: 获得整个生命值的集合S 那个边缘(可以是 过度逼近,即可能 包含非实时值 不再) 将每个人映射到另一个 值(S-> S \') 替换-在B及其 后继者-价值的所有用途 在S中具有映射值(S \') LLVM是否提供一种简单的方法来进行第一点和第三点(因为我似乎无法找到它)?如果没有,您对此有什么建议吗? 注意:交叉张贴在LLVM邮件列表上     
已邀请:
        对于您的问题,我没有明确的答案,但是我想起了要跟从的主管。希望对您有所帮助。 首先,我将从LLVM程序员手册中检出“遍历BasicBlock中的指令”和“遍历def-use和use-def链”。它给出了一个想法,如何遍历基本块中的指令以及该值的用户。 当您需要了解边缘的生活价值时,我将检查“迭代一个Function中的BasicBlocks”,并尝试确定用户的位置(通过ech迭代),例如使用const BasicBlock * llvm: :Instruction :: getParent()const。 如果放置用户的信息还不够,您可能想利用[主宰和后主宰分析],请查看: LLVM分析通过\“-domtree \” \“ postdom \”等; 布尔llvm :: DominatorTree :: dominates(const BasicBlock * A,const BasicBlock * B)const bool DominatorTree :: dominates(const指令* A,const指令* B)const 这可能会帮助您确定块或指令之间的主导关系,而这可能会有助于您创建集合。     

要回复问题请先登录注册