15 assert(a->
type != ABot);
19 if (c->
type == CAddr) {
50 if (ap.
type == ASym && aq.
type == ASym) {
61 if ((ap.
type == ACon && aq.
type == ACon)
63 assert(ap.
type == ACon || ap.
type == AUnk);
74 if (ap.
type == AUnk && aq.
type != ALoc)
76 if (aq.
type == AUnk && ap.
type != ALoc)
98 assert(rtype(r) <=
RType);
99 if (rtype(r) ==
RTmp) {
115 for (n=0; n<fn->
nblk; ++n) {
118 assert(rtype(p->
to) ==
RTmp);
120 assert(a->
type == ABot);
126 for (i=b->
ins; i<&b->ins[b->
nins]; ++i) {
128 if (!req(i->
to,
R)) {
129 assert(rtype(i->
to) ==
RTmp);
131 assert(a->
type == ABot);
132 if (Oalloc <= i->op && i->
op <=
Oalloc1) {
144 getalias(a, i->
arg[0], fn);
147 getalias(&a0, i->
arg[0], fn);
148 getalias(&a1, i->
arg[1], fn);
149 if (a0.
type == ACon) {
153 else if (a1.
type == ACon) {
158 if (req(i->
to,
R) || a->
type == AUnk) {
int escapes(Ref r, Fn *fn)
Структура, хранящая информацию об инструкциях.
Con * con
Массив используемых функцией констант
Структура, хранящая описание переменных (более подробное описание переменной ищите в Tmp)...
Tmp * tmp
Массив используемых функцией переменных
Непосредственно информация о базовом блоке.
uint nblk
Количество блоков в функции
Blk ** rpo
Ссылка на массив блоков, пронумерованных в порядке Reverse-Post Order, заполняется функцией fillrpo...
int alias(Ref p, int sp, Ref q, int sq, int *delta, Fn *fn)
Структура, хранящая в себе информацию о функции