Dumping IR

Я не так уж много узнал по поводу IR, помимо того, что написано в Documentation.
1)После компиляции XML-plug-in (..\src\samples\XML-plug-in) получаем приложение IRexplorer.
2)Соответственно, компилируя свой простенький пример типа
{
int a,b,c;
a=argc;
if(a<2)

while(b<4)

} с ключами, которые описаны в файле XML-plugin.htm, затем в irexplorer открываем папку с полученными xml-файлами и наблюдаем представление, которое имела наша программа между фазами компиляции.
3)Выводы, пожалуй, следующие:
а)Общий вид представления следующий:
<результат> <имя операции> <операнды>
например A ASSIGN 4
б)MIR мало отличается от CIL, который мы видим первым
в)существование фи-функции выясняется при просмотре представления в фазе SSA info construction, вид записи
c<15> PHI c<8> c<10>
г)на этапе Canon к именам переменных (временных компилятора и остальным) добавляются суффиксы [FP] и (reg), что это, я пока не выяснил (вероятно, это указание на то, являются они регистровыми или нет).
д)на этапе lower мы имеем уже ассемблерный код, который затем оптимизируется.

Перевод статьи документации (Core components -> IR) мне кажется здесь писать не нужно.
Это пожалуй все, что я могу сообщить.

partizan
13.10.06

Запостите сюда дамп представления для вашего примера (с фи-функцией). Было бы интересно посмотреть.
\\dimstar

Сделал фазу как написано в хелпе, пробежался по нему, кое-что понял. Всё содержимое консоли после этого сохранил, где понял и непонял скоментил (завтра на свежие мозги разберусь) и нашёл интересную особенность фазы из Phoenix-c2-Wizard-Walkthrough.mht: при наличии "настоящей ошибки" она не замечает те, которые при создании фазы предполагалось устранять.

Andrei007
13.10.06

$L9 LABEL
e<12> PHI e<12> e<10>
t284 CMP(GT) e<15> 0
CBRANCH(GT) t284 $L11 $L10
Примерно так это выглядит, l9 метка входа в цикл, l10 и l11 —метки последующих блоков.
//14.10.06 partizan

IRExplorer - рульная штука, наконец дошли до него руки. Всё намеого понятнее, чем в том, что получали в консоли. Всё интересное, что получил в консоли положил на http://andrei-007.wikidot.com/phoenixframework
Andrei007
14.10.06


Народ, я не знаю, в чем дело, но у меня в папке C:\Program Files\PhxRDK_May06\src\samples\XML-plug-in\IR-Explorer лежит какая-то фигня, и при попытке скомпилировать весь XML-plugin создается только dll-ка, но не IR-explorer. Поэтому у меня просьба - выложите содержимое этой папки или хотя бы exe-шник, мне тоже хочется полюбоваться на это чудо.
// GGG

У меня в первый день тоже такая батва была, до сих пор не допёр почему. Но сегодня утром всё нормально скомпилилось, я подцепил XML-plug-in и был, можно сказать поражён: всё, в чём я пытался с трудом разобраться в консоли, здесь очень красиво и наглядно представлено. Выкладываю ниже всё содержимое папки с exe-шником.

IRExplorer

Andrei007
15.10.06

1)Изучил документацию по IR, с помощью XML-plug-in просмотрел различные стадии IR
Выводы:
Выводы существенно не отличаются от выводов partizan'а
Структура полученного с помощью XML-plug-in представления обладает следующей особенностями:
Помимо отдельных инструкций существуют линейные блоки инструкций(blocks), соответственно заканчивающиеся инструкциями перехода

Возникла неясность при анализе IR на стадии Ssa_Info_Construction:
Не совсем ясно для меня, как по XML прослеживается Data Flow:
<…>
$L6 , LABEL #7
a<8>i32 , PHI _a<6>i32 , _a<4>i32 , #7
t273cond1 , CMPLT _a<8>i32 , 10 , #7
CBRANCH(LT) t273(cond1) , $L8 , $L7 , #7
<…>
Как я понял, _a<8> определяется по _a<6> и _a<4>, но почему при первом проходе в CMPLT _a<8> - оказывается _a<4>, а при последующих _a<6>

2)Просмотрел пример из Phoenix-c2-Wizard-Walkthrough.mht, исходники XML-plug-in + документация
Первые выводы: Каждая фаза получает Phx::Unit ^ unit, который может соответствовать различным типам юнитов, например, funcUnit. С помощью метода BuildFlowGraph в свойстве flowGraph можно получить, соответственно CFG. А с помощью свойства firstInstr получаем первую инструкцию. Далее по инструкциям можно двигаться, например, с помощью свойств Next и Prev класса Phx::IR::Instr
snark
16.10.06

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.