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