Функция ssa
Версия от 09:17, 26 марта 2018; Alexander (обсуждение | вклад) (Новая страница: «Функция <strong>ssa(Fn)</strong> - функция, реализованная в Си интерфейсе QBE. Расп…»)
Функция ssa(Fn) - функция, реализованная в Си интерфейсе QBE. Располагается в файле cfg.c
и "подключается" в all.h
.
Назначение
fillpreds осуществляет построение | SSA-формы.
- Заполняет dominance frontier (границы доминирования), кладет в
blk->fron
(размер множества - вblk->nfron
); - Заполняет живые переменные;
- Строит | SSA-форму, меняя fn.
Исходный код
Функция ssa из ssa.c
/* require rpo and ndef */
void ssa(Fn *fn) {
Name **stk, *n; int d, nt; Blk *b, *b1; nt = fn->ntmp; stk = emalloc(nt * sizeof stk[0]); d = debug['L']; debug['L'] = 0; filldom(fn); if (debug['N']) { fprintf(stderr, "\n> Dominators:\n"); for (b1=fn->start; b1; b1=b1->link) { if (!b1->dom) continue; fprintf(stderr, "%10s:", b1->name); for (b=b1->dom; b; b=b->dlink) fprintf(stderr, " %s", b->name); fprintf(stderr, "\n"); } } fillfron(fn); filllive(fn); phiins(fn); renblk(fn->start, stk, fn); while (nt--) while ((n=stk[nt])) { stk[nt] = n->up; nfree(n); } debug['L'] = d; free(stk); if (debug['N']) { fprintf(stderr, "\n> After SSA construction:\n"); printfn(fn, stderr); } }