00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 # ifdef DELTA_COMPILER
00029 
00030   class DefUse : public PrintableResourceObj {          
00031    public:
00032     NonTrivialNode* node;
00033     DefUse(NonTrivialNode* n) { node = n; }
00034 
00035   };
00036 
00037   class Def : public DefUse {
00038    public:
00039     Def(NonTrivialNode* n) : DefUse(n) { }
00040 
00041     void print();
00042   };
00043 
00044   class Use : public DefUse {
00045    public:
00046     Use(NonTrivialNode* n) : DefUse(n) { }
00047     virtual bool isSoft() const         { return false; }
00048     void print();
00049   };
00050 
00051   class PSoftUse : public Use {
00052     
00053    public:
00054     PSoftUse(NonTrivialNode* n) : Use(n) { }
00055     bool isSoft() const         { return true; }
00056     void print();
00057   };
00058 
00059   class DUInfo : public PrintableResourceObj {
00060    public:
00061     PReg* reg;
00062     SList<Use*> uses;   
00063     SList<Def*> defs;
00064     DUInfo(PReg* r) { reg = r; }
00065 
00066     void getLiveRange(int& firstNodeID, int& lastNodeId);
00067     void propagateTo(BB* bb, const PReg* r, const Def* def, Use* use, const bool global);
00068     void propagateTo(BB* useBB, Use* use, const NonTrivialNode* fromNode, PReg* src,
00069                      NonTrivialNode* toNode, const bool global);
00070     void print_short();
00071     void print();
00072   };
00073 
00074   class DUInfoList;
00075 
00076   
00077   class BBDUTable : public PrintableResourceObj {       
00078    public:
00079     GrowableArray<DUInfo*>* info;               
00080     BBDUTable() { info = NULL; }
00081 
00082     void print_short() { lprintf("BBDUTable %#lx", this); }
00083     void print();    
00084   };
00085 
00086   
00087   class PRegBBIndex : public PrintableResourceObj {
00088    public:
00089     BB* bb;             
00090     int index;          
00091 
00092     PRegBBIndex(BB* b, int i, PReg* pr) { Unused(pr);  bb = b; index = i; }
00093     void print_short();
00094     void print();
00095   };
00096 
00097   class CPInfo : public PrintableResourceObj {
00098     
00099    public:                      
00100     NonTrivialNode* def;        
00101     PReg* r;                    
00102 
00103     CPInfo(NonTrivialNode* d, PReg* r1) { def = d; r = r1; }
00104     bool isConstant() const;
00105     oop  constant() const;
00106     void print();
00107    protected:
00108     CPInfo(NonTrivialNode* def);
00109     friend CPInfo* new_CPInfo(NonTrivialNode* def);
00110   };
00111 
00112   CPInfo* new_CPInfo(NonTrivialNode* def); 
00113   void forAllDefsDo(const GrowableArray<PRegBBIndex*>* l, Closure<Def*>* f);
00114   void forAllUsesDo(const GrowableArray<PRegBBIndex*>* l, Closure<Use*>* f);
00115   void printDefsAndUses(const GrowableArray<PRegBBIndex*>* l);  
00116 # endif