从Gimple表示创建基本块的数据流图

时间:2012-08-03 05:09:34

标签: gcc compiler-construction graph dot dataflow

GCC的Gimple内部表示(IR)为SSA(静态单一分配)表单中的每个基本块提供了一些数据流分析。我想将GCC生成的Gimple文件作为输入,并为基本块生成数据流图。例如,下面的代码显示了由GCC生成的简单基本块(使用-fdump-tree-cfg)。

...
<bb 3>:
  i2 = 0;
  goto <bb 5>;

<bb 4>: //the inner-most loop, where real computation happens
  i1.0 = i1;
  i1.1 = i1;
  D.1608 = y[i1.1];
  i2.2 = i2;
  D.1610 = w[i2.2];
  D.1611 = i1 + i2;
  D.1612 = x[D.1611];
  D.1613 = D.1610 * D.1612;
  D.1614 = D.1608 + D.1613;
  y[i1.0] = D.1614;
  i2 = i2 + 1;

<bb 5>:
  if (i2 <= 31)
    goto <bb 4>;
  else
    goto <bb 6>;
...

在上面的代码中,可以在bb 4中看到数据依赖关系(我认为称为流依赖边)。我需要可视化数据依赖性,以便以数据流图的形式分析每个基本块中的数据流。通过数据流图,我指的是图中的节点表示加法和乘法等操作的图,边表示节点之间的数据依赖性。一种选择是编写一个解析器,它接受Gimple并生成一个dot文件。我想知道是否有这样的工具可以做到这一点。编写这样的解析器似乎并不困难,但我担心我可能会遇到很多极端情况。

请注意: 我的谷歌搜索并不富有成效,因为我找到的工具this只生成控制流图。

0 个答案:

没有答案