关于LLVM遍历基本块顺序稳定性的技术咨询
LLVM模块遍历基本块顺序问题解答
用户遍历代码如下:
for (const Function &F : *M) for (const BasicBlock &BB : F) for (const Instruction &I : BB){ // ... 遍历逻辑 }
问题1:多次执行上述程序时,LLVM返回的基本块顺序是否一致?
- 一致。因为你是从固定IR文件解析得到的Module,LLVM解析时会严格遵循IR文件中函数、基本块的定义顺序来构建内部结构,遍历顺序完全对应IR里的定义顺序。只要IR文件不修改,每次执行程序的遍历顺序都不会变化。
问题2:在部分块中插入非分支指令后,LLVM返回的基本块顺序是否一致?
- 仍然一致。插入非分支指令仅会修改单个基本块内部的指令序列,不会改变基本块本身在函数中的排列顺序。函数对基本块的遍历顺序由基本块的定义顺序决定,和块内指令的增删改无关。
内容的提问来源于stack exchange,提问作者Student Popper
相关产品推荐
相关产品推荐

