Для того чтобы понять как строится SSA в Phoenixe, я воспользовался примером XML-plug-in.
Как им пользоваться уже было показанно: здесь.
Приведу в пример простую программу, с условным переходом и циклом.
#include<stdio.h>
int main()
{
int a,b;
a=2;
b=1;
if (a>1)
b++;
else
b=a+3;
for(;a>0;a--)
b=b+a;
return 0;
}
Во время просмотра ее В IRExplorere(Картинки в присоединенных файлах), видно как программа меняется от фазы к фазе.
Нумерация переменных и PHI функции появляются только на одной фазе Ssa Info Construction, а после фазы Ssa Info Destruction изчезают. Во время каждой операции присваивания появляется новая переменная, имя которой состоит из имени самой переменной и порядкого номера. Все переменные в функции нумеруются по порядку вне зависимости от имени(нет двух переменных с одним номером).
Как работает PHI функция я еще не разобрался.Например она может вызывается от еще не определенной переменной, например при первом проходе цикла.
\\Ramz
14.10.06





