Я работаю над компилятором, который использует 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;
}
Я думал о добавлении фи-функций, но это, похоже, не решает проблему того, на какие индексы ссылаются эти фи-функции.
Большое спасибо, Бен