弦图和SSA表单程序

时间:2018-11-30 14:48:45

标签: graph compiler-optimization register-allocation ssa

我的问题是,为什么每个SSA表单程序默认都对应一个弦图。 Wikipedia defines和弦图为

  

一个弦图是其中四个或更多顶点的所有周期都具有一个   和弦,这是不属于循环但连接的边线   循环的两个顶点

以下是摘自some lecture notes的一个简单示例,为了理解SSA表单注册分配的好处,我遵循以下示例。作者写道:

  

[...]以下程序和相应的弦图:

     

confusing example

首先:我不知道这张图是如何和弦的。我意识到该程序不是SSA格式。然后作者将其转换为SSA形式以获得该干涉图

  

post-ssa example interference graph

但是我再也看不到这是一个弦图或第一个图与以后的图有何关系。

所有这些使得很难理解SSA程序如何产生弦交叉图。

以下是我调查过的一些资料:

  1. https://pdfs.semanticscholar.org/db6b/c047856bee4eb4e7d04f1b934864dca4b065.pdf?_ga=2.67844629.501567003.1543477413-723933249.1539714051

  2. https://homepages.dcc.ufmg.br/~fernando/publications/papers/APLAS05.pdf

  3. http://compilers.cs.uni-saarland.de/papers/ifg_ssa.pdf

  4. https://homepages.dcc.ufmg.br/~fernando/classes/dcc888/ementa/slides/SSABasedRA.pdf

1 个答案:

答案 0 :(得分:1)

关于您在讲义第6部分中列出的程序:

  

我不明白这张图是如何和弦的。我意识到该程序不是SSA形式。

您正确的认为原始程序不是SSA格式。您还对它的“弦图”为何是弦乐的感到困惑:不是。作者犯了一个小错误。在他们参考第一个程序编写“弦图”的地方,他们编写“干涉图”。

您所指的第二张图是琐碎的和弦,因为它不包含任何循环。记住您给定的弦图的定义:

  

和弦图是其中四个或更多顶点的所有循环都具有和弦的弦图,该边不是循环的一部分,而是连接循环的两个顶点

如果循环数为零,那么这些循环中的所有都包含一个和弦。