LLVM 分支指令:源代码中的 if 语句或循环?

LLVM branch instruction: if statement or loop in the source?

对于LLVM IR中的一条条件分支指令(作为一个基本块的终结符),我想判断它对应的是源码中的循环还是if语句.有没有办法分析这个?

从概念上讲,向前的分支是 "if statement",向后的分支是循环。然而,这可能隐藏在一些复杂性的背后,例如前端可能会创建一个向前的条件分支,从而导致向后的无条件分支,因此总体上是一个循环。

如果您想确定,请生成带有调试信息的 IR,然后使用该信息(尤其是行号)来了解原始代码是什么。