c++ - 我怎样才能从 LLVM 中的 BasicBlock 中识别一个 backedge

标签 c++ c llvm clang

我正在编写一个 LLVM pass,用于分析和修改生成的 IR 代码。有没有办法识别后边,我的意思是知道 BasicBlock 的后继者是否实际上在路径中的某个位置。

最佳答案

是的,有。

首先,请注意您需要区分“到 BB 的每条路径都必须经过 A”和“从 A 到 BB 的某些路径”。

我认为您正在寻找第一种情况 - 判断基本 block BB 的后继 A 是否是执行必须经过才能到达 B 的基本 block 。

当这种情况发生时,我们说“A支配B”。检查支配地位的接口(interface)是通过 DominatorTree类(添加到您的通行证的 getAnalysisUsage 函数中。有关示例,请参见 writing an llvm pass)。

关于c++ - 我怎样才能从 LLVM 中的 BasicBlock 中识别一个 backedge,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12128322/

相关文章:

c - 将结构体 typedef 为数组意味着什么?

c++ - 如何从 LLVM 中的终止符指令中删除后继指令

c++ - llvm,加载 poolalloc 以选择

c++ - 使用仿函数调用 find_if 的编译错误

c++ - 运行 C++ 程序的问题

c++ - 将结构体更改为 C++ 类

c - MessageQueue 名称和消息队列大小

c++ - Cocos2d-x - 了解在屏幕上定位 Sprite

c - 如何在 Linux 上使用 C 在执行期间切换用户

c++ - 加载 LLVM 插件时 undefined symbol