“继承者”在 llvm 中代表什么?

What does a “successor” stand for in llvm?

我在看llvm文档的时候,尤其是BasicBlock部分,经常出现“successor”这个概念,那是什么?

后继者是结束基本块的分支的目标。

例如,如果一个基本块以五向开关结束,则该块有六个后继(五个显式和开关的默认)。以 return 结尾的基本块没有后继。

basic blocksuccessor 这两个术语都来自 Control Flow Analysis(或 CFA)领域。 在 CFA 中,程序使用 Control Flow Graph(或 CFG)表示。

CFG中的每个顶点(或节点)都是一个基本块。由于 CFG 是一个有向图,一个基本块可能有输入边和输出边。例如:A -> B -> C。传入边来自前辈,而传出边指向后继者。

上述例子(A -> B -> C)的successors/predecessors组:

pred(A) = {}
succ(A) = {B}

pred(B) = {A}
succ(B) = {C}

pred(C) = {B}
succ(C) = {}