00001 00021 #ifndef ReachConstsIRInterface_h 00022 #define ReachConstsIRInterface_h 00023 00024 #include <OpenAnalysis/IRInterface/IRHandles.hpp> 00025 #include <OpenAnalysis/Utils/OA_ptr.hpp> 00026 #include <OpenAnalysis/ExprTree/ExprTree.hpp> 00027 #include <OpenAnalysis/IRInterface/ConstValBasicInterface.hpp> 00028 #include <OpenAnalysis/IRInterface/EvalToConstVisitorIRInterface.hpp> 00029 //#include <OpenAnalysis/IRInterface/ExprStmtPairIterator.hpp> 00030 #include <OpenAnalysis/IRInterface/AssignPairIterator.hpp> 00031 #include <OpenAnalysis/IRInterface/CalleeToCallerVisitorIRInterface.hpp> 00032 00033 namespace OA { 00034 namespace ReachConsts { 00035 00041 class ReachConstsIRInterface : public virtual IRHandlesIRInterface, 00042 public virtual EvalToConstVisitorIRInterface, 00043 public virtual DataFlow::CalleeToCallerVisitorIRInterface 00044 { 00045 public: 00046 ReachConstsIRInterface() { } 00047 virtual ~ReachConstsIRInterface() { } 00048 00051 virtual OA_ptr<IRStmtIterator> getStmtIterator(ProcHandle h) = 0; 00052 00054 //virtual std::string toString(const StmtHandle h) = 0; 00055 00057 //virtual std::string toString(const MemRefHandle h) = 0; 00058 00061 virtual OA_ptr<MemRefHandleIterator> getAllMemRefs(StmtHandle stmt) = 0; 00062 00065 virtual OA_ptr<MemRefHandleIterator> getDefMemRefs(StmtHandle stmt) = 0; 00066 00069 virtual OA_ptr<MemRefHandleIterator> getUseMemRefs(StmtHandle stmt) = 0; 00070 00074 virtual OA_ptr<AssignPairIterator> 00075 getAssignPairIterator(StmtHandle h) = 0; 00076 00080 virtual OA_ptr<ConstValBasicInterface> 00081 evalOp(OpHandle op, OA_ptr<ConstValBasicInterface> operand1, 00082 OA_ptr<ConstValBasicInterface> operand2) = 0; 00083 00086 virtual OA_ptr<ConstValBasicInterface> getConstValBasic(ConstSymHandle c) = 0; 00087 00090 virtual OA_ptr<ConstValBasicInterface> getConstValBasic(ConstValHandle c) = 0; 00091 00093 // given a ConstValBasicInterface, print out value if any 00094 virtual std::string toString(OA_ptr<ConstValBasicInterface> cvPtr) = 0; 00095 // need all for full override 00096 virtual std::string toString(const ProcHandle h) = 0; 00097 virtual std::string toString(const StmtHandle h) = 0; 00098 virtual std::string toString(const ExprHandle h) = 0; 00099 virtual std::string toString(const OpHandle h) = 0; 00100 virtual std::string toString(const MemRefHandle h) = 0; 00101 virtual std::string toString(const SymHandle h) = 0; 00102 virtual std::string toString(const ConstSymHandle h) = 0; 00103 virtual std::string toString(const ConstValHandle h) = 0; 00104 00105 00107 // Given an unsigned int, return a ConstValBAsicInterface for it 00108 virtual OA_ptr<ConstValBasicInterface> getConstValBasic (unsigned int val) = 0; 00109 00111 virtual OA_ptr<ExprTree> getExprTree(ExprHandle h) = 0; 00112 00114 virtual OA_ptr<IRCallsiteIterator> getCallsites(StmtHandle h) = 0; 00115 00117 // should be removed after testing 00118 virtual int returnOpEnumValInt(OA::OpHandle op) = 0; 00119 00120 }; 00121 00122 } // end of namespace ReachConsts 00123 } // end of namespace OA 00124 00125 #endif
1.6.1