00001 00014 #ifndef AliasTagInterface_H 00015 #define AliasTagInterface_H 00016 00017 #include <OpenAnalysis/Utils/OA_ptr.hpp> 00018 #include <OpenAnalysis/IRInterface/IRHandles.hpp> 00019 #include <OpenAnalysis/MemRefExpr/MemRefExpr.hpp> 00020 #include <OpenAnalysis/Alias/AliasTag.hpp> 00021 00022 namespace OA { 00023 namespace AliasTag { 00024 00025 00026 typedef enum { 00027 NOALIAS, 00028 MAYALIAS, 00029 MUSTALIAS 00030 } AliasResultType; 00031 00033 class AliasTagIterator { 00034 public: 00035 AliasTagIterator() { } 00036 virtual ~AliasTagIterator() { } 00037 00038 virtual AliasTag current() = 0; // Returns the current item. 00039 virtual bool isValid() = 0; // False when all items are exhausted. 00040 00041 virtual void operator++() = 0; 00042 void operator++(int) { ++*this; } ; 00043 00044 virtual void reset() = 0; 00045 }; 00046 00047 00048 class AliasTagInterface { 00049 public: 00050 AliasTagInterface() {} 00051 virtual ~AliasTagInterface() {}; 00052 00054 virtual AliasResultType alias(MemRefHandle ref1, 00055 MemRefHandle ref2) = 0; 00056 00059 00060 //virtual OA_ptr<TagIterator> getAliasTags( OA_ptr<MemRefExpr> mre, 00061 // CallContext context, SymHandle stmt ) = 0; 00062 00063 virtual OA_ptr<AliasTagIterator> getAliasTags( OA_ptr<MemRefExpr> mre )=0; 00064 00065 //virtual OA_ptr<TagIterator> getAliasTags( MemRefHandle memref, 00066 // CallContext context, SymHandle stmt ) = 0; 00067 00068 virtual OA_ptr<AliasTagIterator> getAliasTags( MemRefHandle memref )=0; 00069 00072 //FIXME: will need to uncomment at some point, MMS 12/16/07 00073 // virtual OA_ptr<MemRefExprIterator> getMemRefExprIterator(AliasTag tag)=0; 00074 00077 // FIXME: MMS 12/16/07, is this used anymore? 00078 //virtual OA_ptr<MemRefIterator> getMemRefIter() = 0; 00079 00080 }; 00081 00082 //typedef MemRefHandleIterator MemRefIterator; 00083 00084 } // end of Alias namespace 00085 } // end of OA namespace 00086 00087 #endif 00088
1.6.1