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