单一静态分配表单中的全局变量

时间:2017-04-30 23:49:58

标签: compiler-construction global-variables ssa

我正在研究一种编译器,它使用SSA作为包含全局变量的语言。我想知道我应该如何实现全局变量的用法和定义,例如我应该如何转换下面的代码?

非SSA表格:

x;
y;

main () {
  x = 0;
  foo();
  y = x;
  x = 2;
  foo();
}

foo () {
  print x;
  x = 1;
}

在SSA表格中,有些地方我不确定要使用的下标:

main () {
  x.0 = 0;
  foo()
  y.0 = x.?
  x.1 = 2;
  foo();
}

foo () {
  print x.?;
  x.? = 1;
}

我曾考虑添加phi-functions,但这似乎并没有解决这些phi函数所指的下标问题。

非常感谢, 本

1 个答案:

答案 0 :(得分:6)

经典SSA并不真正涵盖全局变量,或者您可能无法通过代码读取和写入的任何其他内存位置。有一些扩展试图覆盖堆内存,但它并不表示你正在追求其中一个。

作为比较点,LLVM并没有尝试将全局变量用于SSA形式。全局变量是一个内存位置,它的名称"是该内存位置的指针,因此访问全局变量是一种普通的加载/存储操作。