Small change in register allocation criteria

This commit is contained in:
ceriel 1992-09-01 11:13:42 +00:00
parent ee6d91a1d4
commit af5ad235c9
2 changed files with 7 additions and 6 deletions

View file

@ -241,15 +241,13 @@ STATIC bool useful_item(item)
item_p item; item_p item;
{ {
/* See if it may be useful to put the item in a register. /* See if it may be useful to put the item in a register.
* A local variable that is not a parameter may always be put * A local variable may always be put in a register.
* in a register (as it need not be initialized).
* Other items must be used at least twice. * Other items must be used at least twice.
*/ */
int nruses = Lnrelems(item->it_usage); int nruses = Lnrelems(item->it_usage);
assert (nruses > 0); /* otherwise it would not be an item! */ assert (nruses > 0); /* otherwise it would not be an item! */
return nruses > 1 || (item->it_type == LOCALVAR && return nruses > 1 || item->it_type == LOCALVAR;
item->i_t.it_off < 0);
} }
@ -367,7 +365,7 @@ ra_optimize(p)
instrmap = (line_p *) newmap(nrinstrs-1); /* map starts counting at 0 */ instrmap = (line_p *) newmap(nrinstrs-1); /* map starts counting at 0 */
make_instrmap(p,instrmap); make_instrmap(p,instrmap);
build_lifetimes(items); build_lifetimes(items);
/* print_items(items,p); */ /* print_items(items,p); */
/* statistics(items); */ /* statistics(items); */
itemlist = cat_items(items); /* make one list */ itemlist = cat_items(items); /* make one list */
alloclist = build_alloc_list(p,Lnrelems(p->p_loops), alloclist = build_alloc_list(p,Lnrelems(p->p_loops),
@ -378,7 +376,7 @@ ra_optimize(p)
pack(alloclist,time_opt,&packed,&unpacked,p); pack(alloclist,time_opt,&packed,&unpacked,p);
stat_regusage(packed); stat_regusage(packed);
xform_proc(p,packed,nrinstrs,instrmap); xform_proc(p,packed,nrinstrs,instrmap);
/* print_allocs(packed); */ /* print_allocs(packed); */
p->p_localbytes = locls; p->p_localbytes = locls;
/* don't really allocate dummy local variables! */ /* don't really allocate dummy local variables! */
rem_locals(p,packed); rem_locals(p,packed);

View file

@ -234,6 +234,9 @@ compute_profits(alloclist,time_opt)
} }
t = cnt * time - dyn_inits(alloc->al_inits) * otime; t = cnt * time - dyn_inits(alloc->al_inits) * otime;
sc = (time_opt ? t : s); sc = (time_opt ? t : s);
/*
fprintf(stderr, "cnt: %d time: %d otime: %d t: %d s: %d score: %d\n", cnt, time, otime, t, s, sc);
*/
if (sc > maxsc) { if (sc > maxsc) {
maxsc = sc; maxsc = sc;
alloc->al_regtype = rtyp; alloc->al_regtype = rtyp;