xref: /csrg-svn/usr.bin/f77/pass1.vax/optim.h (revision 47955)
1*47955Sbostic /*-
2*47955Sbostic  * Copyright (c) 1980 The Regents of the University of California.
3*47955Sbostic  * All rights reserved.
422853Smckusick  *
5*47955Sbostic  * %sccs.include.proprietary.c%
6*47955Sbostic  *
7*47955Sbostic  *	@(#)optim.h	5.2 (Berkeley) 04/12/91
822853Smckusick  */
922853Smckusick 
1022853Smckusick /*
1122853Smckusick  * structure to hold trees for optimization
1222853Smckusick  */
1322853Smckusick 
1422853Smckusick typedef struct slt {
1522853Smckusick 	field 		type;
1622853Smckusick 	field		flags;
1722853Smckusick 	short		lineno;
1822853Smckusick 	struct slt	*next, *prev;
1922853Smckusick 	struct slt	*nullslot;
2022853Smckusick 	expptr		expr;
2122853Smckusick 	int		label;
2222853Smckusick 	int		*ctlinfo;
2322853Smckusick };
2422853Smckusick 
2522853Smckusick typedef struct slt *Slotp;
2622853Smckusick 
2722853Smckusick extern Slotp	firstslot, lastslot;	/* first, last slots in buffer */
2822853Smckusick extern int	numslots;		/* number of slots */
2922853Smckusick 
3022853Smckusick Slotp newslot(), optbuff(), optinsert();
3122853Smckusick struct Ctlframe *cpframe();
3222853Smckusick 
3322853Smckusick /*
3422853Smckusick **      Structures for cse analysis
3522853Smckusick */
3622853Smckusick 
3722853Smckusick typedef struct IDblock *idptr;
3822853Smckusick typedef struct VALUEnode *valuen;
3922853Smckusick typedef struct IDlist  *idlptr;
4022853Smckusick typedef struct DUPlist *duplptr;
4122853Smckusick typedef struct NODElist *nodelptr;
4222853Smckusick 
4322853Smckusick struct IDblock
4422853Smckusick {
4522853Smckusick 	expptr idaddr;
4622853Smckusick 	valuen initval, assgnval;
4722853Smckusick 	nodelptr headnodelist;
4822853Smckusick 	struct IDblock *next;
4922853Smckusick };
5022853Smckusick 
5122853Smckusick struct VALUEnode
5222853Smckusick {
5322853Smckusick 	expptr opp;
5422853Smckusick 	expptr *parent;
5522853Smckusick 	int n_dups;
5622853Smckusick 	unsigned is_dead : 1;
5722853Smckusick 	valuen lc,rc,rs;
5822853Smckusick 	idlptr headdeplist;
5922853Smckusick 	duplptr headduplist;
6022853Smckusick 	struct VALUEnode *next;
6122853Smckusick };
6222853Smckusick 
6322853Smckusick struct IDlist
6422853Smckusick {
6522853Smckusick 	idptr idp;
6622853Smckusick 	struct IDlist *next;
6722853Smckusick };
6822853Smckusick 
6922853Smckusick struct DUPlist
7022853Smckusick {
7122853Smckusick 	expptr *parent;
7222853Smckusick 	struct DUPlist *next;
7322853Smckusick };
7422853Smckusick 
7522853Smckusick struct NODElist
7622853Smckusick {
7722853Smckusick 	valuen nodep;
7822853Smckusick 	struct NODElist *next;
7922853Smckusick };
8022853Smckusick 
8122853Smckusick /*
8222853Smckusick  * structure to hold information on basic blocks
8322853Smckusick  */
8422853Smckusick 
8522853Smckusick 
8622853Smckusick 
8722853Smckusick typedef struct bblock {
8822853Smckusick 	Slotp		first, last;
8922853Smckusick 	idptr		headid;
9022853Smckusick 	valuen		headnode, tailnode;
9122853Smckusick 	struct bblock	*next, *prev;
9222853Smckusick };
9322853Smckusick 
9422853Smckusick typedef struct bblock *Bblockp;
9522853Smckusick 
9622853Smckusick extern Bblockp	firstblock;		/* first block in buffer */
9722853Smckusick extern Bblockp	lastblock;		/* last block in buffer */
9822853Smckusick 
9922853Smckusick 
10022853Smckusick 
10122853Smckusick /* data structure for optloop and regalloc routines */
10222853Smckusick 
10322853Smckusick typedef
10422853Smckusick   struct regnode
10522853Smckusick     {
10622853Smckusick       field vstg;
10722853Smckusick       field vtype;
10822853Smckusick       int memno;
10922853Smckusick       int memoffset;
11022853Smckusick       unsigned isarrayarg : 1;
11122853Smckusick     } REGNODE;
112