Lots of data structures removed and made local to one specific phase.

This commit is contained in:
bal 1984-11-30 10:14:30 +00:00
parent e5a282c621
commit 594a5bb49b

View file

@ -48,22 +48,9 @@ typedef union pext_t *pext_p;
typedef union bext_t *bext_p;
typedef union lpext_t *lpext_p;
/* Intermediate Code generation */
typedef struct sym *sym_p;
typedef struct prc *prc_p;
typedef struct num *num_p;
/* Inline Substitution */
typedef struct call *call_p;
typedef struct actual *actual_p;
typedef struct formal *formal_p;
typedef struct calcnt *calcnt_p;
typedef short call_id;
/* Strength Reduction */
typedef struct iv *iv_p;
typedef struct code_info *code_p;
/* Used-Definition Analysis */
typedef struct local *local_p;
@ -288,9 +275,6 @@ union bext_t {
struct bext_ra {
short bx_begin; /* number of first instruction of block */
short bx_end; /* number of last instruction of block */
short bx_usecnt; /* used by minimal_score() */
short bx_dist; /* ,, */
bool bx_mark; /* ,, */
} bx_ra;
} ;
@ -394,138 +378,6 @@ struct arg {
#define ARG(lnp) lnp->l_a.la_arg
/* Data structures for Intermediate Code generation */
struct sym {
sym_p sy_next; /* link */
char sy_name[IDL]; /* name of the symbol */
dblock_p sy_dblock; /* pointer to dblock struct */
};
struct prc {
prc_p pr_next; /* link */
char pr_name[IDL]; /* name of the procedure */
proc_p pr_proc; /* pointer tto proc struct */
};
struct num {
num_p n_next; /* link */
unsigned n_number; /* EM repr. e.g. 120 in 'BRA *120' */
lab_id n_labid; /* sequential integer repr. of IC */
};
/* Data structures for Inline Substitution */
struct call {
proc_p cl_caller; /* calling procedure */
call_id cl_id; /* uniquely denotes a CAL instruction */
proc_p cl_proc; /* the called procedure */
byte cl_looplevel; /* loop nesting level of the CAL */
bool cl_flags; /* flag bits */
short cl_ratio; /* indicates 'speed gain / size lost' */
call_p cl_cdr; /* link to next call */
call_p cl_car; /* link to nested calls */
actual_p cl_actuals; /* actual parameter expr. trees */
};
#define CLF_INLPARS 017 /* min(15,nr. of inline parameters) */
#define CLF_SELECTED 020 /* is call selected for expansion? */
#define CLF_EVER_EXPANDED 040 /* ever expanded? e.g. in a nested call. */
#define CLF_FIRM 0100 /* indicates if the call takes place in a
* firm block of a loop (i.e. one that
* is always executed, except
* -perhaps- at the last iteration).
* Used for heuristics only.
*/
struct actual {
line_p ac_exp; /* copy of EM text */
/* 0 for actuals that are not inline */
offset ac_size; /* number of bytes of parameter */
bool ac_inl; /* TRUE if it may be expanded in line */
actual_p ac_next; /* link */
};
struct formal {
offset f_offset; /* offsetin bytes */
byte f_flags; /* flags FF_BAD etc. */
byte f_type; /* SINGLE, DOUBLE,POINTER,UNKNOWN */
formal_p f_next; /* link */
};
/* flags of formal: */
#define FF_BAD 01
#define FF_REG 02
#define FF_ONCEUSED 04
#define FF_OFTENUSED 06
#define USEMASK 014
/* types of formals: */
#define SINGLE 1
#define DOUBLE 2
#define POINTER 3
#define UNKNOWN 4
/* 'call-count' information keeps track of the number
* of times one procedure calls another. Conceptually,
* it may be regarded as a two dimensional array, where
* calcnt[p,q] is the number of times p calls q. As this
* matrix would be very dense, we use a more efficient
* list representation. Every procedure has a list
* of calcnt structs.
*/
struct calcnt {
proc_p cc_proc; /* the called procedure */
short cc_count; /* # times proc. is called in the
* original text of the caller.
*/
calcnt_p cc_next; /* link */
};
/* Data structures for Strength Reduction */
/* An induction variable */
struct iv {
offset iv_off; /* offset of the induction variable */
line_p iv_incr; /* pointer to last instr. of EM-code that
* increments the induction variable */
offset iv_step; /* step value */
};
/* All information about a reducible piece of code is collected in
* a single structure.
*/
struct code_info {
loop_p co_loop; /* the loop the code is in */
bblock_p co_block; /* the basic block the code is in */
line_p co_lfirst; /* first instruction of the code */
line_p co_llast; /* last instruction of the code */
line_p co_ivexpr; /* start of linear expr. using iv */
line_p co_endexpr; /* end of the expression */
int co_sign; /* sign of iv in above expr */
iv_p co_iv; /* the induction variable */
offset co_temp; /* temporary variable */
int co_tmpsize; /* size of the temp. variable (ws or ps)*/
int co_instr; /* the expensive instruction (mli,lar..)*/
union {
line_p co_loadlc; /* LOC lc instruction (for mult.)*/
line_p co_desc; /* load address of descriptor
* (for lar etc.) */
} c_o;
};
/* Data structures for Use-Definition and Live-Dead Analysis */
struct local {