Функция fillrpo — различия между версиями
Alexander (обсуждение | вклад) (Новая страница: «Функция <strong>fillrpo(Fn)</strong> - функция, реализованная в Си интерфейсе QBE. Ра…») |
(нет различий)
|
Версия 21:25, 25 марта 2018
Функция fillrpo(Fn) - функция, реализованная в Си интерфейсе QBE. Располагается в файле cfg.c
и "подключается" в all.h.
Назначение
fillrpo осуществляет обход дерева блоков в reverse postorder порядке. Вычисленные номера блоков записываются в blk->id
.
Исходный код
Функция fillrpo из cfg.c
void fillrpo(Fn *f) { uint n; Blk *b, **p; for (b=f->start; b; b=b->link) b->id = -1u; n = 1 + rporec(f->start, f->nblk-1); f->nblk -= n; f->rpo = alloc(f->nblk * sizeof f->rpo[0]); for (p=&f->start; (b=*p);) { if (b->id == -1u) { edgedel(b, &b->s1); edgedel(b, &b->s2); *p = b->link; } else { b->id -= n; f->rpo[b->id] = b; p = &b->link; } } }