LoopIRInterface.hpp

Go to the documentation of this file.
00001 #ifndef LoopIRInterface_hpp
00002 #define LoopIRInterface_hpp
00003 
00004 #include <list>
00005 #include <OpenAnalysis/Utils/OA_ptr.hpp>
00006 #include <OpenAnalysis/Loop/LoopAbstraction.hpp>
00007 #include "AffineExprIRInterface.hpp"
00008 using namespace std;
00009 
00010 namespace OA {
00011   namespace Loop {
00012 
00014 class LoopIRInterface : public virtual IRHandlesIRInterface,
00015                         public virtual AffineExpr::AffineExprIRInterface
00016 {
00017   public:
00018     LoopIRInterface() {}
00019     virtual ~LoopIRInterface() {}
00020 
00021     virtual OA_ptr<list<OA_ptr<LoopAbstraction> > >
00022         gatherLoops(const ProcHandle &proc) = 0;
00023 
00025     virtual StmtHandle findEnclosingLoop(const StmtHandle &stmt) = 0;
00026 
00027     virtual OA_ptr<IRStmtIterator> getStmtIterator(ProcHandle h) = 0;
00028     virtual OA_ptr<MemRefHandleIterator> getAllMemRefs(StmtHandle stmt) = 0;
00029     virtual OA_ptr<MemRefExprIterator>
00030         getMemRefExprIterator(MemRefHandle h) = 0;
00031 };
00032 
00033 } } // end namespaces
00034 
00035 #endif
00036