4

GCC 的 Gimple internal representation (IR) 为 SSA(Static Single Assignment)形式的每个基本块提供了一些数据流分析。我想将 GCC 生成的 Gimple 文件作为输入,并为基本块生成数据流图。例如,下面的代码显示了一个由 GCC 生成的 Gimple 格式的简单基本块(使用-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文件。我想知道是否已经有这样的工具可以做到这一点。编写这样一个解析器似乎并不难,但我担心我可能会在处理很多极端情况时陷入困境。

请注意:我的谷歌搜索并没有那么富有成效,因为我发现这样的工具生成控制流图。

4

0 回答 0