00001 #ifndef _INCLUDE_LIVE_H_
00002 #define _INCLUDE_LIVE_H_
00003
00004 #define HASH_KEY_SIZE (64)
00005 #define HASH_PART_SIZE (64)
00006
00007 #include "lego.H"
00008 #include "setinfo.H"
00009
00010 class LiveVar {
00011 private:
00012
00013 SetInfoTable Table;
00014
00015 bool ChangeBit;
00016
00017 int IterCount;
00018
00019 char *ReadHashKey;
00020 char *ReadHashPart1;
00021 char *ReadHashPart2;
00022 char *ReadHashPart3;
00023 char *WriteHashKey;
00024 char *WriteHashPart1;
00025 char *WriteHashPart2;
00026 char *WriteHashPart3;
00027 char *LBHashKey;
00028 char *UBHashKey;
00029
00030 void CreateReadHashKey (int, int, int);
00031 void CreateReadHashKey (int, int, int, int);
00032 void CreateWriteHashKey (int, int, int);
00033 void CreateWriteHashKey (int, int, int, int);
00034
00035 void BB_defs(legoOp *, int);
00036 void BB_uses(legoOp *, int);
00037 void Process(legoRegion *, legoProc *);
00038 void BB_live_out( legoProc *, legoRegion * );
00039 void BB_live_in( legoProc *, legoRegion * );
00040 void deleteedgeinfo ( int );
00041 bool CreateTable;
00042 legoHash <int, legoOprd *, legoHash_lt_int> *EdgeInfo;
00043
00044 public:
00045
00046 LiveVar() {
00047 CreateTable = TRUE;
00048 EdgeInfo = NULL;
00049 }
00050 ~LiveVar() { delete EdgeInfo; }
00051
00052 void SetCreateTable ( bool c ) { CreateTable = c; }
00053 bool GetCreateTable ( void ) { return CreateTable; }
00054
00055 void SetEdgeInfo ( legoHash <int, legoOprd *, legoHash_lt_int> *t )
00056 { EdgeInfo = t; }
00057 legoHash <int, legoOprd *, legoHash_lt_int> *
00058 GetEdgeInfo ( void ) { return EdgeInfo; }
00059
00060 void analyze( legoRegion *, legoProc *);
00061 void analyze( legoModule * );
00062
00063 void CollectEdgeInfo ( legoProc * );
00064 };
00065
00066 legoHash <int, legoOprd *, legoHash_lt_int> *
00067 LiveVariables ( legoProc *, int = 0 );
00068
00069 #endif // _INCLUDE_LIVE_H_
00070
00071
00072
00073
00074
00075