From: ceriel Date: Tue, 18 Dec 1990 11:14:34 +0000 (+0000) Subject: changed lint flags, use ms_ego, changed allocation strategy for loops X-Git-Tag: release-5-5~1325 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=335377da7a1b99618053f33e22eade707c3632a9;p=ack.git changed lint flags, use ms_ego, changed allocation strategy for loops --- diff --git a/util/ego/ra/Makefile b/util/ego/ra/Makefile index e50557647..2a23989bc 100644 --- a/util/ego/ra/Makefile +++ b/util/ego/ra/Makefile @@ -7,7 +7,7 @@ SHR=../share LDFLAGS=-i CPPFLAGS=-DVERBOSE -DNOTCOMPACT CFLAGS=$(CPPFLAGS) -O -LINTFLAGS=-hbac +LINTFLAGS=-hbu CFILES=\ ra.c ra_items.c ra_lifet.c ra_allocl.c ra_profits.c \ diff --git a/util/ego/ra/ra.c b/util/ego/ra/ra.c index ef13c7376..c26400adf 100644 --- a/util/ego/ra/ra.c +++ b/util/ego/ra/ra.c @@ -437,29 +437,29 @@ print_items(items,p) item_p item; interv_p iv; - printf("BEGIN PROCEDURE %d\n",p->p_id); + fprintf(stderr, "BEGIN PROCEDURE %d\n",p->p_id); for (t = 0; t < NRITEMTYPES;t++) { for (item = items[t]; item != (item_p) 0;item = item->it_next) { - printf("\nitemtype = %s\n",str_types[t]); + fprintf(stderr, "\nitemtype = %s\n",str_types[t]); if (t == GLOBL_ADDR) { - printf("id of external = %d\n", + fprintf(stderr, "id of external = %d\n", item->i_t.it_obj->o_id); } else { - printf("offset = %ld\n", + fprintf(stderr, "offset = %ld\n", item->i_t.it_off); } - printf("regtype = %s\n",str_regtypes[item->it_regtype]); - printf("size = %d\n",item->it_size); - printf("#usages = %d\n", Lnrelems(item->it_usage)); - printf("lifetime = {"); + fprintf(stderr, "regtype = %s\n",str_regtypes[item->it_regtype]); + fprintf(stderr, "size = %d\n",item->it_size); + fprintf(stderr, "#usages = %d\n", Lnrelems(item->it_usage)); + fprintf(stderr, "lifetime = {"); for (iv = item->it_lives; iv != (interv_p) 0; iv = iv->i_next) { - printf("(%d,%d) ",iv->i_start,iv->i_stop); + fprintf(stderr, "(%d,%d) ",iv->i_start,iv->i_stop); } - printf("} \n"); + fprintf(stderr, "} \n"); } } - printf("END PROCEDURE %d\n\n",p->p_id); + fprintf(stderr, "END PROCEDURE %d\n\n",p->p_id); } @@ -490,6 +490,7 @@ print_allocs(list) fprintf(stderr,"#usages(static) = %d\n",al->al_susecount); fprintf(stderr,"#usages(dyn) = %d\n",al->al_dusecount); fprintf(stderr,"#inits = %d\n",Lnrelems(al->al_inits)); + fprintf(stderr,"isloop = %d\n",al->al_isloop); fprintf(stderr,"timespan = {"); for (iv = al->al_timespan; iv != (interv_p) 0; iv = iv->i_next) { @@ -523,8 +524,8 @@ stat_regusage(list) for (x = list; x != (alloc_p) 0; x = x->al_next) { regs_needed[x->al_regtype]++; } - /* printf("data regs:%d\n",regs_needed[reg_any]); */ - /* printf("address regs:%d\n",regs_needed[reg_pointer]); */ + /* fprintf(stderr, "data regs:%d\n",regs_needed[reg_any]); */ + /* fprintf(stderr, "address regs:%d\n",regs_needed[reg_pointer]); */ } @@ -538,7 +539,7 @@ statistics(items) int t,r; int cnt; - printf("\nSTATISTICS\n"); + fprintf(stderr, "\nSTATISTICS\n"); for (r = 0; r <= reg_float; r++) cnt_regtypes[r] = 0; for (t = 0; t < NRITEMTYPES;t++) { cnt = 0; @@ -549,9 +550,9 @@ statistics(items) } next = item->it_next; } - printf("#%s = %d\n",str_types[t],cnt); + fprintf(stderr, "#%s = %d\n",str_types[t],cnt); } for (r = 0; r <= reg_float; r++) { - printf("#%s = %d\n",str_regtypes[r],cnt_regtypes[r]); + fprintf(stderr, "#%s = %d\n",str_regtypes[r],cnt_regtypes[r]); } } diff --git a/util/ego/ra/ra.h b/util/ego/ra/ra.h index fc9bfdbb4..4dc14f393 100644 --- a/util/ego/ra/ra.h +++ b/util/ego/ra/ra.h @@ -8,10 +8,6 @@ * */ -/* TEMPORARY: should be put in ../../../h/em_mes.h: */ -#define ms_liv 9 -#define ms_ded 10 - #define INFINITE 10000 #define NRREGTYPES (reg_float+1) diff --git a/util/ego/ra/ra_allocl.c b/util/ego/ra/ra_allocl.c index 4e500d4ba..9fad6dc6f 100644 --- a/util/ego/ra/ra_allocl.c +++ b/util/ego/ra/ra_allocl.c @@ -59,7 +59,7 @@ STATIC count_usage(p,item,nrloops,sloopcnt,dloopcnt) for (li = Lfirst(loops); li != (Lindex) 0; li=Lnext(li,loops)) { l = (loop_p) Lelem(li); sloopcnt[l->lp_id]++; - dloopcnt[l->lp_id] += + dloopcnt[l->lp_id] += (IS_FIRM(u->t_bblock) ? loop_scale(lev) : 1); } } @@ -293,13 +293,15 @@ STATIC allocs_of_item(p,item,loops,sloopcnt,dloopcnt,alloc_list_p) insert_alloc(wholeproc, alloc_list_p); for (li = Lfirst(loops); li != (Lindex) 0; li = Lnext(li,loops)) { lp = (loop_p) Lelem(li); - if (sloopcnt[lp->lp_id] != 0 && !updates_needed(lp,item)) { + if (sloopcnt[lp->lp_id] != 0 && !updates_needed(lp,item) + && !((header = lp->LP_HEADER) == (bblock_p) 0 && + MUST_INIT(item,lp->lp_entry))) { /* Item is used within loop, so consider loop * as a timespan during which item may be put in * a register. - */ if ((header = lp->LP_HEADER) == (bblock_p) 0 && MUST_INIT(item,lp->lp_entry)) continue; + */ lt = loop_lifetime(lp); susecount = sloopcnt[lp->lp_id]; dusecount = dloopcnt[lp->lp_id]; @@ -314,6 +316,12 @@ STATIC allocs_of_item(p,item,loops,sloopcnt,dloopcnt,alloc_list_p) loop_inits(lp,item,header),wholeproc, TRUE,FALSE), alloc_list_p); + } else if (sloopcnt[lp->lp_id] != 0) { + /* I confess: this is a hack. I didn't expect the + * Spanish inquisition. + */ + if (wholeproc->al_dusecount < dloopcnt[lp->lp_id]) + wholeproc->al_dusecount = dloopcnt[lp->lp_id]; } } } diff --git a/util/ego/ra/ra_aux.c b/util/ego/ra/ra_aux.c index 1010ffd18..722613285 100644 --- a/util/ego/ra/ra_aux.c +++ b/util/ego/ra/ra_aux.c @@ -41,5 +41,5 @@ time_p cons_time(l,b) short loop_scale(lev) short lev; { - return (lev == 0 ? 1 : (lev > 3 ? 20 : 5 * lev)); + return (lev == 0 ? 1 : (lev > 3 ? 32 : 8 * lev)); } diff --git a/util/ego/ra/ra_lifet.c b/util/ego/ra/ra_lifet.c index 073894907..fba27530a 100644 --- a/util/ego/ra/ra_lifet.c +++ b/util/ego/ra/ra_lifet.c @@ -19,15 +19,19 @@ #include "../../../h/em_spec.h" #include "../../../h/em_pseu.h" #include "../../../h/em_reg.h" +#include "../../../h/em_mes.h" +#include "../../../h/em_ego.h" #include "ra.h" #include "ra_aux.h" #include "ra_items.h" #include "ra_lifet.h" -#define MSG_OFF(l) aoff(ARG(l),1) -#define is_livemsg(l) (INSTR(l) == ps_mes && aoff(ARG(l),0) == ms_liv) -#define is_deadmsg(l) (INSTR(l) == ps_mes && aoff(ARG(l),0) == ms_ded) +#define MSG_OFF(l) aoff(ARG(l),2) +#define is_livemsg(l) (INSTR(l) == ps_mes && aoff(ARG(l),0) == ms_ego && \ + aoff(ARG(l),1) == ego_live) +#define is_deadmsg(l) (INSTR(l) == ps_mes && aoff(ARG(l),0) == ms_ego && \ + aoff(ARG(l),1) == ego_dead) build_lifetimes(items) item_p items[]; diff --git a/util/ego/ra/ra_pack.c b/util/ego/ra/ra_pack.c index f1ac3786b..056dae178 100644 --- a/util/ego/ra/ra_pack.c +++ b/util/ego/ra/ra_pack.c @@ -107,26 +107,19 @@ STATIC bool room_for(alloc,packed) STATIC alloc_p best_alloc(unpacked,packed,time_opt) alloc_p unpacked,packed; - bool time_opt; + bool time_opt; /* now unused */ { /* Find the next best candidate */ register alloc_p x,best; - bool loops_only; - - for (loops_only = time_opt; ; loops_only = FALSE) { - /* If we're optimizing execution time, we first - * consider loops. - */ - best = unpacked; /* dummy */ - for (x = unpacked->al_next; x != (alloc_p) 0; x = x->al_next) { - if ((!loops_only || x->al_isloop) && - x->al_profits > best->al_profits && - room_for(x,packed)) { - best = x; - } + + best = unpacked; /* dummy */ + + for (x = unpacked->al_next; x != (alloc_p) 0; x = x->al_next) { + if (x->al_profits > best->al_profits && + room_for(x,packed)) { + best = x; } - if (best != unpacked || !loops_only) break; } return (best == unpacked ? (alloc_p) 0 : best); } diff --git a/util/ego/ra/ra_profits.c b/util/ego/ra/ra_profits.c index 208dd757a..544fb6810 100644 --- a/util/ego/ra/ra_profits.c +++ b/util/ego/ra/ra_profits.c @@ -8,6 +8,7 @@ * R A _ P R O F I T S . C */ +#include #include "../share/types.h" #include "../share/debug.h" #include "../share/lset.h" @@ -96,8 +97,8 @@ allocscore(itemtyp,localtyp,size,off,totyp,time_out,space_out) *time_out = (m == (cond_p) 0 ? -1 : map_value(m,off,TRUE)); *space_out = (m == (cond_p) 0 ? -1 : map_value(m,off,FALSE)); /* - printf("itemtyp = %d, localtyp = %d off = %ld\n",itemtyp,localtyp,off); - printf("ALLOCSCORE = (%d,%d)\n",*time_out,*space_out); + fprintf(stderr,"itemtyp = %d, localtyp = %d off = %ld\n",itemtyp,localtyp,off); + fprintf(stderr,"ALLOCSCORE = (%d,%d)\n",*time_out,*space_out); */ } @@ -132,8 +133,8 @@ opening_cost(itemtyp,localtyp,off,time_out,space_out) *time_out = (m == (cond_p) 0 ? 1000 : map_value(m,off,TRUE)); *space_out = (m == (cond_p) 0 ? 1000 : map_value(m,off,FALSE)); /* - printf("itemtyp = %d, localtyp = %d off = %ld\n",itemtyp,localtyp,off); - printf("OPEN_COST = (%d,%d)\n",*time_out,*space_out); + fprintf(stderr,"itemtyp = %d, localtyp = %d off = %ld\n",itemtyp,localtyp,off); + fprintf(stderr,"OPEN_COST = (%d,%d)\n",*time_out,*space_out); */ } @@ -154,7 +155,7 @@ regsave_cost(regs,time_out,space_out) *time_out = index_value(regsav_cost,n,TRUE); *space_out = index_value(regsav_cost,n,FALSE); /* - printf("REGSAVE COST, n=%d, (%d,%d)\n",n,*time_out,*space_out); + fprintf(stderr,"REGSAVE COST, n=%d, (%d,%d)\n",n,*time_out,*space_out); */ } diff --git a/util/ego/ra/ra_xform.c b/util/ego/ra/ra_xform.c index 899abaf3b..d5b124dc0 100644 --- a/util/ego/ra/ra_xform.c +++ b/util/ego/ra/ra_xform.c @@ -19,6 +19,7 @@ #include "../../../h/em_spec.h" #include "../../../h/em_pseu.h" #include "../../../h/em_mes.h" +#include "../../../h/em_ego.h" #include "../../../h/em_reg.h" #include "ra.h" #include "ra_interv.h" @@ -434,10 +435,12 @@ rem_mes(p) for (b = p->p_start; b != (bblock_p) 0; b = b->b_next) { for (l = b->b_start; l != (line_p) 0; l = next) { next = l->l_next; - if ( INSTR(l) == ps_mes && - ((m = aoff(ARG(l),0)) == ms_liv || m == ms_ded)) { - /* remove live/dead messages */ - rm_line(l,b); + if (INSTR(l) == ps_mes + && aoff(ARG(l),0) == ms_ego + && ((m = aoff(ARG(l),1)) == ego_live + || m == ego_dead)) { + /* remove live/dead messages */ + rm_line(l,b); } } }