17 tmpuse(
Ref r, 
int use, 
int loop, 
Fn *fn)
    22     if (rtype(r) == 
RMem) {
    24         tmpuse(m->
base, 1, loop, fn);
    25         tmpuse(m->
index, 1, loop, fn);
    51         fprintf(stderr, 
"\n> Loop information:\n");
    53             for (a=0; a<b->
npred; ++a)
    57                 fprintf(stderr, 
"\t%-10s", b->
name);
    58                 fprintf(stderr, 
" (% 3d ", b->
nlive[0]);
    59                 fprintf(stderr, 
"% 3d) ", b->
nlive[1]);
    72             tmpuse(p->
to, 0, 0, fn);
    73             for (a=0; a<p->
narg; a++) {
    76                 tmpuse(p->
arg[a], 1, n, fn);
    81             tmpuse(i->
to, 0, n, fn);
    82             tmpuse(i->
arg[0], 1, n, fn);
    83             tmpuse(i->
arg[1], 1, n, fn);
    85         tmpuse(b->
jmp.
arg, 1, n, fn);
    88         fprintf(stderr, 
"\n> Spill costs:\n");
    90             fprintf(stderr, 
"\t%-10s %d\n",
    93         fprintf(stderr, 
"\n");
   103 static BSet mask[2][1]; 
   106 tcmp0(
const void *pa, 
const void *pb)
   110     ca = tmp[*(
int *)pa].cost;
   111     cb = tmp[*(
int *)pb].cost;
   112     return (cb < ca) ? -1 : (cb > ca);
   116 tcmp1(
const void *pa, 
const void *pb)
   120     c = bshas(fst, *(
int *)pb) - bshas(fst, *(
int *)pa);
   121     return c ? c : tcmp0(pa, pb);
   129     assert(t >= 
Tmp0 && 
"cannot spill register");
   146             if (slot4 == slot8) {
   161     static int *tarr, maxt;
   169         tarr = 
emalloc(nt * 
sizeof tarr[0]);
   172     for (i=0, t=0; 
bsiter(b, &t); t++) {
   177         qsort(tarr, nt, 
sizeof tarr[0], tcmp0);
   180         qsort(tarr, nt, 
sizeof tarr[0], tcmp1);
   182     for (i=0; i<k && i<nt; i++)
   189 limit2(
BSet *b1, 
int k1, 
int k2, 
BSet *fst)
   197     limit(b1, 
T.
ngpr - k1, fst);
   198     limit(b2, 
T.
nfpr - k2, fst);
   208         tmp[
phicls(t, tmp)].hint.m |= r;
   260             store(i->
to, tmp[t].slot);
   263     } 
while (i != b->
ins && regcpy(i-1));
   268         for (n=0, r=0; 
T.
rsave[n]>=0; n++)
   298     Blk *b, *s1, *s2, *hd, **bp;
   299     int j, l, t, k, lvarg[2];
   301     BSet u[1], v[1], w[1];
   317     for (t=0; t<ntmp; t++) {
   337         if (s1 && s1->
id <= b->
id)
   339         if (s2 && s2->
id <= b->
id)
   340         if (!hd || s2->
id >= hd->
id)
   346             for (k=0; k<2; k++) {
   356                     limit(w, n - (l - j), 0);
   391             if (!req(i->
to, 
R)) {
   392                 assert(rtype(i->
to) == 
RTmp);
   408                 switch (rtype(i->
arg[n])) {
   423                     lvarg[n] = bshas(v, t);
   432                 if (rtype(i->
arg[n]) == 
RTmp) {
   444             if (!req(i->
to, 
R)) {
   446                 store(i->
to, tmp[t].
slot);
   457             assert(rtype(p->
to) == 
RTmp);
   461                 store(p->
to, tmp[t].
slot);
   462             } 
else if (bshas(b->
in, t))
   477         fprintf(stderr, 
"\n> Block information:\n");
   479             fprintf(stderr, 
"\t%-10s (% 5d) ", b->
name, b->
loop);
   482         fprintf(stderr, 
"\n> After spilling:\n");
 
Blk * start
Указатель на блок функции, являющийся её входной точкой 
void emit(int, int, Ref, Ref, Ref)
void bsunion(BSet *, BSet *)
Структура, хранящая информацию об инструкциях. 
uint ndef
Количество блоков, в которых есть объявление переменной 
void bsinit(BSet *, uint)
void bscopy(BSet *, BSet *)
Структура, хранящая описание переменных (более подробное описание переменной ищите в Tmp)...
Содержит информацию о переменной 
Tmp * tmp
Массив используемых функцией переменных 
int ntmp
Размер массива tmp. 
Непосредственно информация о базовом блоке. 
int bsiter(BSet *, int *)
void idup(Ins **, Ins *, ulong)
void printfn(Fn *, FILE *)
void loopiter(Fn *, void(*)(Blk *, Blk *))
char name[NString]
Имя переменной 
uint nblk
Количество блоков в функции 
bits(* retregs)(Ref, int[2])
Blk ** rpo
Ссылка на массив блоков, пронумерованных в порядке Reverse-Post Order, заполняется функцией fillrpo...
bits(* argregs)(Ref, int[2])
Номер (в массиве Fn->tmp) первой не регистровой переменной 
void bsinter(BSet *, BSet *)
void bsdiff(BSet *, BSet *)
void liveon(BSet *, Blk *, Blk *)
void dumpts(BSet *, Tmp *, FILE *)
Структура, хранящая в себе информацию о функции 
uint nuse
Количество блоков, в которых переменная используется